feat: add auto furniture interaction detection
CI / check (push) Successful in 25s
CI / release (push) Skipped
CI / deploy (push) Successful in 59s

- New auto-interaction.ts: detects canSit/canLay/canStand from classname/name keywords
- Maps keywords to interaction types (bench, chair, bed, table, etc.)
- Returns clickLimit and interactionModesCount for proper click/interaction limits
- Nitro editor: added auto-detect button with preview of detected settings
- furni-import.ts: auto-sets interaction_modes_count during import
- upload-import.ts: auto-detects for direct insert and SQL migrations
- clone-import.ts: auto-detects when cloning from other hotels
This commit is contained in:
openhands committed 2026-08-18 22:33:40 +02:00
1 parent 0b4fc4559e
commit dee843106f
8 files changed
+596 -25

No files matched your search

+10 -1
View File
@@ -59,6 +59,7 @@ export const IMPORTED_PAGE_CAPTION = "Imported Furniture";
export { CATEGORY_PAGE, CLASSNAME_RULES } from "@/lib/furni/auto-catalog";
import { CATEGORY_PAGE } from "@/lib/furni/auto-catalog";
import { autoDetectInteraction } from "@/lib/furni/auto-interaction";
// ── Helpers ──────────────────────────────────────────────────────────
@@ -117,7 +118,9 @@ export function buildItemsBaseEnrichmentUpdate(params: {
canstandon: boolean;
allowStack: string;
interactionType: string;
interactionModesCount?: number;
}): SQL {
const modesCount = params.interactionModesCount ?? 0;
return sql`
UPDATE items_base
SET width = ${params.dims.x}, length = ${params.dims.y}, stack_height = ${params.dims.z},
@@ -125,7 +128,8 @@ export function buildItemsBaseEnrichmentUpdate(params: {
allow_lay = ${params.canlayon ? "1" : "0"},
allow_walk = ${params.canstandon ? "1" : "0"},
allow_stack = ${params.allowStack},
interaction_type = ${params.interactionType}
interaction_type = ${params.interactionType},
interaction_modes_count = ${modesCount}
WHERE id = ${params.id}
`;
}
@@ -864,6 +868,10 @@ export async function importSingleFurni(params: {
// allow_stack: if it has height and you can put things on it
const allowStack = dims.z > 0 ? "1" : "0";
// Auto-detect interaction modes count from classname/name
const autoInteraction = autoDetectInteraction(classname, bestName);
const interactionModesCount = autoInteraction.interactionModesCount;
// Update items_base with ALL enriched data
try {
const update = buildItemsBaseEnrichmentUpdate({
@@ -874,6 +882,7 @@ export async function importSingleFurni(params: {
canstandon,
allowStack,
interactionType,
interactionModesCount,
});
await db.execute(update);
} catch (err) {