import "../../molecules/button/Button"; import "../../molecules/forms/input-text/InputText"; import "../../molecules/forms/select/all"; import "../../molecules/forms/form-control/FormControl"; import "../../molecules/pagination/all"; import "../../molecules/table/all"; import "../../molecules/tabs/all"; import "../../molecules/card/Card"; import "../form/builder/all"; import "../form/Form"; import { Meta, StoryObj } from "@storybook/react-vite"; import ActionsTableStory from "../table/actions/ActionsTable.stories.js"; import SubmissionsTableStory from "../table/submissions/SubmissionsTable.stories.js"; import { FormViews } from "./FormViews.js"; /** * FormViews component displays a tabbed interface for managing forms with tabs for editing, * viewing submissions, previewing, managing actions, controlling access, exporting, and configuring settings. * * ```tsx * import { FormViews } from "@tsed/react-formio/organisms/views/FormViews"; * ``` * * ## Implementation * * ```tsx * import type { FormType } from "../../interfaces/index.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?: (key: string) => string; * onAction: () => void; * operations: SubmissionsTableProps["operations"]; * }; * * export function FormViews({ form, roles, availableActions, actions, submissions, operations, i18n = (f) => f }: FormViewsProps) { * const Tabs = getComponent("Tabs"); * const TabList = getComponent("TabList"); * const Tab = getComponent("Tab"); * const TabsBody = getComponent("TabsBody"); * const TabPanel = getComponent("TabPanel"); * * return ( * * * * {i18n("Edit")} * * * {i18n("Data")} * * * {i18n("Preview")} * * * {i18n("Actions")} * * * {i18n("Access")} * * * {i18n("Export")} * * * {i18n("Settings")} * * * * * * * * * * * * * * * * * * * * * * * * * * * ); * } * ``` */ export default { title: "views/FormViews", component: FormViews, argTypes: { form: { description: "The form object to manage", control: "object" }, submissions: { description: "Submission data to display in the Data tab", control: "object" }, // operations: { // description: "Operations available for submissions", // control: "object" // }, roles: { description: "Roles for access control", control: "object" }, i18n: { description: "Internationalization function" }, onAction: { action: "onAction", description: "Callback when an action is triggered" } }, parameters: { docs: { description: { component: "Component that displays a tabbed interface for managing forms with tabs for editing, viewing submissions, previewing, managing actions, controlling access, exporting, and configuring settings." } } } } satisfies Meta; type Story = StoryObj; /** * Basic form view with a simple form */ export const Usage: Story = { args: { form: SubmissionsTableStory.args.form as any, submissions: SubmissionsTableStory.args.data as any, // operations: SubmissionsTableStory.args.operations, actions: ActionsTableStory.args.data as any, roles: [ { _id: "1", title: "Administrator" }, { _id: "2", title: "Authenticated" }, { _id: "3", title: "Anonymous" } ], i18n: {}, onAction: () => console.log("Action triggered") } }; /** * Form view with translated labels */ export const Translated: Story = { args: { form: SubmissionsTableStory.args.form as any, submissions: SubmissionsTableStory.args.data as any, // operations: SubmissionsTableStory.args.operations, actions: ActionsTableStory.args.data as any, roles: [ { _id: "1", title: "Administrator" }, { _id: "2", title: "Authenticated" }, { _id: "3", title: "Anonymous" } ], i18n: { Edit: "Éditer", Data: "Données", Preview: "Aperçu", Actions: "Actions", Access: "Accès", Export: "Exporter", Settings: "Paramètres", "Form with First Name": "Formulaire avec prénom", "First name": "Prénom", "Last name": "Nom de famille", Submit: "Soumettre" }, onAction: () => console.log("Action triggered") } };