diff --git a/src/components/furni-editor/views/FurniEditorEditView.tsx b/src/components/furni-editor/views/FurniEditorEditView.tsx index 636afd2..97b7542 100644 --- a/src/components/furni-editor/views/FurniEditorEditView.tsx +++ b/src/components/furni-editor/views/FurniEditorEditView.tsx @@ -211,6 +211,14 @@ export const FurniEditorEditView: FC = props => return cn ? (cn === itemCn) : true; }, [ furniDataEntry, item ]); + // True only when the name/description actually differ from the stored furnidata + // entry. Used to gate the Save button: saving an unchanged value makes the + // server writer return false, which the handler misreports as "Classname not + // found in furnidata" — so we never let an unchanged save fire. + const furnidataDirty = useMemo(() => + furniName !== String(furniDataEntry?.name ?? '') || furniDescription !== String(furniDataEntry?.description ?? ''), + [ furniName, furniDescription, furniDataEntry ]); + const handleSave = useCallback(() => { if(!isValid) return; @@ -294,7 +302,7 @@ export const FurniEditorEditView: FC = props => { furnidataEditable ? LIVE : NO FURNIDATA } - { furnidataEditable && (furniName !== String(furniDataEntry?.name ?? '') || furniDescription !== String(furniDataEntry?.description ?? '')) && + { furnidataEditable && furnidataDirty && Unsaved } { furnidataEditable ? ( @@ -310,7 +318,7 @@ export const FurniEditorEditView: FC = props => - +