diff --git a/src/background/Background.ts b/src/background/Background.ts index 014bb507..2453bca9 100644 --- a/src/background/Background.ts +++ b/src/background/Background.ts @@ -12,6 +12,7 @@ import { isMonetizationReadyHandler, runPaymentHandler, setIncomingPointerHandler, + setStorageData, setStorageKey, } from '../messageHandlers' import { tabChangeHandler, tabUpdateHandler } from './tabHandlers' @@ -25,6 +26,7 @@ class Background { getStorageData, getStorageKey, setStorageKey, + setStorageData, ] private subscriptions: any = [] // TO DO: remove these from background into storage or state & use injection @@ -39,7 +41,7 @@ class Background { // TODO: to be moved to a service async setStorageDefaultData() { try { - await storageApi.set({ ...defaultData }) + await storageApi.set({ data: { ...defaultData } }) } catch (error) { console.error('Error storing data:', error) } diff --git a/src/messageHandlers/getStorageData.ts b/src/messageHandlers/getStorageData.ts index d1ae9648..66845d94 100644 --- a/src/messageHandlers/getStorageData.ts +++ b/src/messageHandlers/getStorageData.ts @@ -2,7 +2,7 @@ import { storageApi } from '@/utils/storage' const getStorageData = async () => { try { - const data = await storageApi.get('data') + const { data } = await storageApi.get('data') return { type: 'SUCCESS', data, diff --git a/src/messageHandlers/index.ts b/src/messageHandlers/index.ts index 83c0a511..52826a98 100644 --- a/src/messageHandlers/index.ts +++ b/src/messageHandlers/index.ts @@ -4,6 +4,7 @@ import getStorageKey from './getStorageKey' import isMonetizationReadyHandler from './isMonetizationReadyHandler' import runPaymentHandler from './runPaymentHandler' import setIncomingPointerHandler from './setIncomingPointerHandler' +import setStorageData from './setStorageData' import setStorageKey from './setStorageKey' export { @@ -13,5 +14,6 @@ export { isMonetizationReadyHandler, runPaymentHandler, setIncomingPointerHandler, + setStorageData, setStorageKey, } diff --git a/src/messageHandlers/setStorageData.ts b/src/messageHandlers/setStorageData.ts new file mode 100644 index 00000000..e424f76d --- /dev/null +++ b/src/messageHandlers/setStorageData.ts @@ -0,0 +1,17 @@ +import { storageApi } from '@/utils/storage' + +const setStorageData = async (data: any) => { + try { + await storageApi.set({ data }) + return { + type: 'SUCCESS', + } + } catch (error) { + return { + type: 'ERROR', + error, + } + } +} + +export default { callback: setStorageData, type: 'SET_STORAGE_DATA' } diff --git a/src/providers/__tests__/popup-context.test.tsx b/src/providers/__tests__/popup-context.test.tsx index d5b80640..60213a4f 100644 --- a/src/providers/__tests__/popup-context.test.tsx +++ b/src/providers/__tests__/popup-context.test.tsx @@ -11,6 +11,7 @@ jest.mock('webextension-polyfill', () => ({ addListener: jest.fn(), removeListener: jest.fn(), }, + sendMessage: jest.fn(), }, })) diff --git a/src/providers/popup.provider.tsx b/src/providers/popup.provider.tsx index 999e77ae..76500270 100644 --- a/src/providers/popup.provider.tsx +++ b/src/providers/popup.provider.tsx @@ -1,5 +1,6 @@ import React, { createContext, useEffect, useState } from 'react' +import { sendMessage } from '@/utils/sendMessages' import { defaultData, getStorageData } from '@/utils/storage' import { PopupContextValue, TPopupContext } from './providers.interface' @@ -16,6 +17,10 @@ export const PopupContext = createContext({ export const PopupProvider: React.FC = ({ children }) => { const [data, setData] = useState({ ...defaultData }) + const updateStorageData = async () => { + await sendMessage({ type: 'SET_STORAGE_DATA', data }) + } + useEffect(() => { const fetchData = async () => { try { @@ -32,6 +37,13 @@ export const PopupProvider: React.FC = ({ children }) => { fetchData() }, []) + useEffect(() => { + if (JSON.stringify(data) !== JSON.stringify(defaultData)) { + updateStorageData() + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [data]) + return {children} }