diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js index 23f23765ba4f5e329e71f49e231bfc433ea0cee6..ce1ec38625e05519aa7ae43e01a977a7fb310e5a 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js @@ -1,7 +1,7 @@ import React, { useRef, useState } from "react"; import { useSortBy, useTable, useFilters, useGlobalFilter, useAsyncDebounce, usePagination, useRowSelect, useColumnOrder } from 'react-table' import matchSorter from 'match-sorter' -import _ from 'lodash'; +import _, { filter } from 'lodash'; import moment from 'moment'; import { useHistory } from "react-router-dom"; import { OverlayPanel } from 'primereact/overlaypanel'; @@ -19,6 +19,7 @@ import { RadioButton } from 'primereact/radiobutton'; import { useExportData } from "react-table-plugins"; import { ProgressBar } from 'primereact/progressbar'; //import UIConstants from '../utils/ui.constants'; +import UtilService from '../../src/services/util.service' import Papa from "papaparse"; import JsPDF from "jspdf"; import "jspdf-autotable"; @@ -45,6 +46,8 @@ let hasFilters = false; let loadingStatus = false; let tmpTableData = null; let currentTableName = null; +let storeFilter = false; +let storage_array = []; // Define a default UI for filtering function GlobalFilter({ @@ -75,9 +78,21 @@ function DefaultColumnFilter({ const [filtered, setFiltered] = useState(false); React.useEffect(() => { if (!filterValue && value) { - setValue(''); + setValue(''); } }, [filterValue, value]); + + React.useEffect(() => { + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + let storageStatus =_.filter(storage, function (filter) { + if ( filter.name === Header && storeFilter) { + setValue(filter.value); + setFilter(filter.value); + return true; + } + }) + }, []); // Function to call the server side filtering const callServerFilter = (event, isCleared) => { @@ -91,8 +106,7 @@ function DefaultColumnFilter({ } else { filterCallback(tableOptionsState, setLoaderFunction); } - }; - + }; return ( <> <div className="table-filter" onClick={e => { e.stopPropagation() }} style={{marginRight: '5px'}}> @@ -101,6 +115,29 @@ function DefaultColumnFilter({ onChange={e => { setValue(e.target.value); setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely + if(storeFilter) { + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + if(storage && storage.length > 0) { + storage.forEach(function(value, index) { + if(value.name === Header) { + value.name = Header + value.value = e.target.value + } + }); + const selected = _.filter(storage, function (filter) { + if ( filter.name === Header) { + return true; + } + }) + if(selected.length <= 0) { + storage.push({name: Header, value: e.target.value}) + } + } else { + storage = [{name: Header, value: e.target.value}] + } + UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); + } }} onKeyUp={(e) => { if (e.key === "Enter" && doServersideFilter) { @@ -119,6 +156,29 @@ function DefaultColumnFilter({ setValue(''); callServerFilter(e, true); } + if(storeFilter) { + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + if(storage && storage.length > 0) { + storage.forEach(function(value, index) { + if(value.name === Header) { + value.name = Header + value.value = e.target.value + } + }); + const selected = _.filter(storage, function (filter) { + if ( filter.name === Header) { + return true; + } + }) + if(selected.length <= 0) { + storage.push({name: Header, value: e.target.value}) + } + } else { + storage = [{name: Header, value: e.target.value}] + } + UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); + } }} /> } </div> @@ -127,6 +187,32 @@ function DefaultColumnFilter({ ) } +const setStoreData = (id, value) => { + debugger + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + if(storage && storage.length > 0) { + storage.forEach(function(value, index) { + if(value.name === id) { + value.name = id + value.value = value + } + }); + const selected = _.filter(storage, function (filter) { + if ( filter.name === id) { + return true; + } + }) + if(selected.length <= 0) { + storage.push({name: id, value: value}) + } + } else { + storage = [{name: id, value: value}] + } + UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); +} + + /* Generate and download csv */ @@ -232,6 +318,7 @@ function SelectColumnFilter({ setFiltered(true); callServerFilter(e, false); } + } }} > @@ -390,8 +477,8 @@ function BooleanColumnFilter({ } // This is a custom filter UI that uses a -// calendar to set the value -function CalendarColumnFilter({ +// calendar to set the valueCalendar +function ColumnFilter({ column: { setFilter, filterValue, Header }, }) { // Calculate the min and max @@ -403,6 +490,20 @@ function CalendarColumnFilter({ setValue(null); } }, [filterValue, value]); + + React.useEffect(() => { + // let localstorage_key = window.location.pathname.split('/')[1]; + // let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + // let storageStatus =_.filter(storage, function (filter) { + // if ( filter.name === Header && storeFilter) { + // setValue(filter.value); + // setFilter(filter.value); + // setFiltered(true); + // return true; + // } + // }) + }, []); + // Function to call the server side filtering const callServerFilter = (event, isCleared) => { hasFilters = true; @@ -428,6 +529,29 @@ function CalendarColumnFilter({ setFiltered(true); callServerFilter(e); } + // if(storeFilter) { + // let localstorage_key = window.location.pathname.split('/')[1]; + // let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + // if(storage && storage.length > 0) { + // storage.forEach(function(value, index) { + // if(value.name === Header) { + // value.name = Header + // value.value = moment(e.value).format('YYYY-MM-DD') + // } + // }); + // const selected = _.filter(storage, function (filter) { + // if ( filter.name === Header) { + // return true; + // } + // }) + // if(selected.length <= 0) { + // storage.push({name: Header, value: moment(e.value).format('YYYY-MM-DD')}) + // } + // } else { + // storage = [{name: Header, value: value}] + // } + // UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); + // } }} showIcon></Calendar> {value && <i onClick={(e) => { setFilter(undefined); setValue(''); setFiltered(false); @@ -515,7 +639,6 @@ function DateTimeColumnFilter({ } }; return ( - <div className="table-filter" onClick={e => { e.stopPropagation() }}> <Calendar value={value} appendTo={document.body} dateFormat="yy/mm/dd" onKeyUp={(e) => { @@ -707,6 +830,16 @@ function RangeColumnFilter({ if (filterValue.length === 0) { filterValue = [min, max]; } + React.useEffect(() => { + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + let storageStatus =_.filter(storage, function (filter) { + if ( filter.name === id && storeFilter) { + setFilter(filter.value); + return true; + } + }) + }, []); return ( <> @@ -716,7 +849,33 @@ function RangeColumnFilter({ </div> <Slider value={filterValue} min={min} max={max} className="filter-slider" style={{}} - onChange={(e) => { setFilter(e.value); }} range /> + onChange={(e) => { + setFilter(e.value); + if(storeFilter) { + // setStoreData(id, e.value) + let localstorage_key = window.location.pathname.split('/')[1]; + let storage = UtilService.localStore({ type: 'get', key: localstorage_key }); + if(storage && storage.length > 0) { + storage.forEach(function(value, index) { + if(value.name === id) { + value.name = id + value.value = e.value + } + }); + const selected = _.filter(storage, function (filter) { + if ( filter.name === id) { + return true; + } + }) + if(selected.length <= 0) { + storage.push({name: id, value: e.value}) + } + } else { + storage = [{name: id, value: e.value}] + } + UtilService.localStore({ type: 'set', key: localstorage_key, value: storage }); + } + }} range /> </> ); } @@ -810,11 +969,7 @@ const filterTypes = { }, 'slider': { fn: SliderColumnFilter - }, - 'date': { - fn: CalendarColumnFilter, - type: dateFilterFn - }, + }, 'dateRange': { fn: DateRangeColumnFilter, type: dateRangeFilterFn @@ -1127,6 +1282,7 @@ function Table(props) { filterCallback(tableOptionsState, setLoaderFunction); } } + return ( <> <div style={{display:'flex',justifyContent:'space-between',height:'35px'}}> @@ -1320,6 +1476,7 @@ function ViewTable(props) { let defaultheader = props.defaultcolumns; let optionalheader = props.optionalcolumns; let defaultSortColumn = props.defaultSortColumn; + storeFilter = props.storeFilter? props.storeFilter : false let tablename = (props.tablename) ? props.tablename : window.location.pathname; if (!defaultSortColumn) { @@ -1466,14 +1623,22 @@ function ViewTable(props) { // const [loading, setLoading] = React.useState(false); const [currentPage, setCurrentPage] = React.useState(0); const fetchData = React.useCallback( ({ state, setLoading }) => { - loadServerData(state, setLoading); + loadServerData(state, setLoading, true); }, []); - const loadServerData = (state, setLoading) => { + const loadServerData = (state, setLoading, onload) => { //setLoading(true); loadingStatus = true; setCurrentPage(state.pageIndex); if(props.callBackFunction) { + if(storeFilter) { + if (onload) { + let filters = UtilService.localStore({ type: 'get', key: tablename }); + UtilService.localStore({ type: 'set', key: tablename, value: filters}); + } else { + UtilService.localStore({ type: 'set', key: tablename, value: state.filters}); + } + } const promises = [props.callBackFunction(state)]; Promise.all(promises).then(async responses => { tbldata = responses[0][0]; 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 b137037c0a2ef0ba24b5a175c035de0dc74cf37b..2a4677a5b880a18d3ac0ad0974b3a91cfb78b3ce 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Cycle/list.js @@ -227,6 +227,7 @@ class CycleList extends Component { lsKeySortColumn={this.lsKeySortColumn} descendingColumn={this.descendingColumn} pageUpdated={this.pageUpdated} + storeFilter={true} /> : <></> } </> 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 03059fa023d9afc16439c9e2bf73a3312959c90e..4d3aab883012407ee66120c2cb8cfbf41da04f30 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/list.js @@ -216,6 +216,7 @@ export class ProjectList extends Component { toggleBySorting={(sortData) => this.toggleBySorting(sortData)} lsKeySortColumn={this.lsKeySortColumn} pageUpdated={this.pageUpdated} + storeFilter={true} /> : <div>No project found </div> } 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 b75e6c8cbb596f02bce97a30cbf04ce7ae1a84db..2319f4bdc0e74d5faffe54055b5d210924387869 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js @@ -885,25 +885,31 @@ class SchedulingUnitList extends Component{ * @returns */ async fetchTableData(state) { + // UtilService.localStore({ type: 'set', key: 'schedulingUnitFilter' ,value:state.filters}); this.filterQry = ''; this.orderBy = ''; this.pageUpdated = true; this.setState({loadingStatus:true}); - for( const filter of state.filters) { - if (filter.id === 'Start Time') { - this.filterQry += 'start_time_after='+filter.value+'&start_time_before='+_.replace(filter.value, '00:00:00', '23:59:59')+'&'; - } else if (filter.id === 'End Time') { - //let end = moment.utc(moment(filter.value, 'YYYY-MM-DDTHH:mm:SS').format("YYYY-MM-DDTHH:mm:SS")); - //end = moment(end, "DD-MM-YYYY").add(1, 'days'); - //filter.value = _.replace(filter.value, '00:00:00', '23:59:59'); - this.filterQry += 'stop_time_after='+filter.value+'&stop_time_before='+_.replace(filter.value, '00:00:00', '23:59:59')+'&' - } else { - let columnDetails = _.find(this.state.columnMap, {displayName:filter.id}); - if(columnDetails) { - this.filterQry += columnDetails.orgField +'='+filter.value+'&' + let filters = UtilService.localStore({ type: 'get', key: "scheduleunit_list_"+this.state.suType }); + debugger + if(filters.length > 0 ) { + for( const filter of filters) { + if (filter.id === 'Start Time') { + this.filterQry += 'start_time_after='+filter.value+'&start_time_before='+_.replace(filter.value, '00:00:00', '23:59:59')+'&'; + } else if (filter.id === 'End Time') { + //let end = moment.utc(moment(filter.value, 'YYYY-MM-DDTHH:mm:SS').format("YYYY-MM-DDTHH:mm:SS")); + //end = moment(end, "DD-MM-YYYY").add(1, 'days'); + //filter.value = _.replace(filter.value, '00:00:00', '23:59:59'); + this.filterQry += 'stop_time_after='+filter.value+'&stop_time_before='+_.replace(filter.value, '00:00:00', '23:59:59')+'&' + } else { + let columnDetails = _.find(this.state.columnMap, {displayName:filter.id}); + if(columnDetails) { + this.filterQry += columnDetails.orgField +'='+filter.value+'&' + } } } } + let sortBy = state.sortBy?state.sortBy[0]:null; if (sortBy) { this.setState({defaultSortColumn: [sortBy]}); @@ -1119,6 +1125,7 @@ class SchedulingUnitList extends Component{ loadingStatus={this.state.loadingStatus} showFilterOption={this.getFilterOptions} //Callback function to provide inputs for option-list in Select Dropdown filter pageUpdated={this.pageUpdated} + storeFilter={true} /> :<div>No Scheduling Unit found</div> } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/list.js index ea37b6ee52fbf8a21eb9052bdafc17621d273d8a..050220e9306bff4b20b03991ac6a24f3e0e3b8c1 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Task/list.js @@ -654,7 +654,10 @@ export class TaskList extends Component { this.orderBy = ''; this.pageUpdated = true; this.setState({loadingStatus:true}); - for( const filter of state.filters) { + let filters = UtilService.localStore({ type: 'get', key: "su_task_list_"+this.state.taskType }); + debugger + if(filters.length > 0 ) { + for( const filter of filters) { if (filter.id === 'Start Time') { this.filterQry += 'start_time_after='+filter.value+'&start_time_before='+_.replace(filter.value, '00:00:00', '23:59:59')+'&'; } else if (filter.id === 'End Time') { @@ -666,6 +669,7 @@ export class TaskList extends Component { } } } + } let sortBy = state.sortBy?state.sortBy[0]:null; if (sortBy) { this.setState({defaultSortColumn: [sortBy]}); @@ -726,6 +730,7 @@ export class TaskList extends Component { callBackFunction={this.fetchTableData} loadingStatus={this.state.loadingStatus} showGlobalFilter={false} + storeFilter={true} /> </> } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js index 1d91f6a3aa685e765093bc1e6fb4126720aa7084..863d39d29710d979678d3841b6e86d81de4ce899 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Workflow/workflow.list.js @@ -87,10 +87,9 @@ class WorkflowList extends Component{ this.workflowTasksList = responses[1]; this.schedulingUnitList = responses[2].data.results; this.prepareWorkflowProcesslist(); - }); + }); + } - - } toggleBySorting = (sortData) => { UtilService.localStore({ type: 'set', key: this.lsKeySortColumn, value: sortData }); } @@ -309,6 +308,7 @@ class WorkflowList extends Component{ defaultSortColumn= {this.defaultSortColumn} showFilterOption={this.getFilterOptions} //Callback function to provide inputs for option-list in Select Dropdown filter pageUpdated={this.pageUpdated} + // storeFilter={true} /> </> :<div>No Workflow Process SU found</div>