import "../../../molecules/button/Button";
import "../../../molecules/forms/input-text/InputText";
import "../../../molecules/forms/select/all";
import "../../../molecules/pagination/all";
import "../../../molecules/table/all";
import { Meta, StoryObj } from "@storybook/react-vite";
import { useState } from "react";
import { mapPagination } from "../../../utils/mapPagination";
import FormSchema from "../../__fixtures__/form-schema.json";
import formSubmissions from "../../__fixtures__/form-submissions.json";
import { SubmissionsTable } from "./SubmissionsTable";
function Wrapper(args: any) {
const [skip, setSkip] = useState(0);
const [limit, setLimit] = useState(10);
const [serverCount] = useState(87);
const onChange = (obj: any) => {
setLimit(obj.pageSize);
setSkip(obj.pageIndex * obj.pageSize);
args.onChange && args.onChange(obj);
};
return (
);
}
/**
* SubmissionsTable component displays form submissions in a table format with filtering,
* pagination, and action buttons for each submission.
*
* ```tsx
* import { SubmissionsTable } from "@tsed/react-formio/organisms/table/submissions/SubmissionsTable";
* ```
*/
export default {
title: "table/submissions/SubmissionsTable",
component: SubmissionsTable,
argTypes: {
form: {
description: "The form schema used to determine table columns",
control: "object"
},
data: {
description: "Array of submission data to display in the table",
control: "object"
},
operations: {
description: "Array of operations/actions available for each submission",
control: "object"
},
onChange: {
description: "Callback when table state changes (sorting, filtering, pagination)",
action: "onChange"
},
i18n: {
description: "Internationalization function"
}
},
parameters: {
docs: {
description: {
component:
"Component that displays form submissions in a table format with filtering, pagination, and action buttons for each submission."
}
}
},
args: {
form: FormSchema as any,
data: formSubmissions as any[],
operations: [
{
title: "Edit",
action: "edit",
alias: "row",
path: "/resources/:resourceId/submissions/:submissionId",
icon: "edit",
permissionsResolver() {
return true;
}
},
{
action: "delete",
path: "/resources/:resourceId/submissions/:submissionId/delete",
icon: "trash",
buttonType: "danger",
permissionsResolver() {
return true;
}
}
]
},
render: Wrapper
} satisfies Meta;
type Story = StoryObj;
/**
* Standard table with default settings
*/
export const Default: Story = {};
/**
* Empty table with no data
*/
export const Empty: Story = {
args: {
data: []
}
};
/**
* Table with custom translations
*/
export const Translated: Story = {
args: {
i18n: {
"Search...": "Rechercher...",
"No results found": "Aucun résultat trouvé",
"Loading...": "Chargement...",
Page: "Page",
of: "sur",
rows: "lignes",
Edit: "Éditer",
Delete: "Supprimer"
}
}
};