saleor-dashboard/src/hooks/useListSettings.ts

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2019-08-09 10:17:04 +00:00
import useLocalStorage from "@saleor/hooks/useLocalStorage";
import { useEffect } from "react";
2019-08-09 10:17:04 +00:00
import { AppListViewSettings, defaultListSettings } from "./../config";
import { ListSettings, ListViews } from "./../types";
export interface UseListSettings<TColumns extends string = string> {
settings: ListSettings<TColumns>;
updateListSettings: (key: keyof ListSettings<TColumns>, value: any) => void;
}
export default function useListSettings<TColumns extends string = string>(
listName: ListViews
): UseListSettings<TColumns> {
const [settings, setListSettings] = useLocalStorage<AppListViewSettings>(
"listConfig",
defaultListSettings
);
2020-01-30 11:46:35 +00:00
useEffect(() => {
if (settings[listName] === undefined) {
setListSettings(settings => ({
...settings,
[listName]: defaultListSettings[listName]
}));
}
}, []);
2019-08-09 10:17:04 +00:00
const updateListSettings = (key: keyof ListSettings, value: any) =>
setListSettings(settings => ({
...settings,
[listName]: {
...settings[listName],
[key]: value
}
}));
return {
settings: settings[listName] as ListSettings<TColumns>,
updateListSettings
};
}