import type { MultiSelectExclusivity } from '../dropdown'; import type { DataTableFilterItem, DataTablePostBackFilterItem, TableColumn } from './datatable'; import { Prop, toNative } from 'vue-facing-decorator'; import PowerduckState from '../../app/powerduck-state'; import TsxComponent, { Component } from '../../app/vuetsx'; import Button from '../button/button'; import { ButtonLayout, ButtonSize } from '../button/button-layout'; import DropdownList, { MultiselectMode } from '../dropdown'; import TextBox from '../input/textbox'; import Modal from '../modal/modal'; import ModalBody from '../modal/modal-body'; import ModalFooter from '../modal/modal-footer'; import { DataTableFilterItemType } from './datatable'; interface ColFilterModalArgs { columns: TableColumn[]; changed: (e: ColFilterModalShowResponse) => void; } export interface ColFilterMethods { show: (args: ColFilterModalShowArgs) => void; } interface ColFilterModalShowArgs { filterArr: DataTablePostBackFilterItem[]; } export interface ColFilterModalShowResponse { changed: boolean; filterArr: DataTablePostBackFilterItem[]; } @Component class ColFilterModalComponent extends TsxComponent implements ColFilterModalArgs { @Prop() columns!: TableColumn[]; @Prop() changed: (e: ColFilterModalShowResponse) => void; filterChanged: boolean = false; originalFilterArr: DataTablePostBackFilterItem[] = null; filterArr: DataTablePostBackFilterItem[] = null; show(args: ColFilterModalShowArgs) { this.filterArr = [...(args.filterArr || [])]; this.originalFilterArr = JSON.parse(JSON.stringify(this.filterArr)); (this.$refs.colFilterDialog as typeof Modal.prototype).show(); } handleFilterChanged(): void { this.changed({ changed: JSON.stringify(this.originalFilterArr) != JSON.stringify(this.filterArr), filterArr: this.filterArr, }); } addFilterItem() { this.filterArr.push({ PropertyName: this.columns[0].id, FilterType: DataTableFilterItemType.Text, ContainsValue: null, }); } getFilterArr(): DataTablePostBackFilterItem[] { return this.filterArr || []; } getColumns(): TableColumn[] { return this.columns || []; } getColumnsForFilter(): TableColumn[] { return this.getColumns().filter(p => p.filterType != DataTableFilterItemType.None); } performSelectionFilter( dtColumn: TableColumn, selected: DataTableFilterItem[], filterItem: DataTablePostBackFilterItem, exclusivity: MultiSelectExclusivity, ) { filterItem.PropertyName = dtColumn.id; filterItem.FilterType = DataTableFilterItemType.Dropdown; filterItem.ValueArrStrategy = exclusivity; filterItem.ValueArr = (selected || []).map(p => p.id); } render(h) { return ( {this.getFilterArr().map(filterItem => (
{this.renderFilterType(h, filterItem)}
))} {this.getFilterArr().length == 0 &&
{PowerduckState.getResourceValue('dtNoMobileFilter')}
}