import useLocalStorage from "@saleor/hooks/useLocalStorage"; import merge from "lodash/merge"; import { AppListViewSettings, defaultListSettings } from "./../config"; import { ListSettings, ListViews } from "./../types"; export const listSettingsStorageKey = "listConfig"; export interface UseListSettings { settings: ListSettings; updateListSettings: >( key: T, value: ListSettings[T], ) => void; } export default function useListSettings( listName: ListViews, ): UseListSettings { const [settings, setListSettings] = useLocalStorage( listSettingsStorageKey, storedListSettings => { if (typeof storedListSettings !== "object") { return defaultListSettings; } return merge({}, defaultListSettings, storedListSettings); }, ); const updateListSettings = ( key: T, value: ListSettings[T], ) => setListSettings(settings => ({ ...settings, [listName]: { ...settings[listName], [key]: value, }, })); return { settings: settings[listName] as ListSettings, updateListSettings, }; }