From a9b9cf6bf50f08723896659634f2e6afc17bcd42 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 29 Apr 2026 00:37:56 +0200 Subject: chore: switch from biome to eslint + prettier; fix ton of lint issues --- .../panels/properties/hooks/use-property-draft.ts | 43 ++++++++++------------ 1 file changed, 20 insertions(+), 23 deletions(-) (limited to 'apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts') diff --git a/apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts b/apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts index 0e7ae6a7..7e8f6e40 100644 --- a/apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts +++ b/apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts @@ -1,4 +1,4 @@ -import { useReducer, useRef } from "react"; +import { useState } from "react"; import { evaluateMathExpression } from "@/utils/math"; function looksLikeExpression({ input }: { input: string }): boolean { @@ -14,59 +14,56 @@ export function usePropertyDraft({ parse, onPreview, onCommit, + onStartEditing, supportsExpressions = true, }: { displayValue: string; parse: (input: string) => T | null; onPreview: (value: T) => void; onCommit: () => void; + onStartEditing?: () => void; supportsExpressions?: boolean; }) { - const [, forceRender] = useReducer( - (renderVersion: number) => renderVersion + 1, - 0, - ); - const isEditing = useRef(false); - const draft = useRef(""); + const [isEditing, setIsEditing] = useState(false); + const [draft, setDraft] = useState(""); return { - displayValue: isEditing.current ? draft.current : sourceDisplay, + displayValue: isEditing ? draft : sourceDisplay, scrubTo: (value: number) => { const parsed = parse(String(value)); if (parsed !== null) onPreview(parsed); }, commitScrub: onCommit, onFocus: () => { - isEditing.current = true; - draft.current = sourceDisplay; - forceRender(); + setIsEditing(true); + setDraft(sourceDisplay); + onStartEditing?.(); }, onChange: ( event: React.ChangeEvent, ) => { - draft.current = event.target.value; - forceRender(); + const nextDraft = event.target.value; + setDraft(nextDraft); - const parsed = parse(event.target.value); + const parsed = parse(nextDraft); if (parsed !== null) { onPreview(parsed); } }, - onBlur: () => { - if ( - supportsExpressions && - looksLikeExpression({ input: draft.current }) - ) { - const evaluated = evaluateMathExpression({ input: draft.current }); + onBlur: ( + event: React.FocusEvent, + ) => { + const nextDraft = event.target.value; + if (supportsExpressions && looksLikeExpression({ input: nextDraft })) { + const evaluated = evaluateMathExpression({ input: nextDraft }); if (evaluated !== null) { const parsed = parse(String(evaluated)); if (parsed !== null) onPreview(parsed); } } onCommit(); - isEditing.current = false; - draft.current = ""; - forceRender(); + setIsEditing(false); + setDraft(""); }, }; } -- cgit v1.3.1