import * as React from "react"; import { CollectionItemGroups, type ControlChangeMeta } from "@repo/ui"; import type { ToolcraftControlSchema } from "../../../schema/types"; import { getCollectionItemName, getCollectionItemType, } from "../values/controls-panel-values"; import { ControlsPanelCollectionItemField, ControlsPanelCollectionItemFields, } from "./controls-panel-collection-item-fields"; export type ControlsPanelCollectionItemsProps = { control: ToolcraftControlSchema; items: readonly unknown[]; onItemChange: ( index: number, nextValue: unknown, meta?: ControlChangeMeta, fieldName?: string, ) => void; slotPrefix: "collection-actions" | "source-collection"; }; function renderCollectionItemControl({ control, index, item, onItemChange, }: { control: ToolcraftControlSchema; index: number; item: unknown; onItemChange: ControlsPanelCollectionItemsProps["onItemChange"]; }): React.ReactNode { const itemName = getCollectionItemName(control, index); const itemControl = control.itemControl ?? { type: "color" as const }; return ( onItemChange(index, nextValue, meta)} target={control.target} value={item} /> ); } export function ControlsPanelCollectionItems({ control, items, onItemChange, slotPrefix, }: ControlsPanelCollectionItemsProps): React.JSX.Element { const itemControls = control.itemControls; if (itemControls) { return ( {items.map((item, index) => ( onItemChange(index, nextValue, meta, fieldName) } target={control.target} value={item} /> ))} ); } const itemType = getCollectionItemType(control); const isCompactColorGrid = itemType === "color"; return (
{items.map((item, index) => ( {renderCollectionItemControl({ control, index, item, onItemChange, })} ))}
); }