11import deepmerge from "deepmerge" ;
22import { ReactNode , createContext , use } from "react" ;
3- import useStorage from "../hooks/useStorage" ;
3+ import useStorage , { getStorage } from "../hooks/useStorage" ;
44
55export type Settings = {
66 language : string ;
@@ -55,17 +55,22 @@ const defaultSettings: Settings = {
5555 } ,
5656} ;
5757
58+ export const getSettings = async ( ) => {
59+ const data = await getStorage < Partial < Settings > > ( "settings" , defaultSettings ) ;
60+ return deepmerge < Settings > ( defaultSettings , data ) ;
61+ } ;
62+
5863const SettingsContext = createContext ( {
5964 settings : defaultSettings ,
6065 // eslint-disable-next-line @typescript-eslint/no-unused-vars
6166 setSettings : ( _data : Settings ) => undefined ,
6267} ) ;
6368
6469export const SettingsProvider = ( { children } : { children : ReactNode } ) => {
65- const { data, setData } = useStorage < Settings > ( "settings" , defaultSettings ) ;
70+ const { data, setData } = useStorage < Partial < Settings > > ( "settings" , defaultSettings ) ;
6671
6772 // Migrate old settings TODO: Remove in future
68- if ( data . features . roundTimeNearestQuarterHour === true ) {
73+ if ( data ? .features ? .roundTimeNearestQuarterHour === true ) {
6974 data . features . roundTimeNearestQuarterHour = undefined ;
7075 data . features . roundToNearestInterval = true ;
7176 data . features . roundingInterval = 15 ;
@@ -81,7 +86,7 @@ export const SettingsProvider = ({ children }: { children: ReactNode }) => {
8186 if ( newData . redmineURL !== data . redmineURL ) {
8287 chrome . runtime . sendMessage ( "settings-changed:redmineURL" ) ;
8388 }
84- if ( newData . features . showCurrentIssueTimer !== data . features . showCurrentIssueTimer ) {
89+ if ( newData . features . showCurrentIssueTimer !== data . features ? .showCurrentIssueTimer ) {
8590 chrome . runtime . sendMessage ( "settings-changed:showCurrentIssueTimer" ) ;
8691 }
8792 } ,
0 commit comments