diff --git a/apps/fullstack/components/editor/context.tsx b/apps/fullstack/components/editor/context.tsx index a6e601dd9d8de5c56331a8449172cdbc94db6e23..9e8594c4e6aad2ecf83af1bd8aaec315e5fe1c5c 100644 --- a/apps/fullstack/components/editor/context.tsx +++ b/apps/fullstack/components/editor/context.tsx @@ -1,4 +1,5 @@ "use client"; +import useUser from "lib/hooks/useUser"; import { createContext, Dispatch, @@ -11,7 +12,7 @@ import { useState, } from "react"; -import { ID, PageData } from "@snip/database/types"; +import { ID, PageData, UserConfigDataRet } from "@snip/database/types"; import { ViewPort } from "@snip/render/viewport"; import { BaseData, BaseView, SnipData } from "@snip/snips/general/base"; @@ -60,6 +61,9 @@ interface EditorContextI { scale: Map<PageIdx, number>; zoom: Map<PageIdx, number>; triggerScaleZoomUpdate: (page_idx: PageIdx, viewport?: ViewPort) => void; + + // User config + userConfig: UserConfigDataRet; } const EditorContext = createContext<EditorContextI | null>(null); @@ -95,6 +99,9 @@ function _EditorContextProvider({ children }: { children: React.ReactNode }) { const [overlayOnPageIdx, setOverlayOnPageIdx] = useState<number>(0); const [overlayContainer, setOverlayContainer] = useState<HTMLDivElement>(); + /** User config */ + const { config: userConfig } = useUser(true); + // Position relative to the page i.e. top left corner is // at the top left corner of the page (not the wrapper) // This normally mirrors the active snip position @@ -169,6 +176,7 @@ function _EditorContextProvider({ children }: { children: React.ReactNode }) { zoom, scale, triggerScaleZoomUpdate, + userConfig: userConfig!, }} > <UrlPageHashHandler /> diff --git a/apps/fullstack/components/editor/tools/context.tsx b/apps/fullstack/components/editor/tools/context.tsx index 738de71f2b05747f2eac39e5f133231d1b226ced..f6ed1c0be4803cbdd765a876c2bf71fa852d8ea3 100644 --- a/apps/fullstack/components/editor/tools/context.tsx +++ b/apps/fullstack/components/editor/tools/context.tsx @@ -77,8 +77,6 @@ interface ToolsContextI { from: Rect, to_unit?: CoordUnit, ) => Rect; - - defaultUserConfig: ReturnType<typeof useUser>["config"]; } const ToolContext = createContext<ToolsContextI | null>(null); @@ -118,7 +116,6 @@ export function ToolsContextProvider({ const { workers } = useWorkerContext(); const { snips } = useQueuedSnipsContext(); const { activeSnipId, scale } = useEditorContext(); - const { config: defaultUserConfig } = useUser(true); // pixel ratio const pr = useDevicePixelRatio(); @@ -226,7 +223,6 @@ export function ToolsContextProvider({ transformRectCoords, activeSnip, placePageIdx: 0, - defaultUserConfig, }} > {inner} diff --git a/apps/fullstack/components/editor/tools/doodle/context.tsx b/apps/fullstack/components/editor/tools/doodle/context.tsx index ff8de7ee0ef6e890929225852d5cb9fda469469e..945812893a980c50b76b87dcd826c6ca30b7315d 100644 --- a/apps/fullstack/components/editor/tools/doodle/context.tsx +++ b/apps/fullstack/components/editor/tools/doodle/context.tsx @@ -10,9 +10,10 @@ import { useState, } from "react"; -import { useToolsContext } from "../context"; import { ToolContextProps } from "../types"; +import { useEditorContext } from "components/editor/context"; + export interface DoodleContextI { // The current tool colorList: string[]; @@ -39,7 +40,7 @@ const DoodleToolContext = createContext<DoodleContextI | null>(null); export function DoodleToolContextProvider({ children }: ToolContextProps) { const mounted = useRef(false); - const { defaultUserConfig } = useToolsContext(); + const { userConfig } = useEditorContext(); const [colorList, setColorList] = useState([ "#000000", @@ -56,35 +57,33 @@ export function DoodleToolContextProvider({ children }: ToolContextProps) { // Sync local state from user defaults useEffect(() => { - if (mounted.current || !defaultUserConfig) return; + if (mounted.current || !userConfig) return; mounted.current = true; setColorList((prev) => { - if (defaultUserConfig.pen_colors) { - return defaultUserConfig.pen_colors; + if (userConfig.pen_colors) { + return userConfig.pen_colors; } return prev; }); setCurrentColorIdx((prev) => { - if (defaultUserConfig.pen_colors && defaultUserConfig.pen_color) { - const idx = defaultUserConfig.pen_colors.indexOf( - defaultUserConfig.pen_color, - ); + if (userConfig.pen_colors && userConfig.pen_color) { + const idx = userConfig.pen_colors.indexOf(userConfig.pen_color); if (idx !== -1) return idx; } return prev; }); setSize((prev) => { - if (defaultUserConfig.pen_size) { - return defaultUserConfig.pen_size; + if (userConfig.pen_size) { + return userConfig.pen_size; } return prev; }); setSmoothing((prev) => { - if (defaultUserConfig.pen_smoothing) { - return defaultUserConfig.pen_smoothing; + if (userConfig.pen_smoothing) { + return userConfig.pen_smoothing; } return prev; }); @@ -92,7 +91,7 @@ export function DoodleToolContextProvider({ children }: ToolContextProps) { return () => { mounted.current = false; }; - }, [defaultUserConfig]); + }, [userConfig]); return ( <DoodleToolContext.Provider diff --git a/apps/fullstack/components/editor/tools/text/context.tsx b/apps/fullstack/components/editor/tools/text/context.tsx index 32151019126fe77933248a4307a7a755d3428d97..fbe83669d60f030d27730ec1df3a1178ce9c23ed 100644 --- a/apps/fullstack/components/editor/tools/text/context.tsx +++ b/apps/fullstack/components/editor/tools/text/context.tsx @@ -92,8 +92,8 @@ export function useTextToolContext() { export function TextToolContextProvider({ children }: ToolContextProps) { const { workers } = useWorkerContext(); - const { activeSnip, placePageIdx, defaultUserConfig } = useToolsContext(); - const { scale } = useEditorContext(); + const { activeSnip, placePageIdx } = useToolsContext(); + const { scale, userConfig } = useEditorContext(); const pr = useDevicePixelRatio(); // Get currently active text snip (if active) @@ -225,24 +225,24 @@ export function TextToolContextProvider({ children }: ToolContextProps) { //Initial sync from db useEffect(() => { - if (mounted.current || !defaultUserConfig) return; + if (mounted.current || !userConfig) return; mounted.current = true; setTextStyles((prev) => { - if (defaultUserConfig.text_font) { - prev.fontFamily = defaultUserConfig.text_font as AllowedFonts; + if (userConfig.text_font) { + prev.fontFamily = userConfig.text_font as AllowedFonts; } - if (defaultUserConfig.text_fontSize) { - prev.fontSize = defaultUserConfig.text_fontSize; + if (userConfig.text_fontSize) { + prev.fontSize = userConfig.text_fontSize; } - if (defaultUserConfig.text_lineHeight) { - prev.lineHeight = defaultUserConfig.text_lineHeight; + if (userConfig.text_lineHeight) { + prev.lineHeight = userConfig.text_lineHeight; } - if (defaultUserConfig.text_lineWrap) { - prev.lineWrap = defaultUserConfig.text_lineWrap; + if (userConfig.text_lineWrap) { + prev.lineWrap = userConfig.text_lineWrap; } return { ...prev }; @@ -251,7 +251,7 @@ export function TextToolContextProvider({ children }: ToolContextProps) { return () => { mounted.current = false; }; - }, [defaultUserConfig, setTextStyles]); + }, [userConfig, setTextStyles]); return ( <TextToolContext.Provider