diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js index 8f91d1af24340e33563606c455036335d8a25def..c134771ba94f98aca6b1b3dae8ec713ca0f9555b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js @@ -229,7 +229,7 @@ const IndeterminateCheckbox = React.forwardRef( ) // Our table component -function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn }) { +function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn, tablename }) { const filterTypes = React.useMemo( () => ({ // Add a new fuzzyTextFilterFn filter type. @@ -257,7 +257,7 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn }), [] ) - + const { getTableProps, getTableBodyProps, @@ -273,7 +273,6 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn setHiddenColumns, gotoPage, setPageSize, - } = useTable( { columns, @@ -288,7 +287,6 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn useSortBy, usePagination ) - React.useEffect(() => { setHiddenColumns( columns.filter(column => !column.isVisible).map(column => column.accessor) @@ -307,6 +305,17 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn setPageSize(e.rows) }; + const onToggleChange = (e) =>{ + let lsToggleColumns = []; + allColumns.forEach( acolumn =>{ + let jsonobj = {}; + let visible = (acolumn.Header === e.target.id) ? ((acolumn.isVisible)?false:true) :acolumn.isVisible + jsonobj['Header'] = acolumn.Header; + jsonobj['isVisible'] = visible; + lsToggleColumns.push(jsonobj) + }) + localStorage.setItem(tablename,JSON.stringify(lsToggleColumns)) + } return ( <> <div id="block_container"> @@ -325,7 +334,10 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn </div> {allColumns.map(column => ( <div key={column.id} style={{'display':column.id !== 'actionpath'?'block':'none'}}> - <input type="checkbox" {...column.getToggleHiddenProps()} /> { + <input type="checkbox" {...column.getToggleHiddenProps()} + id={(defaultheader[column.id])?defaultheader[column.id]:(optionalheader[column.id]?optionalheader[column.id]:column.id)} + onClick={onToggleChange} + /> { (defaultheader[column.id]) ? defaultheader[column.id] : (optionalheader[column.id] ? optionalheader[column.id] : column.id)} </div> ))} @@ -346,7 +358,7 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn /> } </div> -</div> + </div> <div className="table_container"> <table {...getTableProps()} data-testid="viewtable" className="viewtable" > @@ -367,7 +379,6 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn {column.Header !== 'actionpath' && <div className={columnclassname[0][column.Header]} > {column.canFilter && column.Header !== 'Action' ? column.render('Filter') : null} - </div> } </th> @@ -382,7 +393,10 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn return ( <tr {...row.getRowProps()}> {row.cells.map(cell => { - return <td {...cell.getCellProps()}>{cell.render('Cell')}</td> + if(cell.column.id !== 'actionpath') + return <td {...cell.getCellProps()}>{cell.render('Cell')}</td> + else + return; })} </tr> ) @@ -396,7 +410,6 @@ function Table({ columns, data, defaultheader, optionalheader, defaultSortColumn </> ) } - // Define a custom filter filter function! function filterGreaterThan(rows, id, filterValue) { @@ -423,6 +436,8 @@ function ViewTable(props) { let defaultheader = props.defaultcolumns; let optionalheader = props.optionalcolumns; let defaultSortColumn = props.defaultSortColumn; + let tablename = (props.tablename)?props.tablename:window.location.pathname; + if(!defaultSortColumn){ defaultSortColumn =[{}]; } @@ -455,34 +470,45 @@ function ViewTable(props) { // Object.entries(props.paths[0]).map(([key,value]) =>{}) } - //Default Columns - defaultdataheader.forEach(header => { - const isString = typeof defaultheader[0][header] === 'string'; - columns.push({ - Header: isString ? defaultheader[0][header] : defaultheader[0][header].name, - id: isString ? defaultheader[0][header] : defaultheader[0][header].name, - accessor: header, - filter: (!isString && defaultheader[0][header].filter=== 'date') ? 'includes' : 'fuzzyText', - Filter: isString ? DefaultColumnFilter : (filterTypes[defaultheader[0][header].filter] ? filterTypes[defaultheader[0][header].filter] : DefaultColumnFilter), - isVisible: true, - Cell: props => <div> {updatedCellvalue(header, props.value)} </div>, - }) - }) - - //Optional Columns - optionaldataheader.forEach(header => { - const isString = typeof optionalheader[0][header] === 'string'; - columns.push({ - Header: isString ? optionalheader[0][header] : optionalheader[0][header].name, - id: isString ? optionalheader[0][header] : optionalheader[0][header].name, + //Default Columns + defaultdataheader.forEach(header =>{ + const isString = typeof defaultheader[0][header] === 'string'; + columns.push({ + Header: isString ? defaultheader[0][header] : defaultheader[0][header].name, + id: header, + accessor: header, + filter: (!isString && defaultheader[0][header].filter=== 'date') ? 'includes' : 'fuzzyText', + Filter: isString ? DefaultColumnFilter : (filterTypes[defaultheader[0][header].filter] ? filterTypes[defaultheader[0][header].filter] : DefaultColumnFilter), + isVisible: true, + Cell: props => <div> {updatedCellvalue(header, props.value)} </div>, + }) +}) + +//Optional Columns + +optionaldataheader.forEach(header => { + const isString = typeof optionalheader[0][header] === 'string'; + columns.push({ + Header: isString ? optionalheader[0][header] : optionalheader[0][header].name, + id: isString ? header : optionalheader[0][header].name, accessor: header, filter: (!isString && optionalheader[0][header].filter=== 'date') ? 'includes' : 'fuzzyText', Filter: isString ? DefaultColumnFilter : (filterTypes[optionalheader[0][header].filter] ? filterTypes[optionalheader[0][header].filter] : DefaultColumnFilter), isVisible: false, Cell: props => <div> {updatedCellvalue(header, props.value)} </div>, - }) - }); - + }) +}); + + let togglecolumns = localStorage.getItem(tablename); + if(togglecolumns){ + togglecolumns = JSON.parse(togglecolumns) + columns.forEach(column =>{ + togglecolumns.filter(tcol => { + column.isVisible = (tcol.Header === column.Header)?tcol.isVisible:column.isVisible; + }) + }) + } + function updatedCellvalue(key, value){ try{ if(key === 'blueprint_draft' && _.includes(value,'/task_draft/')){ @@ -514,7 +540,7 @@ function ViewTable(props) { return ( <div> <Table columns={columns} data={tbldata} defaultheader={defaultheader[0]} optionalheader={optionalheader[0]} - defaultSortColumn={defaultSortColumn} /> + defaultSortColumn={defaultSortColumn} tablename={tablename}/> </div> ) } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js index e4438cfd5b9cc69ff7e2116bdb4bff0bd9acf7e8..11d22cb4f4fed445c291efd35d0785ead0226a83 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js @@ -148,6 +148,7 @@ class CycleList extends Component{ defaultSortColumn= {this.defaultSortColumn} showaction="true" paths={this.state.paths} + tablename="cycle_list" /> : <></> } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js index 4aa4e98a8cd8485d58fb75da63c8f29f8a8eea44..161e8a65bde65a379d52f7d4b419b4ea9c478fde 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js @@ -94,6 +94,7 @@ export class ProjectList extends Component{ paths={this.state.paths} keyaccessor="name" unittest={this.state.unittest} + tablename="project_list" /> } </> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js index 0a6258a315d9c1b44aeed07cf9dbefdcd497b5fc..3b5231827b711b6fab5e46bd1a9a0e70c6f8a6b2 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js @@ -99,6 +99,7 @@ class SchedulingUnitList extends Component{ keyaccessor="id" paths={this.state.paths} unittest={this.state.unittest} + tablename="scheduleunit_list" /> } </> diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js index a2af2edb155edd28f6de0001ee375d029fcd359f..b1facd47522692822bef041f26401efcf5e8a4f5 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/ViewSchedulingUnit.js @@ -183,6 +183,7 @@ class ViewSchedulingUnit extends Component{ keyaccessor="id" paths={this.state.paths} unittest={this.state.unittest} + tablename="scheduleunit_task_list" /> } </>