diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js index 4e9ecc2754c6a1e564a1f4b9e3666b3831404331..cd0fc07fcd6522caac9336e2c65f9eadf699b9f6 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable.js @@ -60,7 +60,7 @@ function GlobalFilter({ // Define a default UI for filtering function DefaultColumnFilter({ - column: { filterValue, preFilteredRows, setFilter, filteredRows }, + column: { filterValue, preFilteredRows, setFilter, filteredRows, fetchData }, }) { const [value, setValue] = useState(''); React.useEffect(() => { @@ -70,7 +70,7 @@ function DefaultColumnFilter({ }, [filterValue, value]); return ( <> - <div className="table-filter" onClick={e => { e.stopPropagation() }}> + <div className="table-filter" onClick={e => { e.stopPropagation() }} style={{marginRight: '5px'}}> <input value={value} //***TO REMOVE - INCOMING CHANGE WAS value={filterValue || ''} onChange={e => { @@ -79,12 +79,11 @@ function DefaultColumnFilter({ }} /> {value && <i onClick={() => { setFilter(undefined); setValue('') }} className="table-reset fa fa-times" />} + {doServersideFilter && <a href="#" title="Search Scheduling Unit(s)" onClick={{fetchData}}> + <i className="pi pi-search table-reset" /> + </a>} </div> - - <a href="#" title="Search Scheduling Unit(s)" style={{marginLeft: '3.5em'}} > - <i className="pi pi-search find-object-search-btn" /> - </a> - + </> ) } @@ -752,7 +751,7 @@ function Table(props) { React.useEffect(() => { fetchData({ state }); - }, [sortBy, fetchData, pageIndex, pageSize]); + }, [sortBy, fetchData, pageIndex, pageSize, filterTypes,]); React.useEffect(() => { setHiddenColumns( @@ -1130,6 +1129,7 @@ function ViewTable(props) { //Default Columns defaultdataheader.forEach(header => { const isString = typeof defaultheader[0][header] === 'string'; + const disableSortBy = defaultheader[0][header].disableSortBy; const disableFilter = defaultheader[0][header].disableFilters; const filterFn = (showColumnFilter ? (isString ? DefaultColumnFilter : (filterTypes[defaultheader[0][header].filter] && filterTypes[defaultheader[0][header].filter].fn ? filterTypes[defaultheader[0][header].filter].fn : DefaultColumnFilter)) : ""); const filtertype = (showColumnFilter ? (!isString && filterTypes[defaultheader[0][header].filter] && filterTypes[defaultheader[0][header].filter].type) ? filterTypes[defaultheader[0][header].filter].type : 'fuzzyText' : ""); @@ -1139,6 +1139,7 @@ function ViewTable(props) { accessor: header, filter: filtertype, Filter: filterFn, + disableSortBy: doServersideFilter?typeof disableSortBy !== 'undefined' ? disableSortBy : true:false, disableFilters: doServersideFilter?typeof disableFilter !== 'undefined' ? disableFilter : true:false, //minResizeWidth: 50, //*** TO REMOVE - INCOMING CHANGE */ @@ -1152,6 +1153,7 @@ function ViewTable(props) { //Optional Columns optionaldataheader.forEach(header => { const isString = typeof optionalheader[0][header] === 'string'; + const disableSortBy = optionalheader[0][header].disableSortBy; const disableFilter = optionalheader[0][header].disableFilters; const filterFn = (showColumnFilter ? (isString ? DefaultColumnFilter : (filterTypes[optionalheader[0][header].filter] && filterTypes[optionalheader[0][header].filter].fn ? filterTypes[optionalheader[0][header].filter].fn : DefaultColumnFilter)) : ""); const filtertype = (showColumnFilter ? (!isString && filterTypes[optionalheader[0][header].filter]) ? (filterTypes[optionalheader[0][header].filter].type || filterTypes[optionalheader[0][header].filter]) : 'fuzzyText' : ""); @@ -1161,6 +1163,7 @@ function ViewTable(props) { accessor: header, filter: filtertype, Filter: filterFn, + disableSortBy: doServersideFilter?typeof disableSortBy !== 'undefined' ? disableSortBy : true:false, disableFilters: doServersideFilter?typeof disableFilter !== 'undefined' ? disableFilter : true:false, isVisible: false, Cell: props => <div> {updatedCellvalue(header, props.value, optionalheader[0][header])} </div>, @@ -1211,31 +1214,29 @@ function ViewTable(props) { const [pageCount, setPageCount] = React.useState(0); const [loading, setLoading] = React.useState(false); const [currentPage, setCurrentPage] = React.useState(0); + const fetchData = React.useCallback( ({ state }) => { - setLoading(true) - setCurrentPage(state.pageIndex); - if(props.callBackFunction) { - const promises = [props.callBackFunction(state)]; - Promise.all(promises).then(async responses => { - tbldata = responses[0]; - if (tbldata) { - //const startRow = state.pageSize * state.pageIndex; - //const endRow = startRow + state.pageSize; - //setData(tbldata.slice(startRow, endRow)); - setData(tbldata); - setPageCount(Math.ceil(props.totalPage)); - setLoading(false); - } - }); - } else { - if(tbldata) { - const startRow = state.pageSize * state.pageIndex; - const endRow = startRow + state.pageSize; - setData(tbldata.slice(startRow, endRow)); - setPageCount(Math.ceil(tbldata.length)); - setLoading(false); - } - } + setLoading(true) + setCurrentPage(state.pageIndex); + if(props.callBackFunction) { + const promises = [props.callBackFunction(state)]; + Promise.all(promises).then(async responses => { + tbldata = responses[0]; + if (tbldata) { + setData(tbldata); + setPageCount(Math.ceil(props.totalPage)); + setLoading(false); + } + }); + } else { + if(tbldata) { + const startRow = state.pageSize * state.pageIndex; + const endRow = startRow + state.pageSize; + setData(tbldata.slice(startRow, endRow)); + setPageCount(Math.ceil(tbldata.length)); + setLoading(false); + } + } // We'll even set a delay to simulate a server here }, []); 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 2b56663270cede8c6e55f9fa8689efc1b6d476d8..26083b47c630e81247abdcaf23ec854bc41c1834 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Scheduling/SchedulingUnitList.js @@ -168,7 +168,7 @@ class SchedulingUnitList extends Component{ this.reloadData = this.reloadData.bind(this); this.addTargetColumns = this.addTargetColumns.bind(this); this.fecthTableData = this.fecthTableData.bind(this); - //this.changeScheduleUnitType = this.changeScheduleUnitType.bind(this); + this.changeScheduleUnitType = this.changeScheduleUnitType.bind(this); } /** @@ -261,16 +261,7 @@ class SchedulingUnitList extends Component{ } getAPIFilter(suFilters, columnDef) { - let filterMap ={ - 'AutoField': '', - 'CharFilter':'', - 'DateTimeFilter':'fromdatetime', - 'BooleanFilter':'switch', - 'ModelChoiceFilter':'multiselect', - 'NumberFilter':'slider', - 'PropertyIsoDateTimeFromToRangeFilter':'', - } - + let filterMap = UIConstants.filterMap; let defaultColumsProps = columnDef; const defaultColKeys = Object.keys(columnDef); defaultColKeys.forEach(key => { @@ -290,6 +281,7 @@ class SchedulingUnitList extends Component{ this.columnMap.push(tmpColMap); let filter = suFilters.data.filters[tempKey]; if(filter) { + defaultColumsProps[key]['disableSortBy'] = false; defaultColumsProps[key]['disableFilters'] = false; if(filterMap[filter.type]) { defaultColumsProps[key]['filter'] = filterMap[filter.type]; @@ -660,6 +652,8 @@ class SchedulingUnitList extends Component{ } async changeScheduleUnitType(type) { + this.filterQry = ''; + this.orderBy = ''; await this.setState({suType: type, showSpinner: true, scheduleunit: []}); await this.getSchedulingUnitList(this.state.suType.toLowerCase(),this.filterQry, this.orderBy, this.limit, this.offset); this.setState({showSpinner: false}); @@ -698,7 +692,7 @@ class SchedulingUnitList extends Component{ return( <> <div className="p-select " style={{position: 'relative'}}> - <div className="p-field p-grid"> + <div className="p-field p-grid" style={{position: 'relative', marginLeft: '-11em', top: '0.25em'}}> <label>Select Blueprint/Draft</label> <span className="p-float-label"> <Dropdown inputId="sutype" optionLabel="name" optionValue="name" diff --git a/SAS/TMSS/frontend/tmss_webapp/src/services/schedule.service.js b/SAS/TMSS/frontend/tmss_webapp/src/services/schedule.service.js index a14a6dc1b6ab3fd32a2b8e6fc1404f956ffaf026..3199b3c046a8930d88c97840a87ee7855b463fb1 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/services/schedule.service.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/services/schedule.service.js @@ -53,7 +53,7 @@ const ScheduleService = { api += (orderBy === '')?'':orderBy+'&'; api += 'limit='+limit+'&offset=' api += (filters === '')?offset:0; - response = await axios.get(`/api/scheduling_unit_${type}_extended/?ordering=id&limit=${limit}&offset=${offset}`); + response = await axios.get(api); } catch(error) { console.error('[schedule.services.getSchedulingUnitsExtendedWithFilter]',error); } diff --git a/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js b/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js index cc6a2efc08744512b14c86df9e416d56d8426455..16c35768007379b5620ca36fbfb9666c434d912b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/utils/ui.constants.js @@ -17,7 +17,16 @@ const UIConstants = { CALENDAR_TIME_FORMAT: 'HH:mm:ss', CALENDAR_DEFAULTDATE_FORMAT: 'YYYY-MM-DD', UTC_DATE_TIME_FORMAT: "YYYY-MM-DDTHH:mm:ss", - UTC_DATE_TIME_MS_FORMAT: "YYYY-MM-DDTHH:mm:ss.SSSSS" + UTC_DATE_TIME_MS_FORMAT: "YYYY-MM-DDTHH:mm:ss.SSSSS", + filterMap: { + 'AutoField': '', + 'CharFilter':'', + 'DateTimeFilter':'fromdatetime', + 'BooleanFilter':'switch', + 'ModelChoiceFilter':'multiselect', + 'NumberFilter':'slider', + 'PropertyIsoDateTimeFromToRangeFilter':'', + } } export default UIConstants; \ No newline at end of file