import { Icon } from "@fluentui/react"; import { Component, ReactNode } from "react"; import { BackgroundLevel, FontLevel, Theme } from "../Theme/Theme"; import "./DetailsList.scss"; type IItems = Record & {key: string, select?: boolean}; interface IColumns { key: K; className?: string; noDefaultStyle?: boolean; beforeCheckbox?: boolean; render: (data: D[K]) => ReactNode, click?: (data: D[K]) => any, } interface IDetailsListProps { items: IItems[]; columns: IColumns[]; hideCheckBox?: boolean; checkboxClassName?: string; } class DetailsList extends Component { private renderValue(item: IItems, column: IColumns) { const classList: string[] = []; if (!column.noDefaultStyle) { classList.push("details-list-value"); } if (column.className) { classList.push(column.className); } return
{column.render(item[column.key as any])}
} public render(): ReactNode { return { this.props.items.map((item) => { const { checkboxClassName } = this.props; return
{ this.props.columns.map((column) => { if (column.beforeCheckbox) { return this.renderValue(item, column); } }) } { this.props.hideCheckBox ? null :
} { this.props.columns.map((column) => { if (!column.beforeCheckbox) { return this.renderValue(item, column); } }) }
}) }
} } export { DetailsList };