Skip to content

Commit 4ada799

Browse files
committed
fix: Merge settings for background script (#32)
1 parent 98d547d commit 4ada799

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/background.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { getStorage } from "./hooks/useStorage";
2-
import { Settings } from "./provider/SettingsProvider";
1+
import { getSettings } from "./provider/SettingsProvider";
32

43
/**
54
* Open options page on install and set uninstall URL
@@ -16,7 +15,7 @@ chrome.runtime.onInstalled.addListener(({ reason }) => {
1615
* and re-register on Redmine URL change
1716
*/
1817
const registerContentScript = async () => {
19-
const settings = await getStorage<Partial<Settings>>("settings", {});
18+
const settings = await getSettings();
2019
if (!settings.redmineURL) return;
2120

2221
// Unregister content script
@@ -27,7 +26,7 @@ const registerContentScript = async () => {
2726
.catch(() => undefined);
2827

2928
// If showCurrentIssueTimer is disabled, do not register content script
30-
if (!settings.features?.showCurrentIssueTimer) return;
29+
if (!settings.features.showCurrentIssueTimer) return;
3130

3231
// Register content script
3332
await chrome.scripting.registerContentScripts([

src/provider/SettingsProvider.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import deepmerge from "deepmerge";
22
import { ReactNode, createContext, use } from "react";
3-
import useStorage from "../hooks/useStorage";
3+
import useStorage, { getStorage } from "../hooks/useStorage";
44

55
export 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+
5863
const SettingsContext = createContext({
5964
settings: defaultSettings,
6065
// eslint-disable-next-line @typescript-eslint/no-unused-vars
6166
setSettings: (_data: Settings) => undefined,
6267
});
6368

6469
export 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

Comments
 (0)