Skip to content
Snippets Groups Projects
Commit 97dc2d9e authored by Sebastian Mohr's avatar Sebastian Mohr
Browse files

Moved user config fetch from tools context to editor context.

parent 5566c671
No related branches found
No related tags found
No related merge requests found
Pipeline #565640 failed
"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 />
......
......@@ -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}
......
......@@ -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
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment