From 1aca734343aebe3d9a41e150d1a7b9861f886011 Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Sat, 6 Jun 2026 23:33:06 +0330 Subject: [PATCH] feat(admin): scene-inputs editor in /admin/projects scene list (reuse SceneInputsEditor) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The per-scene inputs (content elements) editor existed only on /admin/templates (SceneColorEditor). /admin/projects → «صحنه‌ها» used the older ProjectScenes which had no inputs panel, so admins couldn't see/edit a scene's inputs there. Export SceneInputsEditor and add an «ورودی‌ها» expander per scene row in ProjectScenes (GET/POST/PUT/DELETE /v1/scene-elements, 15 element types). Verified c1 → 6 inputs. Co-Authored-By: Claude Opus 4.8 --- src/components/admin/ProjectScenes.tsx | 39 ++++++++++++++++------- src/components/admin/SceneColorEditor.tsx | 2 +- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/components/admin/ProjectScenes.tsx b/src/components/admin/ProjectScenes.tsx index 9f253eb..5861130 100644 --- a/src/components/admin/ProjectScenes.tsx +++ b/src/components/admin/ProjectScenes.tsx @@ -4,6 +4,7 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import { FileUploadField } from "@/components/admin/FileUploadField"; import { ProjectScanImport } from "@/components/admin/ProjectScanImport"; +import { SceneInputsEditor } from "@/components/admin/SceneColorEditor"; // ── styles ─────────────────────────────────────────────────────────────────── const inp = "rounded-lg border border-[#262b40] bg-[#0c0e1a] px-2.5 py-1.5 text-sm text-gray-100 outline-none focus:border-indigo-500"; @@ -95,6 +96,7 @@ function ScenesTab({ projectId }: { projectId: string }) { const [saving, setSaving] = useState(false); const [err, setErr] = useState(null); const [scanOpen, setScanOpen] = useState(false); + const [inputsFor, setInputsFor] = useState(null); const base = "/api/admin/resource/scenes"; const load = useCallback(async () => { @@ -163,18 +165,33 @@ function ScenesTab({ projectId }: { projectId: string }) { ) : (
    {rows.map((s) => ( -
  • -
    - #{s.sort} - {s.title} - {s.key} - {SCENE_TYPES.find((t) => t.v === s.scene_type)?.l ?? s.scene_type} - {!s.is_active && غیرفعال} -
    -
    - - +
  • +
    +
    + #{s.sort} + {s.title} + {s.key} + {SCENE_TYPES.find((t) => t.v === s.scene_type)?.l ?? s.scene_type} + {!s.is_active && غیرفعال} +
    +
    + + + +
    + {inputsFor === s.id && ( +
    + +
    + )}
  • ))}
diff --git a/src/components/admin/SceneColorEditor.tsx b/src/components/admin/SceneColorEditor.tsx index 821b0a1..bfc773d 100644 --- a/src/components/admin/SceneColorEditor.tsx +++ b/src/components/admin/SceneColorEditor.tsx @@ -737,7 +737,7 @@ const ELEMENT_TYPES = [ "DropDown", "Fill", "Color", "Number", "Date", "Toggle", "Slider", "Counter", "Hidden", ]; -function SceneInputsEditor({ +export function SceneInputsEditor({ sceneId, setError, }: {