import { DatePicker, Input, Select, Tooltip } from 'antd'; import * as React from 'react'; import * as Tools from 'jad-tool' import { baseFilterGroupConfig } from './baseConfig' const { MonthPicker, RangePicker, WeekPicker } = DatePicker; const Search = Input.Search; const Option = Select.Option; const OptGroup = Select.OptGroup; type FilterType = { key: string, //ant组件名 search | DatePicker | RangePicker |... onChange: any, //change事件触发 value: any, //默认值 render?: any, //是否自定义组件 config?: any, //筛选组件自定义配置 toolTip?: object, //筛选组件提示,当前只支持时间范围 } //react component export class FilterGroup extends React.Component<{ onCreateFilterConfig: (iterator) => any //过滤组件配置数据迭代器 filterGroup: string[], //过滤组件key fixeRightGroup?: any[] //右边float-right 固定渲染列 一般为button }> { //由迭代器根据基础配置生成合适当前使用配置 private createFilterGroupFactory = function (iterator): FilterType[] { var { filterGroup } = this.props; if (!iterator || !Tools.isFunction(iterator)) { return [] } return filterGroup.map(function (componentName, index) { var filterComponentBaseConfig = Tools.extend({}, baseFilterGroupConfig[componentName]) if (Tools.isPlainObject(filterComponentBaseConfig)) { filterComponentBaseConfig = { key: componentName } } return iterator(filterComponentBaseConfig, index) }) } //create RangePicker private getRangePicker(componentConfig) { let { value, onChange, config } = componentConfig config = { value, onChange, ...config, } let key = (config.key ? config.key : '') + 'FilterGroup-RangePicker' if (Object.keys(config).includes('defaultValue') && !config.value) { delete config.value //如果是使用的defaultValue,有可能初始化的时候值不存在,需要重置下组件重新渲染 if(config['defaultValue']){ key += 'default-mode' } } return ( ) } //creater search private getSearch(componentConfig) { let { value, onSearch, onChange, config, } = componentConfig config = { value, onSearch, onChange, ...config, } let key = (config.key ? config.key : '') + 'FilterGroup-search' if (Object.keys(config).includes('defaultValue') && !config.value) { delete config.value //如果是使用的defaultValue,有可能初始化的时候值不存在,需要重置下组件重新渲染 if(config['defaultValue']){ key += 'default-mode' } } return ( ) } //create select private getSelect(componentConfig) { let { value, onChange, config, options = [], isGroup = false, } = componentConfig config = { options, value, onChange, ...config, } if (onChange) { config['onSelect'] = config['onSelect'] || onChange } let key = (config.key ? config.key : '') + 'FilterGroup-Select' if (Object.keys(config).includes('defaultValue') && !config.value) { delete config.value //如果是使用的defaultValue,有可能初始化的时候值不存在,需要重置下组件重新渲染 if(config['defaultValue']){ key += 'default-mode' } } if (isGroup) { return ( ) } else { return ( ) } } //render filter label private renderLabel(filterInfo) { const { labelName = "", labelStyle = {} } = filterInfo if (!labelName) { return '' } return ( {labelName} ) } //render filter component private renderFactory(filterGroupConfig = []) { return filterGroupConfig.map((item, index) => { var { key, render, } = item switch (key) { case 'RangePicker': return ( {this.renderLabel(item)} { item['toolTip'] ? {this.getRangePicker(item)} : this.getRangePicker(item) } ) case 'Search': return ( {this.renderLabel(item)} {this.getSearch(item)} ) case 'Select': return ( {this.renderLabel(item)} {this.getSelect(item)} ) default: return (render && Tools.isFunction(render)) ? ( {this.renderLabel(item)} {render(item)} ) : '' } }) } //render filter-right component list private renderFixeRightGroup(groupConfig = []) { if (!groupConfig) { return '' } return (
{groupConfig.map((render, index) => { return ( {render} ) })}
) } //render filter component groud public render() { const { onCreateFilterConfig, fixeRightGroup } = this.props const filterGroupConfig = this.createFilterGroupFactory(onCreateFilterConfig) //render return (
{this.renderFactory(filterGroupConfig)} { this.props.children }
{this.renderFixeRightGroup(fixeRightGroup)}
) } }