Jelajahi Sumber

Add "[PDF]" prefix to detached window title (#8039)

* Move DetachProvider outside EditorProvider
* Add "[PDF]" prefix to detached window title

GitOrigin-RevId: 7d09f4053069b20d55a2a04a8f29f90b973e50b9
Alf Eaton 4 tahun lalu
induk
melakukan
2340b1b25e

+ 3 - 0
services/web/frontend/js/shared/context/detach-context.js

@@ -135,6 +135,9 @@ DetachProvider.propTypes = {
 
 
 export function useDetachContext(propTypes) {
 export function useDetachContext(propTypes) {
   const data = useContext(DetachContext)
   const data = useContext(DetachContext)
+  if (!data) {
+    throw new Error('useDetachContext is only available inside DetachProvider')
+  }
   PropTypes.checkPropTypes(propTypes, data, 'data', 'DetachContext.Provider')
   PropTypes.checkPropTypes(propTypes, data, 'data', 'DetachContext.Provider')
   return data
   return data
 }
 }

+ 21 - 6
services/web/frontend/js/shared/context/editor-context.js

@@ -10,6 +10,7 @@ import useScopeValue from '../hooks/use-scope-value'
 import useBrowserWindow from '../hooks/use-browser-window'
 import useBrowserWindow from '../hooks/use-browser-window'
 import { useIdeContext } from './ide-context'
 import { useIdeContext } from './ide-context'
 import { useProjectContext } from './project-context'
 import { useProjectContext } from './project-context'
+import { useDetachContext } from './detach-context'
 
 
 export const EditorContext = createContext()
 export const EditorContext = createContext()
 
 
@@ -41,6 +42,8 @@ EditorContext.Provider.propTypes = {
 export function EditorProvider({ children, settings }) {
 export function EditorProvider({ children, settings }) {
   const ide = useIdeContext()
   const ide = useIdeContext()
 
 
+  const { role } = useDetachContext()
+
   const { owner, features } = useProjectContext({
   const { owner, features } = useProjectContext({
     owner: PropTypes.shape({
     owner: PropTypes.shape({
       _id: PropTypes.string.isRequired,
       _id: PropTypes.string.isRequired,
@@ -107,12 +110,24 @@ export function EditorProvider({ children, settings }) {
 
 
   const { setTitle } = useBrowserWindow()
   const { setTitle } = useBrowserWindow()
   useEffect(() => {
   useEffect(() => {
-    setTitle(
-      `${projectName ? projectName + ' - ' : ''}Online LaTeX Editor ${
-        window.ExposedSettings.appName
-      }`
-    )
-  }, [projectName, setTitle])
+    const parts = []
+
+    if (role === 'detached') {
+      parts.push('[PDF]')
+    }
+
+    if (projectName) {
+      parts.push(projectName)
+      parts.push('-')
+    }
+
+    parts.push('Online LaTeX Editor')
+    parts.push(window.ExposedSettings.appName)
+
+    const title = parts.join(' ')
+
+    setTitle(title)
+  }, [projectName, setTitle, role])
 
 
   const insertSymbol = useCallback(symbol => {
   const insertSymbol = useCallback(symbol => {
     window.dispatchEvent(
     window.dispatchEvent(

+ 4 - 4
services/web/frontend/js/shared/context/root-context.js

@@ -20,8 +20,8 @@ export function ContextRoot({ children, ide, settings }) {
         <UserProvider>
         <UserProvider>
           <ProjectProvider>
           <ProjectProvider>
             <FileTreeDataProvider>
             <FileTreeDataProvider>
-              <EditorProvider settings={settings}>
-                <DetachProvider>
+              <DetachProvider>
+                <EditorProvider settings={settings}>
                   <LayoutProvider>
                   <LayoutProvider>
                     <LocalCompileProvider>
                     <LocalCompileProvider>
                       <DetachCompileProvider>
                       <DetachCompileProvider>
@@ -29,8 +29,8 @@ export function ContextRoot({ children, ide, settings }) {
                       </DetachCompileProvider>
                       </DetachCompileProvider>
                     </LocalCompileProvider>
                     </LocalCompileProvider>
                   </LayoutProvider>
                   </LayoutProvider>
-                </DetachProvider>
-              </EditorProvider>
+                </EditorProvider>
+              </DetachProvider>
             </FileTreeDataProvider>
             </FileTreeDataProvider>
           </ProjectProvider>
           </ProjectProvider>
         </UserProvider>
         </UserProvider>

+ 4 - 4
services/web/test/frontend/helpers/editor-providers.js

@@ -109,15 +109,15 @@ export function EditorProviders({
         <UserProvider>
         <UserProvider>
           <ProjectProvider>
           <ProjectProvider>
             <FileTreeDataProvider>
             <FileTreeDataProvider>
-              <EditorProvider settings={{}}>
-                <DetachProvider>
+              <DetachProvider>
+                <EditorProvider settings={{}}>
                   <LayoutProvider>
                   <LayoutProvider>
                     <LocalCompileProvider>
                     <LocalCompileProvider>
                       <DetachCompileProvider>{children}</DetachCompileProvider>
                       <DetachCompileProvider>{children}</DetachCompileProvider>
                     </LocalCompileProvider>
                     </LocalCompileProvider>
                   </LayoutProvider>
                   </LayoutProvider>
-                </DetachProvider>
-              </EditorProvider>
+                </EditorProvider>
+              </DetachProvider>
             </FileTreeDataProvider>
             </FileTreeDataProvider>
           </ProjectProvider>
           </ProjectProvider>
         </UserProvider>
         </UserProvider>