/*! * Copyright (c) Microsoft. All rights reserved. * Licensed under the MIT license. See LICENSE file in the project. */ import type { Field, FieldMetadata, ValidationResult } from '@datashaper/schema' import type { IColumn, IDetailsColumnProps, IRenderFunction, } from '@fluentui/react' import { ROW_NUMBER_COLUMN_NAME } from '../ArqueroDetailsList.constants.js' import type { ArqueroDetailsListFeatures, DropdownOptionSelect, StatsColumnType, } from '../ArqueroDetailsList.types.js' import type { ColumnRenderFunction, ColumnSelectFunction } from '../index.js' import { CommandBarContainer } from './CommandBarContainer.js' import { DefaultColumnHeader } from './DefaultColumnHeader.js' import { FeaturesCell } from './FeaturesCell.js' import { HistogramColumnHeader } from './HistogramColumnHeader.js' import { RowNumberCell } from './RowNumberCell.js' import { SmartCell, StatsColumnHeader } from './index.js' export const createRenderSmartCell = ( field: Field, metadata?: FieldMetadata, color?: string, onSelect?: ColumnSelectFunction, onCellDropdownSelect?: DropdownOptionSelect, validationResult?: ValidationResult, ): ColumnRenderFunction => function renderSmartCell(item?: any, index?: number, column?: IColumn) { return ( ) } export const createRenderFeaturesCell = ( features: ArqueroDetailsListFeatures, field?: Field, metadata?: FieldMetadata, color?: string, onSelect?: ColumnSelectFunction, onCellDropdownSelect?: DropdownOptionSelect, validationResult?: ValidationResult, ): ColumnRenderFunction => function renderFeaturesCell(item?: any, index?: number, column?: IColumn) { return ( ) } export const createRenderColumnHeader = ( renderers: IRenderFunction[], ): IRenderFunction => function renderColumnHeader(props?, defaultRender?) { if (!(props && defaultRender)) { return null } return ( <> {renderers.map((renderer, i) => renderer( { key: `renderer-${props.column.key}${i}`, ...props, }, defaultRender, ), )} ) } /** * Establish our own default rendering for column headers. * This gives us full control over the layout so we can cleanly * handle the default while also stacking in advanced render features. * @returns */ export const createRenderDefaultColumnHeader = ( originalProps: Partial, sortable: boolean, validationResult?: ValidationResult, onSelect?: ColumnSelectFunction, onSort?: ColumnSelectFunction, ): IRenderFunction => function renderDefaultColumnHeader(props?, defaultRender?) { if (!(props && defaultRender)) { return null } const p = fixProps(originalProps, props) return ( ) } export const createRenderStatsColumnHeader = ( field: Field, metadata?: FieldMetadata, onSelect?: ColumnSelectFunction, stats?: StatsColumnType[], ): IRenderFunction => { return function renderStatsColumnHeader(props?, defaultRender?) { if (!(props && defaultRender)) { return null } return ( ) } } export const createRenderCommandBarColumnHeader = ( renderers: IRenderFunction[], ): IRenderFunction => { return function renderCommandBarColumnHeader(props?, defaultRender?) { if (!(props && defaultRender)) { return null } return ( ) } } export const createRenderHistogramColumnHeader = ( field: Field, metadata?: FieldMetadata, color?: string, onSelect?: ColumnSelectFunction, ): IRenderFunction => { return function renderHistogramColumnHeader(props?, defaultRender?) { if (!(props && defaultRender)) { return null } return ( ) } } export const createRenderRowNumberColumn = (): IColumn => { return { key: ROW_NUMBER_COLUMN_NAME, name: '', fieldName: ROW_NUMBER_COLUMN_NAME, minWidth: 20, onRender: (_?: any, index?: number) => , } } function fixProps( original: Partial, updated: IDetailsColumnProps, ): IDetailsColumnProps { const iconName = original?.iconName if (iconName) { return { ...updated, column: { ...updated.column, iconName, }, } } return updated }