Files
ai-agent/web/components/customer-form-dialog.tsx
T

91 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-04-09 10:01:23 +08:00
"use client"
import { useState } from "react"
import {
CustomerForm,
type CustomerFormSavePayload,
} from "@/components/customer-form"
import { ProjectDialog } from "@/components/project-dialog"
import { Button } from "@/components/ui/button"
2026-05-25 12:06:15 +08:00
import { useI18n } from "@/i18n/provider"
2026-04-09 10:01:23 +08:00
export type CustomerFormDialogProps = {
open: boolean
saving: boolean
itemId: number | null
onOpenChange: (open: boolean) => void
onSave: (payload: CustomerFormSavePayload) => Promise<void>
}
2026-05-25 12:06:15 +08:00
/** Customer create/edit dialog shared by customer management and conversation workflows. */
2026-04-09 10:01:23 +08:00
export function CustomerFormDialog({
open,
saving,
itemId,
onOpenChange,
onSave,
}: CustomerFormDialogProps) {
if (!open) return null
return (
<CustomerFormDialogBody
key={itemId ? `edit-${itemId}` : "create"}
saving={saving}
itemId={itemId}
onOpenChange={onOpenChange}
onSave={onSave}
/>
)
}
type CustomerFormDialogBodyProps = Omit<CustomerFormDialogProps, "open">
function CustomerFormDialogBody({
saving,
itemId,
onOpenChange,
onSave,
}: CustomerFormDialogBodyProps) {
2026-05-25 12:06:15 +08:00
const t = useI18n()
2026-04-09 10:01:23 +08:00
const formId = "customer-form-dialog"
const [loadingDetail, setLoadingDetail] = useState(() => Boolean(itemId))
return (
<ProjectDialog
open
onOpenChange={(next) => onOpenChange(next)}
2026-05-25 12:06:15 +08:00
title={itemId ? t("customerForm.editTitle") : t("customerForm.createTitle")}
2026-04-09 10:01:23 +08:00
allowFullscreen
size="xl"
footer={
<>
<Button
type="button"
variant="outline"
onClick={() => onOpenChange(false)}
disabled={saving}
>
2026-05-25 12:06:15 +08:00
{t("customerForm.cancel")}
2026-04-09 10:01:23 +08:00
</Button>
<Button
type="submit"
form={formId}
disabled={saving || loadingDetail}
>
2026-05-25 12:06:15 +08:00
{saving ? t("customerForm.saving") : itemId ? t("customerForm.save") : t("customerForm.create")}
2026-04-09 10:01:23 +08:00
</Button>
</>
}
>
<CustomerForm
formId={formId}
itemId={itemId}
onSave={onSave}
fieldIdPrefix="customer"
className="space-y-4"
onLoadingDetailChange={setLoadingDetail}
/>
</ProjectDialog>
)
}