Skip to content

Commit c357e93

Browse files
committed
refactor: useMetadataPanelStore & ...actions
1 parent 019834b commit c357e93

1 file changed

Lines changed: 50 additions & 46 deletions

File tree

app/components/metadata-panel.tsx

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -38,42 +38,46 @@ type MetadataPanelSection = "general" | "data";
3838

3939
type MetadataPanelState = {
4040
open: boolean;
41-
setOpen: (d: boolean) => void;
42-
toggle: () => void;
4341
activeSection: MetadataPanelSection;
44-
setActiveSection: (d: MetadataPanelSection) => void;
4542
selectedDimension: DimensionMetadataFragment | undefined;
46-
setSelectedDimension: (d: DimensionMetadataFragment) => void;
47-
clearSelectedDimension: () => void;
48-
openDimension: (d: DimensionMetadataFragment) => void;
49-
reset: () => void;
43+
actions: {
44+
setOpen: (d: boolean) => void;
45+
toggle: () => void;
46+
setActiveSection: (d: MetadataPanelSection) => void;
47+
setSelectedDimension: (d: DimensionMetadataFragment) => void;
48+
clearSelectedDimension: () => void;
49+
openDimension: (d: DimensionMetadataFragment) => void;
50+
reset: () => void;
51+
};
5052
};
5153

5254
export const createMetadataPanelStore = () =>
5355
createStore<MetadataPanelState>((set, get) => ({
5456
open: false,
55-
setOpen: (d: boolean) => {
56-
set({ open: d });
57-
},
58-
toggle: () => {
59-
set({ open: !get().open });
60-
},
6157
activeSection: "general",
62-
setActiveSection: (d: MetadataPanelSection) => {
63-
set({ activeSection: d });
64-
},
6558
selectedDimension: undefined,
66-
setSelectedDimension: (d: DimensionMetadataFragment) => {
67-
set({ selectedDimension: d });
68-
},
69-
clearSelectedDimension: () => {
70-
set({ selectedDimension: undefined });
71-
},
72-
openDimension: (d: DimensionMetadataFragment) => {
73-
set({ open: true, activeSection: "data", selectedDimension: d });
74-
},
75-
reset: () => {
76-
set({ activeSection: "general", selectedDimension: undefined });
59+
actions: {
60+
setOpen: (d: boolean) => {
61+
set({ open: d });
62+
},
63+
toggle: () => {
64+
set({ open: !get().open });
65+
},
66+
setActiveSection: (d: MetadataPanelSection) => {
67+
set({ activeSection: d });
68+
},
69+
setSelectedDimension: (d: DimensionMetadataFragment) => {
70+
set({ selectedDimension: d });
71+
},
72+
clearSelectedDimension: () => {
73+
set({ selectedDimension: undefined });
74+
},
75+
openDimension: (d: DimensionMetadataFragment) => {
76+
set({ open: true, activeSection: "data", selectedDimension: d });
77+
},
78+
reset: () => {
79+
set({ activeSection: "general", selectedDimension: undefined });
80+
},
7781
},
7882
}));
7983

@@ -85,6 +89,12 @@ const useMetadataPanelStore: <T>(
8589
return useStore(store, selector, shallow);
8690
};
8791

92+
const useMetadataPanelStoreActions = () => {
93+
const store = React.useContext(MetadataPanelStoreContext);
94+
95+
return useStore(store, (state) => state.actions);
96+
};
97+
8898
const defaultStore = createMetadataPanelStore();
8999

90100
export const MetadataPanelStoreContext = React.createContext(defaultStore);
@@ -209,7 +219,7 @@ export const OpenMetadataPanelWrapper = ({
209219
children: React.ReactNode;
210220
}) => {
211221
const classes = useOtherStyles();
212-
const openDimension = useMetadataPanelStore((state) => state.openDimension);
222+
const { openDimension } = useMetadataPanelStoreActions();
213223
const handleClick = useEvent(() => {
214224
openDimension(dim);
215225
});
@@ -246,15 +256,12 @@ export const MetadataPanel = ({
246256
const router = useRouter();
247257
const drawerClasses = useDrawerStyles({ top });
248258
const otherClasses = useOtherStyles();
249-
const { open, setOpen, toggle, activeSection, setActiveSection, reset } =
250-
useMetadataPanelStore((state) => ({
251-
open: state.open,
252-
setOpen: state.setOpen,
253-
toggle: state.toggle,
254-
activeSection: state.activeSection,
255-
setActiveSection: state.setActiveSection,
256-
reset: state.reset,
257-
}));
259+
const { open, activeSection } = useMetadataPanelStore((state) => ({
260+
open: state.open,
261+
activeSection: state.activeSection,
262+
}));
263+
const { setOpen, toggle, setActiveSection, reset } =
264+
useMetadataPanelStoreActions();
258265
const handleToggle = useEvent(() => {
259266
toggle();
260267
});
@@ -382,12 +389,11 @@ const TabPanelData = ({
382389
dimensions: DimensionMetadataFragment[];
383390
}) => {
384391
const classes = useOtherStyles();
385-
const { selectedDimension, setSelectedDimension, clearSelectedDimension } =
386-
useMetadataPanelStore((state) => ({
387-
selectedDimension: state.selectedDimension,
388-
setSelectedDimension: state.setSelectedDimension,
389-
clearSelectedDimension: state.clearSelectedDimension,
390-
}));
392+
const selectedDimension = useMetadataPanelStore(
393+
(state) => state.selectedDimension
394+
);
395+
const { setSelectedDimension, clearSelectedDimension } =
396+
useMetadataPanelStoreActions();
391397
const [inputValue, setInputValue] = React.useState("");
392398

393399
const options = React.useMemo(() => {
@@ -488,9 +494,7 @@ const TabPanelDataDimension = ({
488494
expandable: boolean;
489495
}) => {
490496
const classes = useOtherStyles();
491-
const setSelectedDimension = useMetadataPanelStore(
492-
(state) => state.setSelectedDimension
493-
);
497+
const { setSelectedDimension } = useMetadataPanelStoreActions();
494498
const { description, showExpandButton } = React.useMemo(() => {
495499
if (expandable && dim.description && dim.description.length > 180) {
496500
return {

0 commit comments

Comments
 (0)