|
@@ -1,9 +1,11 @@
|
|
|
|
|
+import { useAllBulkActions } from '@/vdb/components/data-table/use-all-bulk-actions.js';
|
|
|
import { DisplayComponent } from '@/vdb/framework/component-registry/display-component.js';
|
|
import { DisplayComponent } from '@/vdb/framework/component-registry/display-component.js';
|
|
|
import {
|
|
import {
|
|
|
FieldInfo,
|
|
FieldInfo,
|
|
|
getOperationVariablesFields,
|
|
getOperationVariablesFields,
|
|
|
getTypeFieldInfo,
|
|
getTypeFieldInfo,
|
|
|
} from '@/vdb/framework/document-introspection/get-document-structure.js';
|
|
} from '@/vdb/framework/document-introspection/get-document-structure.js';
|
|
|
|
|
+import { BulkAction } from '@/vdb/framework/extension-api/types/index.js';
|
|
|
import { api } from '@/vdb/graphql/api.js';
|
|
import { api } from '@/vdb/graphql/api.js';
|
|
|
import { Trans, useLingui } from '@/vdb/lib/trans.js';
|
|
import { Trans, useLingui } from '@/vdb/lib/trans.js';
|
|
|
import { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
import { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
@@ -51,6 +53,7 @@ export function useGeneratedColumns<T extends TypedDocumentNode<any, any>>({
|
|
|
fields,
|
|
fields,
|
|
|
customizeColumns,
|
|
customizeColumns,
|
|
|
rowActions,
|
|
rowActions,
|
|
|
|
|
+ bulkActions,
|
|
|
deleteMutation,
|
|
deleteMutation,
|
|
|
additionalColumns,
|
|
additionalColumns,
|
|
|
defaultColumnOrder,
|
|
defaultColumnOrder,
|
|
@@ -62,6 +65,7 @@ export function useGeneratedColumns<T extends TypedDocumentNode<any, any>>({
|
|
|
fields: FieldInfo[];
|
|
fields: FieldInfo[];
|
|
|
customizeColumns?: CustomizeColumnConfig<T>;
|
|
customizeColumns?: CustomizeColumnConfig<T>;
|
|
|
rowActions?: RowAction<PaginatedListItemFields<T>>[];
|
|
rowActions?: RowAction<PaginatedListItemFields<T>>[];
|
|
|
|
|
+ bulkActions?: BulkAction[];
|
|
|
deleteMutation?: TypedDocumentNode<any, any>;
|
|
deleteMutation?: TypedDocumentNode<any, any>;
|
|
|
additionalColumns?: AdditionalColumns<T>;
|
|
additionalColumns?: AdditionalColumns<T>;
|
|
|
defaultColumnOrder?: Array<string | number | symbol>;
|
|
defaultColumnOrder?: Array<string | number | symbol>;
|
|
@@ -71,6 +75,7 @@ export function useGeneratedColumns<T extends TypedDocumentNode<any, any>>({
|
|
|
enableSorting?: boolean;
|
|
enableSorting?: boolean;
|
|
|
}>) {
|
|
}>) {
|
|
|
const columnHelper = createColumnHelper<PaginatedListItemFields<T>>();
|
|
const columnHelper = createColumnHelper<PaginatedListItemFields<T>>();
|
|
|
|
|
+ const allBulkActions = useAllBulkActions(bulkActions ?? []);
|
|
|
|
|
|
|
|
const { columns, customFieldColumnNames } = useMemo(() => {
|
|
const { columns, customFieldColumnNames } = useMemo(() => {
|
|
|
const columnConfigs: Array<{ fieldInfo: FieldInfo; isCustomField: boolean }> = [];
|
|
const columnConfigs: Array<{ fieldInfo: FieldInfo; isCustomField: boolean }> = [];
|
|
@@ -169,8 +174,8 @@ export function useGeneratedColumns<T extends TypedDocumentNode<any, any>>({
|
|
|
finalColumns = [...orderedColumns, ...remainingColumns];
|
|
finalColumns = [...orderedColumns, ...remainingColumns];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (includeActionsColumn && (rowActions || deleteMutation)) {
|
|
|
|
|
- const rowActionColumn = getRowActions(rowActions, deleteMutation);
|
|
|
|
|
|
|
+ if (includeActionsColumn && (rowActions || deleteMutation || bulkActions)) {
|
|
|
|
|
+ const rowActionColumn = getRowActions(rowActions, deleteMutation, allBulkActions);
|
|
|
if (rowActionColumn) {
|
|
if (rowActionColumn) {
|
|
|
finalColumns.push(rowActionColumn);
|
|
finalColumns.push(rowActionColumn);
|
|
|
}
|
|
}
|
|
@@ -212,13 +217,14 @@ export function useGeneratedColumns<T extends TypedDocumentNode<any, any>>({
|
|
|
function getRowActions(
|
|
function getRowActions(
|
|
|
rowActions?: RowAction<any>[],
|
|
rowActions?: RowAction<any>[],
|
|
|
deleteMutation?: TypedDocumentNode<any, any>,
|
|
deleteMutation?: TypedDocumentNode<any, any>,
|
|
|
|
|
+ bulkActions?: BulkAction[],
|
|
|
): AccessorKeyColumnDef<any> | undefined {
|
|
): AccessorKeyColumnDef<any> | undefined {
|
|
|
return {
|
|
return {
|
|
|
id: 'actions',
|
|
id: 'actions',
|
|
|
accessorKey: 'actions',
|
|
accessorKey: 'actions',
|
|
|
header: () => <Trans>Actions</Trans>,
|
|
header: () => <Trans>Actions</Trans>,
|
|
|
enableColumnFilter: false,
|
|
enableColumnFilter: false,
|
|
|
- cell: ({ row }) => {
|
|
|
|
|
|
|
+ cell: ({ row, table }) => {
|
|
|
return (
|
|
return (
|
|
|
<DropdownMenu>
|
|
<DropdownMenu>
|
|
|
<DropdownMenuTrigger asChild>
|
|
<DropdownMenuTrigger asChild>
|
|
@@ -235,6 +241,9 @@ function getRowActions(
|
|
|
{action.label}
|
|
{action.label}
|
|
|
</DropdownMenuItem>
|
|
</DropdownMenuItem>
|
|
|
))}
|
|
))}
|
|
|
|
|
+ {bulkActions?.map((action, index) => (
|
|
|
|
|
+ <action.component key={`bulk-action-${index}`} selection={[row]} table={table} />
|
|
|
|
|
+ ))}
|
|
|
{deleteMutation && (
|
|
{deleteMutation && (
|
|
|
<DeleteMutationRowAction deleteMutation={deleteMutation} row={row} />
|
|
<DeleteMutationRowAction deleteMutation={deleteMutation} row={row} />
|
|
|
)}
|
|
)}
|