2026-10-08 22:27:19 +00:00
|
|
|
import { AssetForm } from "@metis/assets/client";
|
2026-10-09 16:00:41 +00:00
|
|
|
import { FormDialog } from "@repo/rdx-ui/components/form-dialog";
|
2026-10-04 21:06:07 +00:00
|
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
|
|
2026-10-08 17:25:02 +00:00
|
|
|
import { AccessForm } from "../../access";
|
|
|
|
|
import { MailFeedback } from "../../mail-configurations/shared/ui/mail-feedback";
|
|
|
|
|
import { PersonForm } from "../../people";
|
2026-10-08 22:27:19 +00:00
|
|
|
import { useConfigurationQuickEditorController } from "../controllers";
|
|
|
|
|
import type { ConfigurationQuickEditorProps } from "../types";
|
2026-10-04 21:06:07 +00:00
|
|
|
|
|
|
|
|
const titles = {
|
|
|
|
|
person: "newPerson",
|
|
|
|
|
account: "newAccount",
|
|
|
|
|
asset: "newAsset",
|
|
|
|
|
authorization: "authorize",
|
|
|
|
|
} as const;
|
2026-10-10 10:01:58 +00:00
|
|
|
|
2026-10-08 22:27:19 +00:00
|
|
|
export function ConfigurationQuickEditor(props: ConfigurationQuickEditorProps) {
|
|
|
|
|
const { kind, title, company, csrfToken, values, data } = props;
|
|
|
|
|
const { created, close, catalog } = useConfigurationQuickEditorController(props);
|
2026-10-04 21:06:07 +00:00
|
|
|
const { t } = useTranslation("companies");
|
2026-10-10 10:01:58 +00:00
|
|
|
|
2026-10-04 21:06:07 +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]}`)}
|
2026-10-04 21:06:07 +00:00
|
|
|
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>
|
|
|
|
|
);
|
|
|
|
|
}
|