import { useI18n } from "../../hooks/useI18n.js"; import type { FormOptions, FormType, PermissionsResolver } from "../../interfaces/index.js"; import type { JSONRecord } from "../../interfaces/JSONRecord.js"; import type { Tab as DefaultTab } from "../../molecules/tabs/Tab.js"; import type { TabList as DefaultTabList } from "../../molecules/tabs/TabList.js"; import type { TabPanel as DefaultTabPanel } from "../../molecules/tabs/TabPanel.js"; import type { Tabs as DefaultTabs } from "../../molecules/tabs/Tabs.js"; import type { TabsBody as DefaultTabsBody } from "../../molecules/tabs/TabsBody.js"; import { getComponent } from "../../registries/components.js"; import { FormAccess, type FormAccessProps } from "../form/access/FormAccess.js"; import { FormEdit, type FormEditProps } from "../form/builder/FormEdit.js"; import { FormExport } from "../form/exports/FormExport.js"; import { FormPreview } from "../form/preview/FormPreview.js"; import { FormSettings } from "../form/settings/FormSettings.js"; import { ActionsTable, type ActionsTableProps } from "../table/actions/ActionsTable.js"; import { SubmissionsTable, type SubmissionsTableProps } from "../table/submissions/SubmissionsTable.js"; export type FormViewsProps = { form: FormEditProps["form"]; submissions: SubmissionsTableProps["data"]; availableActions: ActionsTableProps["availableActions"]; actions: ActionsTableProps["data"]; roles?: FormAccessProps["roles"]; i18n?: FormOptions["i18n"]; onAction: () => void; permissionsResolver?: PermissionsResolver; }; function useSubmissionsOperations(permissionsResolver?: PermissionsResolver) { return [ { title: "Edit", action: "submission:edit", alias: "row", icon: "edit", permissionsResolver }, { action: "submission:delete", icon: "trash", buttonType: "danger", permissionsResolver } ] as SubmissionsTableProps["operations"]; } function useActionsOperations(permissionsResolver?: PermissionsResolver) { return [ { title: "Edit", action: "action:edit", alias: "row", icon: "edit", permissionsResolver }, { action: "action:delete", icon: "trash", buttonType: "danger", permissionsResolver } ] as SubmissionsTableProps["operations"]; } export function FormViews({ form, roles, availableActions, actions, permissionsResolver, submissions, ...props }: FormViewsProps) { const { t } = useI18n(props.i18n); const Tabs = getComponent("Tabs"); const TabList = getComponent("TabList"); const Tab = getComponent("Tab"); const TabsBody = getComponent("TabsBody"); const TabPanel = getComponent("TabPanel"); const submissionsOperations = useSubmissionsOperations(permissionsResolver); const actionsOperations = useActionsOperations(permissionsResolver); return ( {t("Edit")} {t("Data")} {t("Preview")} {t("Actions")} {t("Access")} {t("Export")} {t("Settings")} className={"border-top-0"} form={form as FormType} data={submissions} i18n={props.i18n} operations={submissionsOperations} /> ); }