import { CollectionPageState, DataExtensionOverrides, DataExtensionState, FiltersMap, WixPatternsContainer, } from '@wix/bex-core'; import { ToolbarCollectionState } from '../../state'; import { CustomFieldsCollectionPanelEntry } from '../CustomFieldsPanel/CustomFieldsCollectionPanelEntry'; import { dataExtensionFieldsSourceFrom } from './dataExtensionFieldsSource'; import { dataExtensionRendering } from './dataExtensionRendering'; import { CollectionFieldsSourceState } from '../../state/CollectionFieldsSourceState'; import { ReactElement } from 'react'; import { MoreActionsItem } from '../MoreActions'; import { manageCustomFieldsPageAction } from './manageCustomFieldsPageAction'; export type DataExtensionObjectType = { setDataExtensionOnTable: ( toolbar: ToolbarCollectionState, overrides?: DataExtensionProps, ) => void; syncTableCollectionProps: (state: ToolbarCollectionState) => void; manageCustomFieldsPageAction: (params: { pageState: CollectionPageState; container: WixPatternsContainer; }) => MoreActionsItem; }; export type DataExtensionProps = DataExtensionOverrides; export const DataExtension: React.FC & DataExtensionObjectType = (_: DataExtensionProps) => { return null; }; export type DataExtensionElement = ReactElement< DataExtensionProps, typeof DataExtension >; export type DataExtensionType = typeof DataExtension; DataExtension.setDataExtensionOnTable = function (toolbar, overrides) { if (toolbar.collectionFieldsSource) { return; } const dataExtension = new DataExtensionState({ container: toolbar.container, fqdn: toolbar.collection.fqdn ?? { product: toolbar.collection.queryName, }, closeSidePanel: toolbar.closeSidePanel, disableUserDefinedWriting: overrides?.disableUserDefinedWriting, filterable: overrides?.filterable, containsPii: overrides?.containsPii, defaultPermissions: overrides?.defaultPermissions, enableArchive: overrides?.enableArchive, }); const fieldsSource = dataExtensionFieldsSourceFrom({ dataExtension, reportBi: toolbar.reportBi, toExtendedFields: toolbar.collection.toExtendedFields, }); CollectionFieldsSourceState.setOnTable(toolbar, { fieldsSource, ...dataExtensionRendering({ dataExtension, toolbar, DataExtension, props: overrides, }), }); }; DataExtension.syncTableCollectionProps = ( state: ToolbarCollectionState, ) => { state.panels.registerSidePanel( 'customFields', CustomFieldsCollectionPanelEntry, ); }; DataExtension.manageCustomFieldsPageAction = manageCustomFieldsPageAction;