saleor-dashboard/src/hooks/useListSettings.ts

46 lines
1.3 KiB
TypeScript
Raw Normal View History

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