import * as React from 'react'; import { Dialog, DialogType, DialogFooter, Checkbox, PrimaryButton, DefaultButton } from '@fluentui/react'; import { EXPERIMENT } from '@static/datamodel'; import { Storage } from '@model/localStorage'; /** * changeColumnComponent file is for [customized table column, customized hyper-parameter graph yAxis] * and currently it uses localstorage to store the customized results */ interface ChangeColumnState { // buffer, not saved yet currentSelected: string[]; } interface ChangeColumnProps { allColumns: SimpleColumn[]; // all column List selectedColumns: string[]; // user selected column list onSelectedChange: (val: string[]) => void; onHideDialog: () => void; minSelected?: number; whichComponent: string; // which component use this component } interface SimpleColumn { key: string; // key for management name: string; // name to display } //interface CheckBoxItems { // label: string; // checked: boolean; // onChange: () => void; //} class ChangeColumnComponent extends React.Component { constructor(props: ChangeColumnProps) { super(props); this.state = { currentSelected: this.props.selectedColumns }; } makeChangeHandler = (label: string): any => { return (ev: any, checked: boolean): void => this.onCheckboxChange(ev, label, checked); }; onCheckboxChange = ( ev: React.FormEvent | undefined, label: string, val?: boolean ): void => { const source: string[] = [...this.state.currentSelected]; if (val === true) { if (!source.includes(label)) { source.push(label); this.setState({ currentSelected: source }); } } else { // remove from source const result = source.filter(item => item !== label); this.setState({ currentSelected: result }); } }; saveUserSelectColumn = (): void => { const { currentSelected } = this.state; const { allColumns, onSelectedChange, whichComponent } = this.props; const selectedColumns = allColumns.map(column => column.key).filter(key => currentSelected.includes(key)); onSelectedChange(selectedColumns); if (whichComponent === 'table') { const storage = new Storage( `${EXPERIMENT.profile.id}_columns`, JSON.stringify(selectedColumns), 30 * 24 * 60 * 60 * 1000 ); storage.setValue(); } else { const storage = new Storage( `${EXPERIMENT.profile.id}_paraColumns`, JSON.stringify(selectedColumns), 30 * 24 * 60 * 60 * 1000 ); storage.setValue(); } this.hideDialog(); }; // user exit dialog cancelOption = (): void => { // reset select column this.setState({ currentSelected: this.props.selectedColumns }, () => { this.hideDialog(); }); }; private hideDialog = (): void => { this.props.onHideDialog(); }; render(): React.ReactNode { const { allColumns, minSelected } = this.props; const { currentSelected } = this.state; return (
); } } export default ChangeColumnComponent;