From f4a90defc3e2ae83ca43a747afffef16c99280de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Berg=C3=A9?= Date: Mon, 6 Jan 2025 16:06:59 +0100 Subject: [PATCH] Remove Recoil (#2674) --- .changeset/pretty-penguins-carry.md | 5 + bun.lockb | Bin 572016 -> 571488 bytes packages/gitbook/package.json | 1 - .../DocumentView/Tabs/DynamicTabs.tsx | 91 ++++++----- .../src/components/PageBody/PageHeader.tsx | 7 +- .../components/RootLayout/ClientContexts.tsx | 7 +- .../src/components/Search/SearchAskAnswer.tsx | 35 ++-- .../components/Search/SearchAskContext.tsx | 37 +++++ .../src/components/Search/SearchModal.tsx | 149 +++++++++--------- packages/react-openapi/package.json | 3 +- .../react-openapi/src/InteractiveSection.tsx | 32 +++- 11 files changed, 207 insertions(+), 160 deletions(-) create mode 100644 .changeset/pretty-penguins-carry.md create mode 100644 packages/gitbook/src/components/Search/SearchAskContext.tsx diff --git a/.changeset/pretty-penguins-carry.md b/.changeset/pretty-penguins-carry.md new file mode 100644 index 000000000..46e18f2ea --- /dev/null +++ b/.changeset/pretty-penguins-carry.md @@ -0,0 +1,5 @@ +--- +'gitbook': patch +--- + +Fix two issues where pages would crash due Recoil not behaving correctly in RSC. diff --git a/bun.lockb b/bun.lockb index 70ae2be15d2b04f404c57bb64aaf59ade57ad3b6..2a62fae6f7f695a4a69603f67f05f4d6b3c6e0e0 100755 GIT binary patch delta 94779 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 delta 94880 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 diff --git a/packages/gitbook/package.json b/packages/gitbook/package.json index 7bd6bab3c..b4a570631 100644 --- a/packages/gitbook/package.json +++ b/packages/gitbook/package.json @@ -52,7 +52,6 @@ "react": "18.3.1", "react-dom": "18.3.1", "react-hotkeys-hook": "^4.4.1", - "recoil": "^0.7.7", "rehype-sanitize": "^6.0.0", "rehype-stringify": "^10.0.0", "remark-gfm": "^4.0.0", diff --git a/packages/gitbook/src/components/DocumentView/Tabs/DynamicTabs.tsx b/packages/gitbook/src/components/DocumentView/Tabs/DynamicTabs.tsx index 80c2cfa0f..d0ec26549 100644 --- a/packages/gitbook/src/components/DocumentView/Tabs/DynamicTabs.tsx +++ b/packages/gitbook/src/components/DocumentView/Tabs/DynamicTabs.tsx @@ -1,11 +1,46 @@ 'use client'; -import React from 'react'; -import { atom, selectorFamily, useRecoilValue, useSetRecoilState } from 'recoil'; +import React, { useCallback, useMemo } from 'react'; import { useHash, useIsMounted } from '@/components/hooks'; import { ClassValue, tcls } from '@/lib/tailwind'; +interface TabsState { + activeIds: { + [tabsBlockId: string]: string; + }; + activeTitles: string[]; +} + +let globalTabsState: TabsState = (() => { + if (typeof localStorage === 'undefined') { + return { activeIds: {}, activeTitles: [] }; + } + + const stored = localStorage.getItem('@gitbook/tabsState'); + return stored ? (JSON.parse(stored) as TabsState) : { activeIds: {}, activeTitles: [] }; +})(); +const listeners = new Set<() => void>(); + +function useTabsState() { + const subscribe = useCallback((callback: () => void) => { + listeners.add(callback); + return () => listeners.delete(callback); + }, []); + + const getSnapshot = useCallback(() => globalTabsState, []); + + const setTabsState = (updater: (previous: TabsState) => TabsState) => { + globalTabsState = updater(globalTabsState); + if (typeof localStorage !== 'undefined') { + localStorage.setItem('@gitbook/tabsState', JSON.stringify(globalTabsState)); + } + listeners.forEach((listener) => listener()); + }; + const state = React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot); + return [state, setTabsState] as const; +} + // How many titles are remembered: const TITLES_MAX = 5; @@ -14,7 +49,6 @@ export interface TabsItem { title: string; } -// https://github.com/facebookexperimental/Recoil/issues/629#issuecomment-914273925 type SelectorMapper = { [Property in keyof Type]: Type[Property]; }; @@ -42,18 +76,21 @@ export function DynamicTabs( const { id, tabs, tabsBody, style } = props; const hash = useHash(); + const [tabsState, setTabsState] = useTabsState(); + const activeState = useMemo(() => { + const input = { id, tabs }; + return ( + getTabBySelection(input, tabsState) ?? getTabByTitle(input, tabsState) ?? input.tabs[0] + ); + }, [id, tabs, tabsState]); - const activeState = useRecoilValue(tabsActiveSelector({ id, tabs })); - - // To avoid issue with hydration, we only use the state from recoil (which is loaded from localstorage), + // To avoid issue with hydration, we only use the state from localStorage // once the component has been mounted. // Otherwise because of the streaming/suspense approach, tabs can be first-rendered at different time // and get stuck into an inconsistent state. const mounted = useIsMounted(); const active = mounted ? activeState : tabs[0]; - const setTabsState = useSetRecoilState(tabsAtom); - /** * When clicking to select a tab, we: * - mark this specific ID as selected @@ -220,44 +257,6 @@ export function DynamicTabs( ); } -const tabsAtom = atom({ - key: 'tabsAtom', - default: { - activeIds: {}, - activeTitles: [], - }, - effects: [ - // Persist the state to local storage - ({ trigger, setSelf, onSet }) => { - if (typeof localStorage === 'undefined') { - return; - } - - const localStorageKey = '@gitbook/tabsState'; - if (trigger === 'get') { - const stored = localStorage.getItem(localStorageKey); - if (stored) { - setSelf(JSON.parse(stored)); - } - } - - onSet((newState) => { - localStorage.setItem(localStorageKey, JSON.stringify(newState)); - }); - }, - ], -}); - -const tabsActiveSelector = selectorFamily>({ - key: 'tabsActiveSelector', - get: - (input) => - ({ get }) => { - const state = get(tabsAtom); - return getTabBySelection(input, state) ?? getTabByTitle(input, state) ?? input.tabs[0]; - }, -}); - /** * Get the ID for a tab button. */ diff --git a/packages/gitbook/src/components/PageBody/PageHeader.tsx b/packages/gitbook/src/components/PageBody/PageHeader.tsx index 1e81e8ec0..2aa3eaaed 100644 --- a/packages/gitbook/src/components/PageBody/PageHeader.tsx +++ b/packages/gitbook/src/components/PageBody/PageHeader.tsx @@ -1,5 +1,6 @@ import { RevisionPage, RevisionPageDocument } from '@gitbook/api'; import { Icon } from '@gitbook/icons'; +import { Fragment } from 'react'; import { pageHref } from '@/lib/links'; import { AncestorRevisionPage } from '@/lib/pages'; @@ -27,8 +28,8 @@ export function PageHeader(props: { diff --git a/packages/gitbook/src/components/RootLayout/ClientContexts.tsx b/packages/gitbook/src/components/RootLayout/ClientContexts.tsx index f2b1ce7da..153166047 100644 --- a/packages/gitbook/src/components/RootLayout/ClientContexts.tsx +++ b/packages/gitbook/src/components/RootLayout/ClientContexts.tsx @@ -1,7 +1,6 @@ 'use client'; import React from 'react'; -import { RecoilRoot } from 'recoil'; import { TranslateContext } from '@/intl/client'; import { TranslationLanguage } from '@/intl/translations'; @@ -12,9 +11,5 @@ export function ClientContexts(props: { }) { const { children, language } = props; - return ( - - {children} - - ); + return {children}; } diff --git a/packages/gitbook/src/components/Search/SearchAskAnswer.tsx b/packages/gitbook/src/components/Search/SearchAskAnswer.tsx index ef9f68c82..018575132 100644 --- a/packages/gitbook/src/components/Search/SearchAskAnswer.tsx +++ b/packages/gitbook/src/components/Search/SearchAskAnswer.tsx @@ -2,7 +2,6 @@ import { Icon } from '@gitbook/icons'; import React from 'react'; -import { atom, useRecoilState } from 'recoil'; import { Loading } from '@/components/primitives'; import { useLanguage } from '@/intl/client'; @@ -16,8 +15,9 @@ import { AskAnswerResult, AskAnswerSource, streamAskQuestion } from './server-ac import { useSearch, useSearchLink } from './useSearch'; import { useTrackEvent } from '../Insights'; import { Link } from '../primitives'; +import { useSearchAskContext } from './SearchAskContext'; -type SearchState = +export type SearchAskState = | { type: 'answer'; answer: AskAnswerResult; @@ -29,15 +29,6 @@ type SearchState = type: 'loading'; }; -/** -- * Store the state of the answer in a global state so that it can be -- * accessed from anywhere to show a loading indicator. -- */ -export const searchAskState = atom({ - key: 'searchAskState', - default: null, -}); - /** * Fetch and render the answers to a question. */ @@ -47,13 +38,13 @@ export function SearchAskAnswer(props: { pointer: SiteContentPointer; query: str const language = useLanguage(); const trackEvent = useTrackEvent(); const [, setSearchState] = useSearch(); - const [state, setState] = useRecoilState(searchAskState); + const [askState, setAskState] = useSearchAskContext(); const { organizationId, siteId, siteSpaceId } = pointer; React.useEffect(() => { let cancelled = false; - setState({ type: 'loading' }); + setAskState({ type: 'loading' }); (async () => { trackEvent({ @@ -73,14 +64,14 @@ export function SearchAskAnswer(props: { pointer: SiteContentPointer; query: str return; } - setState({ type: 'answer', answer: chunk }); + setAskState({ type: 'answer', answer: chunk }); } })().catch(() => { if (cancelled) { return; } - setState({ type: 'error' }); + setAskState({ type: 'error' }); }); return () => { @@ -90,13 +81,13 @@ export function SearchAskAnswer(props: { pointer: SiteContentPointer; query: str cancelled = true; } }; - }, [organizationId, siteId, siteSpaceId, query, setState, setSearchState]); + }, [organizationId, siteId, siteSpaceId, query, setAskState, setSearchState, trackEvent]); React.useEffect(() => { return () => { - setState(null); + setAskState(null); }; - }, [setState]); + }, [setAskState]); const loading = (
@@ -106,15 +97,15 @@ export function SearchAskAnswer(props: { pointer: SiteContentPointer; query: str return (
- {state?.type === 'answer' ? ( + {askState?.type === 'answer' ? ( - + ) : null} - {state?.type === 'error' ? ( + {askState?.type === 'error' ? (
{t(language, 'search_ask_error')}
) : null} - {state?.type === 'loading' ? loading : null} + {askState?.type === 'loading' ? loading : null}
); } diff --git a/packages/gitbook/src/components/Search/SearchAskContext.tsx b/packages/gitbook/src/components/Search/SearchAskContext.tsx new file mode 100644 index 000000000..b3aeee315 --- /dev/null +++ b/packages/gitbook/src/components/Search/SearchAskContext.tsx @@ -0,0 +1,37 @@ +import { createContext, useContext, useMemo, useState } from 'react'; + +import { SearchAskState } from './SearchAskAnswer'; + +type SearchAskContextValue = [ + askState: SearchAskState | null, + setAskState: React.Dispatch>, +]; + +const SearchAskContext = createContext(undefined); + +/** + * Hook to manage the state of the search ask component. + */ +export function useSearchAskState(): SearchAskContextValue { + const [state, setState] = useState(null); + return useMemo(() => [state, setState], [state]); +} + +/** + * Provider for the search ask context. + */ +export function SearchAskProvider(props: { + children: React.ReactNode; + value: SearchAskContextValue; +}) { + const { children, value } = props; + return {children}; +} + +export function useSearchAskContext() { + const context = useContext(SearchAskContext); + if (!context) { + throw new Error('SearchAskContext is not available'); + } + return context; +} diff --git a/packages/gitbook/src/components/Search/SearchModal.tsx b/packages/gitbook/src/components/Search/SearchModal.tsx index 760513c5a..ca165e731 100644 --- a/packages/gitbook/src/components/Search/SearchModal.tsx +++ b/packages/gitbook/src/components/Search/SearchModal.tsx @@ -3,15 +3,15 @@ import { Icon } from '@gitbook/icons'; import { AnimatePresence, motion } from 'framer-motion'; import { useRouter } from 'next/navigation'; -import React from 'react'; +import React, { useState } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; -import { useRecoilValue } from 'recoil'; import { tString, useLanguage } from '@/intl/client'; import { SiteContentPointer } from '@/lib/api'; import { tcls } from '@/lib/tailwind'; -import { SearchAskAnswer, searchAskState } from './SearchAskAnswer'; +import { SearchAskAnswer } from './SearchAskAnswer'; +import { SearchAskProvider, useSearchAskState } from './SearchAskContext'; import { SearchResults, SearchResultsRef } from './SearchResults'; import { SearchScopeToggle } from './SearchScopeToggle'; import { SearchState, UpdateSearchState, useSearch } from './useSearch'; @@ -31,7 +31,8 @@ interface SearchModalProps { */ export function SearchModal(props: SearchModalProps) { const [state, setSearchState] = useSearch(); - const askState = useRecoilValue(searchAskState); + const searchAsk = useSearchAskState(); + const [askState] = searchAsk; const router = useRouter(); useHotkeys( @@ -63,75 +64,77 @@ export function SearchModal(props: SearchModalProps) { }; return ( - - {state !== null ? ( - { - onClose(); - }} - > -
- - {askState?.type === 'loading' ? ( - - - - ) : null} - - -
-
- ) : null} -
+ + + {state !== null ? ( + { + onClose(); + }} + > +
+ + {askState?.type === 'loading' ? ( + + + + ) : null} + + +
+
+ ) : null} +
+
); } diff --git a/packages/react-openapi/package.json b/packages/react-openapi/package.json index 12dd99166..911b0dc78 100644 --- a/packages/react-openapi/package.json +++ b/packages/react-openapi/package.json @@ -24,8 +24,7 @@ "typescript": "^5.5.3" }, "peerDependencies": { - "react": "*", - "recoil": "^0.7.7" + "react": "*" }, "scripts": { "build": "tsc", diff --git a/packages/react-openapi/src/InteractiveSection.tsx b/packages/react-openapi/src/InteractiveSection.tsx index 37b19d247..077506bdb 100644 --- a/packages/react-openapi/src/InteractiveSection.tsx +++ b/packages/react-openapi/src/InteractiveSection.tsx @@ -1,8 +1,7 @@ 'use client'; import classNames from 'classnames'; -import React from 'react'; -import { atom, useRecoilState } from 'recoil'; +import React, { useCallback } from 'react'; interface InteractiveSectionTab { key: string; @@ -10,10 +9,29 @@ interface InteractiveSectionTab { body: React.ReactNode; } -const syncedTabsAtom = atom>({ - key: 'syncedTabState', - default: {}, -}); +let globalState: Record = {}; +const listeners = new Set<() => void>(); + +function useSyncedTabsGlobalState() { + const subscribe = useCallback((callback: () => void) => { + listeners.add(callback); + return () => listeners.delete(callback); + }, []); + + const getSnapshot = useCallback(() => globalState, []); + + const setSyncedTabs = useCallback( + (updater: (tabs: Record) => Record) => { + globalState = updater(globalState); + listeners.forEach((listener) => listener()); + }, + [], + ); + + const tabs = React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot); + + return [tabs, setSyncedTabs] as const; +} /** * To optimize rendering, most of the components are server-components, @@ -57,7 +75,7 @@ export function InteractiveSection(props: { toggleCloseIcon = '▼', stateKey, } = props; - const [syncedTabs, setSyncedTabs] = useRecoilState(syncedTabsAtom); + const [syncedTabs, setSyncedTabs] = useSyncedTabsGlobalState(); const tabFromState = stateKey && stateKey in syncedTabs ? tabs.find((tab) => tab.key === syncedTabs[stateKey])