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 }; }