Skip to main content

AppTable actions

Every table has a set of actions called stickyActions as they are stick on the right hand of the screen near to the table.

Filter​

The default one is the filter action, it's a drawer that handles the table :

  • Hide / show columns
  • Fixe a columns
  • Organize display order of columns

This drawer is automatically generated when you use AppTable component by default. You can remove it by setting filter property to false.

Export​

You can also export all data of a table, it's set to false by default. To activate this button you need to pass an object to the stickyActions property in AppTable component.

ArticlesList.tsx - Sticky actions
const stickyActions = {
export: {
active: true,
function: () => exportArticles(),
},
};

You need to pass down an export object with active property to true and a function that will be triggered on click.

ArticlesList.tsx - Handle export
const {
mutate,
isLoading: exportLoading,
data: exportData,
} = useExportArticlesMutation<Error>(graphqlRequestClient, {
onSuccess: (
data: ExportArticlesMutation,
_variables: ExportArticlesMutationVariables,
_context: unknown
) => {
showSuccess(t("messages:success-exported"));
},
onError: (error) => {
showError(t("messages:error-exporting-data"));
},
});

const exportArticles = () => {
mutate({
format: ExportFormat.Csv,
compression: null,
separator: ",",
orderBy: sort,
filters: searchCriteria,
});
};

We create the ExportAticles mutation and call the mutate function in order to make the request.

For a better user experience we will show messages on loading and display a loading spinner instead of the table.

ArticlesList.tsx - Handle export
useEffect(() => {
if (exportLoading) {
showInfo(t("messages:info-export-wip"));
}
}, [exportLoading]);

return (
<>
{articles && !exportLoading ? (
<AppTable
type="articles"
columns={columns}
data={articles!.results}
pagination={pagination}
isLoading={isLoading}
setPagination={onChangePagination}
stickyActions={stickyActions}
onChange={handleTableChange}
/>
) : (
<ContentSpin />
)}
</>
);

Add other actions​

To add other actions you need to follow the same step as before and change the AppTable component. For this example we will add a delete button.

First change the interface props.

AppTable.tsx - Props
export interface IAppTableProps {
stickyActions?: {
export?: any;
delete?: any;
};
}

Change the default value for the interface props

AppTable.tsx - Default value
AppTable.defaultProps = {
scroll: { x: '100%' }
filter: true,
stickyActions: {
export: {
active: false,
},
delete: {
active: false,
},
},
};

Then in WrapperStickyActions use the following snippet. It will handle if the action should be displayed or not regarding the parent props.

AppTable.tsx - WrapperStickyActions
<WrapperStickyActions>
<Space direction="vertical">
{filter && (
<Button
type="primary"
icon={<SettingOutlined />}
onClick={() => openFilterDrawer()}
/>
)}
{stickyActions?.export.active && (
<Button
icon={<FileExcelOutlined />}
onClick={stickyActions?.export.function}
/>
)}
{/* ADD THIS */}
{stickyActions?.delete.active && (
<Button
icon={<DeleteOutlined />}
onClick={stickyActions?.delete.function}
type="primary"
danger
/>
)}
{/* ADD THIS */}
</Space>
</WrapperStickyActions>

Now you can customize the function in parent component that called the AppTable to do what you need.