metis-desk/modules/companies/src/web/dashboard/create/ui/dashboard-quick-create.tsx
David a0f02ced6e Refactor form dialogs and UI components for improved consistency and usability
- Updated DeleteBrandDialog and DeleteCatalogDefinitionDialog to use FormBody and FormActions for better structure.
- Replaced DialogFooter with FormActions in various dialogs to standardize button layouts.
- Introduced FormSectionTitle in multiple components for consistent section headings.
- Adjusted grid layouts to use responsive design with @min-[560px] for better adaptability.
- Created SoftwareResourceCreateDialog and SoftwareInstallationEditorDialog for better separation of concerns in software installation management.
- Enhanced FormActions to support cancelDisabled prop for better control over button states.
- Refined FormSectionTitle to allow for additional HTML elements like "legend" and "span".
- Added EntityTableColumnsDialog for managing table column visibility in a more user-friendly manner.
2026-10-15 16:14:26 +02:00

83 lines
3.0 KiB
TypeScript

import { FormActions, FormBody, FormDialog } from "@repo/rdx-ui/components/form-dialog";
import { SelectWithAction } from "@repo/rdx-ui/components/select-with-action";
import { Button } from "@repo/shadcn-ui/components/button";
import { useTranslation } from "react-i18next";
import { CompanyEditorDialog } from "../../../companies/shared/ui/company-editor-dialog";
import { CompanyForm } from "../../../companies/shared/ui/company-form";
import { BlockState } from "../../shared";
import { useDashboardQuickCreateController } from "../controllers";
import type { DashboardQuickCreateProps } from "../types";
export function DashboardQuickCreate(props: DashboardQuickCreateProps) {
const { kind, onClose, onNavigate } = props;
const { selectedCompany, setSelectedCompany, addingCompany, setAddingCompany, companies, saved } =
useDashboardQuickCreateController(props);
const { t } = useTranslation("companies");
return (
<>
<FormDialog
cancelLabel={t("cancel")}
formActions
onOpenChange={(open) => {
if (!open) {
onClose();
}
}}
open
title={t(`dashboard.create.${kind}`)}
>
{kind === "company" && <CompanyForm onSaved={saved} showTitle={false} />}
{(kind === "asset" || kind === "resource") && (
<>
<FormBody>
<BlockState empty={false} emptyText="" query={companies}>
<SelectWithAction
action={{ label: t("newCompany"), onClick: () => setAddingCompany(true) }}
id="dashboard-create-company"
label={t("companyLabel")}
onValueChange={setSelectedCompany}
options={
companies.data?.companies
.filter((item) => item.active)
.map((item) => ({ value: item.id, label: item.name })) ?? []
}
placeholder={t("dashboard.chooseCompany")}
value={selectedCompany}
/>
<p className="text-sm text-muted-foreground">{t("dashboard.chooseCompany")}</p>
</BlockState>
</FormBody>
<FormActions>
<Button
disabled={!(selectedCompany && companies.isSuccess)}
onClick={() =>
onNavigate({
area: "company",
id: selectedCompany,
section: kind === "asset" ? "inventory" : "resources",
create: true,
})
}
>
{t("dashboard.continue")}
</Button>
</FormActions>
</>
)}
</FormDialog>
{addingCompany && (
<CompanyEditorDialog
onCreated={(id) => {
setSelectedCompany(id);
setAddingCompany(false);
}}
onOpenChange={setAddingCompany}
open
/>
)}
</>
);
}