data-table.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { parse } from 'graphql';
  2. import { addBulkAction, addListQueryDocument } from '../../data-table/data-table-extensions.js';
  3. import { addDisplayComponent } from '../display-component-extensions.js';
  4. import { DashboardDataTableExtensionDefinition } from '../types/index.js';
  5. /**
  6. * @description
  7. * Generates a data table display component key based on the pageId and column name.
  8. * Uses the pattern: pageId_columnName
  9. */
  10. export function generateDataTableDisplayComponentKey(pageId: string, column: string): string {
  11. return `${pageId}_${column}`;
  12. }
  13. /**
  14. * @description
  15. * Adds a display component for a specific column in a data table.
  16. */
  17. export function addDataTableDisplayComponent(
  18. pageId: string,
  19. column: string,
  20. component: React.ComponentType<{ value: any; [key: string]: any }>,
  21. ) {
  22. const key = generateDataTableDisplayComponentKey(pageId, column);
  23. addDisplayComponent({ pageId, blockId: 'list-table', field: column, component });
  24. }
  25. export function registerDataTableExtensions(dataTables?: DashboardDataTableExtensionDefinition[]) {
  26. if (dataTables) {
  27. for (const dataTable of dataTables) {
  28. if (dataTable.bulkActions?.length) {
  29. for (const action of dataTable.bulkActions) {
  30. addBulkAction(dataTable.pageId, dataTable.blockId, action);
  31. }
  32. }
  33. if (dataTable.extendListDocument) {
  34. const document =
  35. typeof dataTable.extendListDocument === 'function'
  36. ? dataTable.extendListDocument()
  37. : dataTable.extendListDocument;
  38. addListQueryDocument(
  39. dataTable.pageId,
  40. dataTable.blockId,
  41. typeof document === 'string' ? parse(document) : document,
  42. );
  43. }
  44. if (dataTable.displayComponents?.length) {
  45. for (const displayComponent of dataTable.displayComponents) {
  46. addDataTableDisplayComponent(
  47. dataTable.pageId,
  48. displayComponent.column,
  49. displayComponent.component,
  50. );
  51. }
  52. }
  53. }
  54. }
  55. }