Writefull refactor bootstrapping (#29306)

GitOrigin-RevId: 6de05eb695579dc08cb5ee6ddf30c243cc2ff86a
This commit is contained in:
Borja
2025-11-05 09:23:50 +01:00
committed by Copybot
parent 820ce8ad1c
commit 1a511b14a4
4 changed files with 33 additions and 3 deletions

View File

@@ -996,6 +996,8 @@ module.exports = {
sourceEditorCompletionSources: [],
sourceEditorSymbolPalette: [],
sourceEditorToolbarComponents: [],
sourceEditorToolbarEndButtons: [],
rootContextProviders: [],
mainEditorLayoutModals: [],
langFeedbackLinkingWidgets: [],
labsExperiments: [],

View File

@@ -1,4 +1,4 @@
import React, { FC, PropsWithChildren } from 'react'
import React, { ElementType, FC, PropsWithChildren } from 'react'
import { ChatProvider } from '@/features/chat/context/chat-context'
import { ConnectionProvider } from './connection-context'
import { DetachCompileProvider } from '@/shared/context/detach-compile-context'
@@ -30,6 +30,12 @@ import { UserFeaturesProvider } from '@/shared/context/user-features-context'
import { UserSettingsProvider } from '@/shared/context/user-settings-context'
import { IdeRedesignSwitcherProvider } from './ide-redesign-switcher-context'
import { CommandRegistryProvider } from './command-registry-context'
import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
const rootContextProviders = importOverleafModules('rootContextProviders') as {
import: { default: ElementType }
path: string
}[]
export const ReactContextRoot: FC<
React.PropsWithChildren<{
@@ -71,6 +77,18 @@ export const ReactContextRoot: FC<
...providers,
}
// Extract dynamic providers from modules
const dynamicProviders = rootContextProviders.map(
module => module.import.default
)
// Wrap children with all dynamic providers from outside to inside
const childrenWrappedWithDynamicProviders =
dynamicProviders.reduceRight<React.ReactElement>(
(acc, Provider) => <Provider>{acc}</Provider>,
<>{children}</>
)
return (
<Providers.SplitTestProvider>
<Providers.ModalsContextProvider>
@@ -103,7 +121,9 @@ export const ReactContextRoot: FC<
<Providers.OutlineProvider>
<Providers.IdeRedesignSwitcherProvider>
<Providers.CommandRegistryProvider>
{children}
{
childrenWrappedWithDynamicProviders
}
</Providers.CommandRegistryProvider>
</Providers.IdeRedesignSwitcherProvider>
</Providers.OutlineProvider>

View File

@@ -40,6 +40,10 @@ const sourceEditorToolbarComponents = importOverleafModules(
'sourceEditorToolbarComponents'
) as { import: { default: ElementType }; path: string }[]
const sourceEditorToolbarEndButtons = importOverleafModules(
'sourceEditorToolbarEndButtons'
) as { import: { default: ElementType }; path: string }[]
export const CodeMirrorToolbar = () => {
const view = useCodeMirrorViewContext()
const panel = getPanel(view, createToolbarPanel)
@@ -204,6 +208,11 @@ const Toolbar = memo(function Toolbar() {
className="ol-cm-toolbar-button-group ol-cm-toolbar-end"
ref={handleButtons}
>
{sourceEditorToolbarEndButtons.map(
({ import: { default: Component }, path }) => (
<Component key={path} />
)
)}
<ToggleSearchButton state={state} />
<SwitchToPDFButton />
<DetacherSynctexControl />

View File

@@ -7,7 +7,6 @@ export interface WritefullEvents {
}
export interface WritefullAPI {
init(): void
addEventListener<eventName extends keyof WritefullEvents>(
name: eventName,
callback: (detail: WritefullEvents[eventName]) => void