diff --git a/src/components/furni-editor/FurniEditorView.tsx b/src/components/furni-editor/FurniEditorView.tsx index c36ed09..75db342 100644 --- a/src/components/furni-editor/FurniEditorView.tsx +++ b/src/components/furni-editor/FurniEditorView.tsx @@ -16,7 +16,7 @@ export const FurniEditorView: FC<{}> = () => const { items, total, page, loading, error, clearError, - selectedItem, setSelectedItem, furniDataEntry, + selectedItem, setSelectedItem, furniDataEntry, furniDataDiagnostic, interactions, searchItems, loadDetail, loadBySpriteId, updateItem, deleteItem, loadInteractions, updateFurnidata, revertFurnidata, importText, importResult @@ -151,6 +151,7 @@ export const FurniEditorView: FC<{}> = () => | null; + furniDataDiagnostic: Record | null; interactions: string[]; loading: boolean; onUpdate: (id: number, fields: Record) => void; @@ -121,7 +122,7 @@ const CopyValue: FC<{ value: string | number }> = ({ value }) => export const FurniEditorEditView: FC = props => { - const { item, furniDataEntry, interactions, loading, onUpdate, onDelete, onBack, onUpdateFurnidata, onRevertFurnidata, onImportText, importResult } = props; + const { item, furniDataEntry, furniDataDiagnostic, interactions, loading, onUpdate, onDelete, onBack, onUpdateFurnidata, onRevertFurnidata, onImportText, importResult } = props; const saveRef = useRef<() => void>(null); const [ form, setForm ] = useState({ @@ -252,6 +253,14 @@ export const FurniEditorEditView: FC = props => furniName !== String(furniDataEntry?.name ?? '') || furniDescription !== String(furniDataEntry?.description ?? ''), [ furniName, furniDescription, furniDataEntry ]); + const furnidataMissReason = useMemo(() => + { + const reason = String(furniDataDiagnostic?.reason ?? ''); + return reason || 'not_found'; + }, [ furniDataDiagnostic ]); + + const furnidataSourcePath = String(furniDataDiagnostic?.sourcePath ?? ''); + // Apply an "Import from Habbo" result into the editable fields (review then Save). useEffect(() => { @@ -391,7 +400,7 @@ export const FurniEditorEditView: FC = props => ) : (
- This furni has no matching furnidata entry (e.g. a pet or custom item), so its display name can't be edited here. Clients fall back to the DB Public Name below. + This furni has no matching furnidata entry ({ furnidataMissReason.replace(/_/g, ' ') }), so its display name can't be edited here. Clients fall back to the DB Public Name below.
) } @@ -424,6 +433,20 @@ export const FurniEditorEditView: FC = props => } +
+
+
+ + +
+
+ + +
+
+
{ JSON.stringify(furniDataDiagnostic ?? {}, null, 2) }
+
+
diff --git a/src/hooks/furni-editor/useFurniEditor.ts b/src/hooks/furni-editor/useFurniEditor.ts index 3cd8ec8..783de34 100644 --- a/src/hooks/furni-editor/useFurniEditor.ts +++ b/src/hooks/furni-editor/useFurniEditor.ts @@ -60,6 +60,7 @@ export const useFurniEditor = () => const [ catalogItems, setCatalogItems ] = useState([]); const [ interactions, setInteractions ] = useState([]); const [ furniDataEntry, setFurniDataEntry ] = useState | null>(null); + const [ furniDataDiagnostic, setFurniDataDiagnostic ] = useState | null>(null); const pendingActionRef = useRef<{ action: string; itemId: number } | null>(null); const [ importResult, setImportResult ] = useState<{ found: boolean; name: string; description: string; classname: string; nonce: number } | null>(null); const importNonceRef = useRef(0); @@ -152,6 +153,20 @@ export const useFurniEditor = () => {} setFurniDataEntry(furniData); + + let diagnostic: Record | null = null; + + try + { + if(parser.furniDataDiagnosticJson && parser.furniDataDiagnosticJson !== '{}' && parser.furniDataDiagnosticJson !== '') + { + diagnostic = JSON.parse(parser.furniDataDiagnosticJson); + } + } + catch(e) + {} + + setFurniDataDiagnostic(diagnostic); }); // Handle interaction types list @@ -203,6 +218,7 @@ export const useFurniEditor = () => setSelectedItem(null); setCatalogItems([]); setFurniDataEntry(null); + setFurniDataDiagnostic(null); if(simpleAlert) { @@ -295,7 +311,7 @@ export const useFurniEditor = () => return { items, total, page, loading, error, clearError, - selectedItem, setSelectedItem, catalogItems, furniDataEntry, + selectedItem, setSelectedItem, catalogItems, furniDataEntry, furniDataDiagnostic, interactions, searchItems, loadDetail, loadBySpriteId, updateItem, deleteItem, loadInteractions, updateFurnidata, revertFurnidata, importText, importResult