import { AllFilters, FiltersMap, ExtractFilterValue } from '@wix/bex-core'; import { InfoIconProps } from '@wix/design-system'; export type ViewType = 'table' | 'grid' | 'spreadsheet'; export type ColumnSortOrder = 'Ascending' | 'Descending'; export const columnSortOrder = { Ascending: 'Ascending' as const, Descending: 'Descending' as const, }; export interface ColumnViewConfig { id: string; name?: string; isSelected?: boolean; } export interface ColumnSortConfig { columnId: string; direction: ColumnSortOrder; } export interface BasicCategory { id: string; /** * * What the category is called in the dropdown. * @external */ name: string; /** * @deprecated Info icon is now automatically rendered by Cairo for all categories. * [InfoIconProps](https://www.docs.wixdesignsystem.com/?path=/story/components-form--infoicon) * @external */ info?: InfoIconProps; } export interface Category extends BasicCategory { /** * Unique identifier. * @external */ id: string; /** * Array of [view objects](./?path=%2Fstory%2Fcommon-types--view) that appear under the category in the dropdown. * @external */ views: View[]; } export type ViewFiltersValues = { [P in keyof F]: { value?: ExtractFilterValue; } | null; }; export interface ViewBase { /** * Filters to apply when the view is selected. * @external */ filters?: Partial>> | null; orderedColumns?: ColumnViewConfig[]; /** * Array of the selected columns for the table layout. * @external */ selectedColumns?: ColumnViewConfig[]; /** * Array of the selected columns for the spreadsheet (EditableTable) layout. * @external */ spreadsheetSelectedColumns?: ColumnViewConfig[]; /** * Ordered columns for the spreadsheet (EditableTable) layout. * @external */ spreadsheetOrderedColumns?: ColumnViewConfig[]; /** * Array of sort directions. * @external */ sortDirections?: ColumnSortConfig[]; /** * Layout type for the view ('table' or 'grid'). * @external */ layout?: ViewType; } export const getViewSelectedColumnsForLayout = ( view: ViewBase | null | undefined, layout: ViewType | undefined, ): ColumnViewConfig[] | undefined => layout === 'spreadsheet' ? view?.spreadsheetSelectedColumns : view?.selectedColumns; export const setViewSelectedColumnsForLayout = ( target: Partial>, layout: ViewType | undefined, columns: ColumnViewConfig[] | undefined, ): void => { if (layout === 'spreadsheet') { target.spreadsheetSelectedColumns = columns; } else { target.selectedColumns = columns; } }; export interface View extends ViewBase { /** * Unique identifier. Do not use category IDs, `saved-views`, or `predefined-views`. * @external */ id: string; /** * What the view is called in the dropdown. * @external */ name: string; /** * Whether the view is automatically applied when the table initially loads. * @external */ isDefaultView?: boolean; createdAt?: string; /** * Extra data to be passed to the view. * @external */ extra?: string; } export type AllItemsViewProps = Omit< View, 'id' | 'createdAt' | 'filters' | 'isDefaultView' | 'name' > & { /** A label to show instead of default 'All Items' */ name?: string; /** Hides 'All Items' view from the list, default: false. Will be ignored if no presets are passed. */ hidden?: boolean; }; export type ViewActionNameBI = | 'view-save-changes' | 'view-save-new' | 'view-rename' | 'view-delete' | 'view-set-as-default' | 'view-unset-as-default'; export type PrivateView = View & { categoryId?: string; categorySortInd: string; isPreset: boolean; }; export interface ViewsDTO { hiddenPresetIds?: string[]; views?: View[]; } export const ALL_ITEMS_VIEW_ID = 'all-items-view'; export const SAVED_VIEWS_ID = 'saved-views'; export const PREDEFINED_VIEWS_ID = 'predefined-views'; export const ALL_ITEMS_SORT_IND = '0'; export const SAVED_VIEWS_SORT_IND = '1'; export const PREDEFINED_VIEWS_SORT_IND = '2';