diff --git a/frontend/src/metabase/dashboard/reducers.js b/frontend/src/metabase/dashboard/reducers.js index c52a9e1cfef9dfb7b76464a97735ccd8425c2165..fc6c5c28acd64a2e0fd72831e62d573612907379 100644 --- a/frontend/src/metabase/dashboard/reducers.js +++ b/frontend/src/metabase/dashboard/reducers.js @@ -388,7 +388,9 @@ const loadingDashCards = handleActions( }, [FETCH_CARD_DATA_PENDING]: { next: (state, { payload: { dashcard_id } }) => { - const loadingIds = state.loadingIds.concat(dashcard_id); + const loadingIds = !state.loadingIds.includes(dashcard_id) + ? state.loadingIds.concat(dashcard_id) + : state.loadingIds; return { ...state, loadingIds, diff --git a/frontend/src/metabase/dashboard/reducers.unit.spec.js b/frontend/src/metabase/dashboard/reducers.unit.spec.js index 3ae70fa4cc98810c4af2a34047be923b812d1b0b..2bd16b4a3f49f94a2ba533b4dd31e976acab11d0 100644 --- a/frontend/src/metabase/dashboard/reducers.unit.spec.js +++ b/frontend/src/metabase/dashboard/reducers.unit.spec.js @@ -8,6 +8,7 @@ import { SET_DASHBOARD_ATTRIBUTES, FETCH_DASHBOARD_CARD_DATA, FETCH_CARD_DATA, + FETCH_CARD_DATA_PENDING, } from "./actions"; describe("dashboard reducers", () => { @@ -346,5 +347,26 @@ describe("dashboard reducers", () => { dashcardData: { 3: { 1: {} } }, }); }); + + it("should not have duplicated elements in loadingIds on pending (metabase#33692, metabase#34767)", () => { + const result = reducer( + { + ...initState, + loadingDashCards: { + loadingIds: [3], + loadingStatus: "running", + startTime: 100, + }, + }, + { + type: FETCH_CARD_DATA_PENDING, + payload: { + dashcard_id: 3, + card_id: 1, + }, + }, + ); + expect(result.loadingDashCards.loadingIds).toEqual([3]); + }); }); });