import type { PaneTemplateDef, } from "../../../types/plugin"; import { buildGeneratedTemplateField, normalizeWizardFields, } from "../helpers"; import type { CommandBarFieldValue, CommandBarWorkflowField, CommandBarWorkflowRoute, } from "../workflow/types"; import { buildCommandBarWorkflowRoute } from "../workflow/route-builder"; import { canPromptForPaneTemplateArg, getPaneTemplateDisplayLabel, } from "./items"; function paneTemplateHasConfigFields(template: PaneTemplateDef): boolean { if (template.wizard?.some((step) => step.type !== "info")) { return true; } return !!buildGeneratedTemplateField(template, null).field; } export function shouldOpenPaneTemplateConfig(template: PaneTemplateDef, arg?: string): boolean { if (!paneTemplateHasConfigFields(template)) { return false; } if (template.wizard && template.wizard.length > 0) { if (!arg?.trim()) { return true; } const argPlaceholder = template.shortcut?.argPlaceholder; return template.wizard.some((step) => step.type === "textarea" || step.key !== argPlaceholder); } if (template.shortcut?.argOptional) { return false; } if (canPromptForPaneTemplateArg(template)) { return !arg?.trim(); } return false; } export function buildPaneTemplateWorkflowRoute({ activeTicker, arg, template, }: { activeTicker: string | null; arg?: string; template: PaneTemplateDef; }): CommandBarWorkflowRoute { const displayLabel = getPaneTemplateDisplayLabel(template); const normalized: ReturnType = template.wizard && template.wizard.length > 0 ? normalizeWizardFields(template.wizard) : { fields: [] as CommandBarWorkflowField[], description: [] as string[], initialValues: {} as Record }; const generated = buildGeneratedTemplateField(template, activeTicker); const fields = [...normalized.fields]; const values: Record = { ...normalized.initialValues }; if (generated.field && !fields.some((field) => field.id === generated.field!.id)) { fields.push(generated.field); if (generated.initialValue !== undefined) { values[generated.field.id] = generated.initialValue; } } if (arg && template.shortcut?.argPlaceholder) { values[template.shortcut.argPlaceholder] = arg; } return buildCommandBarWorkflowRoute({ workflowId: `pane-template:${template.id}`, title: displayLabel, subtitle: template.description, description: normalized.description, fields, values, submitLabel: "Create Pane", pendingLabel: normalized.pendingLabel ?? `Creating ${displayLabel.toLowerCase()}...`, successLabel: normalized.successLabel, payload: { kind: "pane-template", actionId: template.id, }, payloadMeta: { argPlaceholder: template.shortcut?.argPlaceholder, }, }); }