251210:1709 Frontend: reeactor organization and run build
Some checks failed
Spec Validation / validate-markdown (push) Has been cancelled
Spec Validation / validate-diagrams (push) Has been cancelled
Spec Validation / check-todos (push) Has been cancelled

This commit is contained in:
admin
2025-12-10 17:09:11 +07:00
parent aa96cd90e3
commit c8a0f281ef
140 changed files with 3780 additions and 1473 deletions

View File

@@ -25,11 +25,11 @@ export default function WorkflowEditPage() {
const [loading, setLoading] = useState(!!id);
const [saving, setSaving] = useState(false);
const [workflowData, setWorkflowData] = useState<Partial<Workflow>>({
workflow_name: '',
workflowName: '',
description: '',
workflow_type: 'CORRESPONDENCE',
dsl_definition: 'name: New Workflow\nversion: 1.0\nsteps: []',
is_active: true,
workflowType: 'CORRESPONDENCE',
dslDefinition: 'name: New Workflow\nversion: 1.0\nsteps: []',
isActive: true,
});
useEffect(() => {
@@ -55,7 +55,7 @@ export default function WorkflowEditPage() {
}, [id, router]);
const handleSave = async () => {
if (!workflowData.workflow_name) {
if (!workflowData.workflowName) {
toast.error("Workflow name is required");
return;
}
@@ -63,10 +63,10 @@ export default function WorkflowEditPage() {
setSaving(true);
try {
const dto: CreateWorkflowDto = {
workflow_name: workflowData.workflow_name || '',
workflowName: workflowData.workflowName || '',
description: workflowData.description || '',
workflow_type: workflowData.workflow_type || 'CORRESPONDENCE',
dsl_definition: workflowData.dsl_definition || '',
workflowType: workflowData.workflowType || 'CORRESPONDENCE',
dslDefinition: workflowData.dslDefinition || '',
};
if (id) {
@@ -127,11 +127,11 @@ export default function WorkflowEditPage() {
<Label htmlFor="name">Workflow Name *</Label>
<Input
id="name"
value={workflowData.workflow_name}
value={workflowData.workflowName}
onChange={(e) =>
setWorkflowData({
...workflowData,
workflow_name: e.target.value,
workflowName: e.target.value,
})
}
placeholder="e.g. Standard RFA Workflow"
@@ -156,9 +156,9 @@ export default function WorkflowEditPage() {
<div>
<Label htmlFor="type">Workflow Type</Label>
<Select
value={workflowData.workflow_type}
onValueChange={(value: Workflow['workflow_type']) =>
setWorkflowData({ ...workflowData, workflow_type: value })
value={workflowData.workflowType}
onValueChange={(value: Workflow['workflowType']) =>
setWorkflowData({ ...workflowData, workflowType: value })
}
>
<SelectTrigger>
@@ -184,17 +184,17 @@ export default function WorkflowEditPage() {
<TabsContent value="dsl" className="mt-4">
<DSLEditor
initialValue={workflowData.dsl_definition}
initialValue={workflowData.dslDefinition}
onChange={(value) =>
setWorkflowData({ ...workflowData, dsl_definition: value })
setWorkflowData({ ...workflowData, dslDefinition: value })
}
/>
</TabsContent>
<TabsContent value="visual" className="mt-4 h-[600px]">
<VisualWorkflowBuilder
dslString={workflowData.dsl_definition}
onDslChange={(newDsl) => setWorkflowData({ ...workflowData, dsl_definition: newDsl })}
dslString={workflowData.dslDefinition}
onDslChange={(newDsl) => setWorkflowData({ ...workflowData, dslDefinition: newDsl })}
onSave={() => toast.info("Visual state saving not implemented in this demo")}
/>
</TabsContent>

View File

@@ -25,10 +25,10 @@ export default function NewWorkflowPage() {
const router = useRouter();
const [saving, setSaving] = useState(false);
const [workflowData, setWorkflowData] = useState({
workflow_name: "",
workflowName: "",
description: "",
workflow_type: "CORRESPONDENCE" as WorkflowType,
dsl_definition: "name: New Workflow\nsteps: []",
workflowType: "CORRESPONDENCE" as WorkflowType,
dslDefinition: 'name: New Workflow\nversion: 1.0\nsteps: []',
});
const handleSave = async () => {
@@ -63,11 +63,11 @@ export default function NewWorkflowPage() {
<Label htmlFor="workflow_name">Workflow Name *</Label>
<Input
id="workflow_name"
value={workflowData.workflow_name}
value={workflowData.workflowName}
onChange={(e) =>
setWorkflowData({
...workflowData,
workflow_name: e.target.value,
workflowName: e.target.value,
})
}
placeholder="e.g., Special RFA Approval"
@@ -92,9 +92,9 @@ export default function NewWorkflowPage() {
<div>
<Label htmlFor="workflow_type">Workflow Type</Label>
<Select
value={workflowData.workflow_type}
value={workflowData.workflowType}
onValueChange={(value) =>
setWorkflowData({ ...workflowData, workflow_type: value as WorkflowType })
setWorkflowData({ ...workflowData, workflowType: value as WorkflowType })
}
>
<SelectTrigger id="workflow_type">
@@ -118,9 +118,9 @@ export default function NewWorkflowPage() {
<TabsContent value="dsl" className="mt-4">
<DSLEditor
initialValue={workflowData.dsl_definition}
initialValue={workflowData.dslDefinition}
onChange={(value) =>
setWorkflowData({ ...workflowData, dsl_definition: value })
setWorkflowData({ ...workflowData, dslDefinition: value })
}
/>
</TabsContent>

View File

@@ -53,15 +53,15 @@ export default function WorkflowsPage() {
) : (
<div className="grid gap-4">
{workflows.map((workflow) => (
<Card key={workflow.workflow_id} className="p-6">
<Card key={workflow.workflowId} className="p-6">
<div className="flex justify-between items-start">
<div className="flex-1">
<div className="flex items-center gap-3 mb-2">
<h3 className="text-lg font-semibold">
{workflow.workflow_name}
{workflow.workflowName}
</h3>
<Badge variant={workflow.is_active ? "default" : "secondary"} className={workflow.is_active ? "bg-green-600 hover:bg-green-700" : ""}>
{workflow.is_active ? "Active" : "Inactive"}
<Badge variant={workflow.isActive ? "default" : "secondary"} className={workflow.isActive ? "bg-green-600 hover:bg-green-700" : ""}>
{workflow.isActive ? "Active" : "Inactive"}
</Badge>
<Badge variant="outline">v{workflow.version}</Badge>
</div>
@@ -69,17 +69,17 @@ export default function WorkflowsPage() {
{workflow.description}
</p>
<div className="flex gap-6 text-sm text-muted-foreground">
<span>Type: {workflow.workflow_type}</span>
<span>Steps: {workflow.step_count}</span>
<span>Type: {workflow.workflowType}</span>
<span>Steps: {workflow.stepCount}</span>
<span>
Updated:{" "}
{new Date(workflow.updated_at).toLocaleDateString()}
{new Date(workflow.updatedAt).toLocaleDateString()}
</span>
</div>
</div>
<div className="flex gap-2">
<Link href={`/admin/workflows/${workflow.workflow_id}/edit`}>
<Link href={`/admin/workflows/${workflow.workflowId}/edit`}>
<Button variant="outline" size="sm">
<Edit className="mr-2 h-4 w-4" />
Edit