From 44d84b6c7ff7ff4c59a4baf1946032b64109aff9 Mon Sep 17 00:00:00 2001
From: Alexander Polyankin <alexander.polyankin@metabase.com>
Date: Fri, 16 Sep 2022 13:44:10 +0300
Subject: [PATCH] Update popper position when the filter changes (#25380)

---
 .../metabase/modes/components/drill/ColumnFilterDrill.jsx | 3 ++-
 .../components/filters/FilterPopover/FilterPopover.tsx    | 4 +++-
 .../visualizations/components/ChartClickActions.jsx       | 8 +++++++-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/frontend/src/metabase/modes/components/drill/ColumnFilterDrill.jsx b/frontend/src/metabase/modes/components/drill/ColumnFilterDrill.jsx
index dd9a6b6c68b..d4cdaab797b 100644
--- a/frontend/src/metabase/modes/components/drill/ColumnFilterDrill.jsx
+++ b/frontend/src/metabase/modes/components/drill/ColumnFilterDrill.jsx
@@ -32,11 +32,12 @@ export default function ColumnFilterDrill({ question, clicked }) {
       buttonType: "horizontal",
       icon: "filter",
       // eslint-disable-next-line react/display-name
-      popover: ({ onChangeCardAndRun, onClose }) => (
+      popover: ({ onChangeCardAndRun, onResize, onClose }) => (
         <FilterPopover
           query={query}
           filter={initialFilter}
           onClose={onClose}
+          onResize={onResize}
           onChangeFilter={filter => {
             const nextCard = query.filter(filter).question().card();
             onChangeCardAndRun({ nextCard });
diff --git a/frontend/src/metabase/query_builder/components/filters/FilterPopover/FilterPopover.tsx b/frontend/src/metabase/query_builder/components/filters/FilterPopover/FilterPopover.tsx
index 6cefa5687d3..83a2acb0db3 100644
--- a/frontend/src/metabase/query_builder/components/filters/FilterPopover/FilterPopover.tsx
+++ b/frontend/src/metabase/query_builder/components/filters/FilterPopover/FilterPopover.tsx
@@ -35,7 +35,7 @@ type Props = {
   query: StructuredQuery;
   onChange?: (filter: Filter) => void;
   onChangeFilter: (filter: Filter) => void;
-
+  onResize?: () => void;
   onClose?: () => void;
 
   noCommitButton?: boolean;
@@ -70,6 +70,7 @@ export default function FilterPopover({
   checkedColor,
   onChange,
   onChangeFilter,
+  onResize,
   onClose,
 }: Props) {
   const [filter, setFilter] = useState(
@@ -148,6 +149,7 @@ export default function FilterPopover({
   const handleFilterChange = (mbql: any[] = []) => {
     const newFilter = filter ? filter.set(mbql) : new Filter(mbql, null, query);
     setFilter(newFilter);
+    onResize?.();
   };
 
   if (editingFilter) {
diff --git a/frontend/src/metabase/visualizations/components/ChartClickActions.jsx b/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
index 8bbd20ac338..cb7a0471d6e 100644
--- a/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
+++ b/frontend/src/metabase/visualizations/components/ChartClickActions.jsx
@@ -145,6 +145,9 @@ class ChartClickActions extends Component {
       const PopoverContent = popoverAction.popover;
       popover = (
         <PopoverContent
+          onResize={() => {
+            this.instance?.popperInstance?.update();
+          }}
           onChangeCardAndRun={({ nextCard }) => {
             if (popoverAction) {
               MetabaseAnalytics.trackStructEvent(
@@ -204,6 +207,9 @@ class ChartClickActions extends Component {
       <FlexTippyPopover
         reference={popoverAnchor}
         visible={!!popoverAnchor}
+        onShow={instance => {
+          this.instance = instance;
+        }}
         onClose={() => {
           MetabaseAnalytics.trackStructEvent(
             "Action",
@@ -212,7 +218,7 @@ class ChartClickActions extends Component {
           this.close();
         }}
         placement="bottom-start"
-        offset={[-8, 8]}
+        offset={[0, 8]}
         popperOptions={{
           flip: true,
           modifiers: [
-- 
GitLab