diff --git a/apps/web/src/hooks/__tests__/use-feature-flag.spec.ts b/apps/web/src/hooks/__tests__/use-feature-flag.spec.ts deleted file mode 100644 index 81d3326ea..000000000 --- a/apps/web/src/hooks/__tests__/use-feature-flag.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @vitest-environment happy-dom - */ -import { renderHook } from '@testing-library/react'; -import { beforeEach, describe, expect, test } from 'vitest'; - -import { defaultRecord, useFeatureFlag } from '../use-feature-flag'; - -beforeEach(() => { - globalThis.featureFlag.record = defaultRecord; - globalThis.featureFlag.callback.clear(); -}); - -describe('useFeatureFlag', () => { - test('basic', () => { - const flagHook = renderHook(() => - useFeatureFlag('enableIndexedDBProvider') - ); - expect(flagHook.result.current).toBe(defaultRecord.enableIndexedDBProvider); - globalThis.featureFlag.record.enableIndexedDBProvider = false; - globalThis.featureFlag.callback.forEach(cb => cb()); - flagHook.rerender(); - expect(flagHook.result.current).toBe(false); - }); -}); diff --git a/apps/web/src/hooks/use-feature-flag.ts b/apps/web/src/hooks/use-feature-flag.ts deleted file mode 100644 index 8e81abff1..000000000 --- a/apps/web/src/hooks/use-feature-flag.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { useCallback, useSyncExternalStore } from 'react'; - -interface FeatureFlag { - enableIndexedDBProvider: boolean; -} - -export const defaultRecord: FeatureFlag = { - enableIndexedDBProvider: true, -} as const; - -const featureFlag = { - record: { - enableIndexedDBProvider: true, - } as FeatureFlag, - callback: new Set<() => void>(), -}; - -declare global { - // eslint-disable-next-line no-var - var featureFlag: { - record: FeatureFlag; - callback: Set<() => void>; - }; -} -if (!globalThis.featureFlag) { - globalThis.featureFlag = featureFlag; -} - -export const getFeatureFlag = (key: Key) => - featureFlag.record[key]; - -export function useFeatureFlag( - key: Key -): FeatureFlag[Key] { - return useSyncExternalStore( - useCallback(onStoreChange => { - featureFlag.callback.add(onStoreChange); - return () => { - featureFlag.callback.delete(onStoreChange); - }; - }, []), - useCallback(() => featureFlag.record[key], [key]), - useCallback(() => defaultRecord[key], [key]) - ); -}