metis-desk/modules/companies/src/web/shared/ui/configuration-quick-editor.tsx

91 lines
2.7 KiB
TypeScript
Raw Normal View History

import { AssetForm } from "@metis/assets/client";
import { FormDialog } from "@repo/rdx-ui/components/form-dialog";
import { useTranslation } from "react-i18next";
import { AccessForm } from "../../access";
import { MailFeedback } from "../../mail-configurations/shared/ui/mail-feedback";
import { PersonForm } from "../../people";
import { useConfigurationQuickEditorController } from "../controllers";
import type { ConfigurationQuickEditorProps } from "../types";
const titles = {
person: "newPerson",
account: "newAccount",
asset: "newAsset",
authorization: "authorize",
} as const;
2026-10-10 10:01:58 +00:00
export function ConfigurationQuickEditor(props: ConfigurationQuickEditorProps) {
const { kind, title, company, csrfToken, values, data } = props;
const { created, close, catalog } = useConfigurationQuickEditorController(props);
const { t } = useTranslation("companies");
2026-10-10 10:01:58 +00:00
return (
<FormDialog
cancelLabel={t("cancel")}
formActions
onOpenChange={(open) => {
if (!open) {
close();
}
}}
open
2026-10-05 15:01:32 +00:00
title={title ?? t(`mail.${titles[kind]}`)}
wide
>
{kind === "person" && (
<PersonForm
companyId={company.id}
csrfToken={csrfToken}
onSaved={(id) => created("personId", id)}
requireActive
/>
)}
{(kind === "account" || kind === "authorization") && data && (
<AccessForm
allowQuickCreate={false}
csrfToken={csrfToken}
data={data}
initialValues={
kind === "authorization"
? { personId: values.personId, accountId: values.accountId }
: {}
}
kind={kind === "account" ? "account" : "account_person"}
lockedFields={kind === "authorization" ? ["personId", "accountId"] : []}
onSaved={(id) => {
if (kind === "account") {
created("accountId", id);
} else {
close();
}
}}
people={company.people}
scope={company.id}
/>
)}
{kind === "asset" &&
(catalog.data ? (
<AssetForm
allowQuickCreate={false}
companyId={company.id}
csrfToken={csrfToken}
items={catalog.data.items}
lookups={{
sites: company.sites,
people: company.people,
onCreatePerson: () => undefined,
onCreateSite: () => undefined,
}}
onSaved={(id) => created("assetId", id)}
/>
) : (
<>
<p role="status">{t("loading")}</p>
<MailFeedback error={catalog.error} />
</>
))}
</FormDialog>
);
}