diff --git a/SAS/TMSS/frontend/tmss_webapp/src/App.css b/SAS/TMSS/frontend/tmss_webapp/src/App.css index e9bbdc5521f300f3ada31ccf5b58fe78f61f3a09..aebe7fe792b72bc1262afd023e58f869812342f8 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/App.css +++ b/SAS/TMSS/frontend/tmss_webapp/src/App.css @@ -324,5 +324,9 @@ body > iframe { .tablewrapperext { height:calc(100vh - 148px); } - - +.capitalfirst{ + text-transform: lowercase; +} +.capitalfirst::first-letter{ + text-transform: capitalize; +} diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/MultiSelectfilter.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/MultiSelectfilter.js index 60113ef1c0f446e97a9b41aabacae576c30c87f1..d60899fa2f11da26c0bbca6a5bbd25bd3dca9d5b 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/MultiSelectfilter.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/MultiSelectfilter.js @@ -14,8 +14,6 @@ export function MultiSelectFilter(options, data, key,getoptions,column) { }, [key]); - - // Render a multi-select box return ( <div onClick={e => { e.stopPropagation() }} > diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/SelectFilter.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/SelectFilter.js index d078471957774b467383af3631690d6667dbaa9f..21af355f5154ef1eb35767f53aaa66d1789b650d 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/SelectFilter.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/SelectFilter.js @@ -2,49 +2,50 @@ import { Dropdown } from "primereact/dropdown"; -export function SelectFilter (options,column,data,getoptions,key) { - const isDebugLoggingOn=false - - const tagItemTemplate = (tag,column) => { - let cssclass = column.tagClass.replace("$dynamic$",tag); +export function SelectFilter(options, column, data, getoptions, key) { + const isDebugLoggingOn = false + const tagItemTemplate = (tag, column) => { + let cssclass = column.tagClass.replace("$dynamic$", tag); return <span className={" tag-content " + cssclass}>{tag}</span> }; - const tagValueItemTemplate = (tag,column,props) => { - if (tag) { - let cssclass = column.tagClass.replace("$dynamic$",tag); - return <span className={" tag-content " + cssclass}>{tag}</span> - } - - return <span >{props.placeholder}</span> + const tagValueItemTemplate = (tag, column, props) => { + if (tag) { + let cssclass = column.tagClass.replace("$dynamic$", tag); + return <span className={" tag-content " + cssclass}>{tag}</span> + } + return <span >{props.placeholder}</span> }; - - - let placeholder = column.name + let placeholder = column.name let selectOptions = getoptions(column.name) - if (isDebugLoggingOn) console.log("returned options",selectOptions,options) + if (isDebugLoggingOn) console.log("returned options", selectOptions, options) if (selectOptions == null || selectOptions?.length == 0 && data) { selectOptions = [...new Set( data - .map(item => item[key]) - .filter(item => item != null && item !== undefined) - .filter(item => Array.isArray(item) ? item.length > 0 : true) - .flat() - )]; + .map(item => item[key]) + .filter(item => item != null && item !== undefined) + .filter(item => Array.isArray(item) ? item.length > 0 : true) + .flat() + )]; } let dropDownProps = {} if (column.tagClass) { - dropDownProps.itemTemplate= (option) => { return tagItemTemplate(option,column)} - dropDownProps.valueTemplate= (option,props) => { return tagValueItemTemplate(option,column,props)} + dropDownProps.itemTemplate = (option) => { return tagItemTemplate(option, column) } + dropDownProps.valueTemplate = (option, props) => { return tagValueItemTemplate(option, column, props) } } + if (selectOptions.length > 0 && selectOptions[0].value) { + dropDownProps.optionLabel = "name" + } + + if (column.editable) { dropDownProps.editable = column.editable; } if (isDebugLoggingOn) console.log("select options", selectOptions, data) return ( - <Dropdown {...dropDownProps} value={options.value} options={selectOptions} onChange={(e) => options.filterApplyCallback(e.value)} placeholder={placeholder} className="p-column-filter" showClear /> + <Dropdown {...dropDownProps} value={options.value} options={selectOptions} onChange={(e) => options.filterApplyCallback(e.value)} placeholder={placeholder} className="p-column-filter" showClear /> ); }; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/ViewTableExt.js b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/ViewTableExt.js index 289bd7b898e8922cc06bfcf1f3a95442625fb326..cf52d6341e0ba9820cf7641e328bf55f89d2da35 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/ViewTableExt.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/components/ViewTable/ViewTableExt.js @@ -8,7 +8,7 @@ import { OverlayPanel } from "primereact/overlaypanel"; import { ListBox } from "primereact/listbox"; -export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, columnclassname, columnOrders, defaultSortColumn, showaction, keyaccessor, tablename, allowRowSelection, onRowSelection, toggleBySorting, lsKeySortColumn, pageUpdated, storeFilter, showFilterOption, showActionInNewTab = false, viewInNewWindow = false, actionCallback,lazy,totalRecords ,callBackFunction }) { +export function ViewTableExt({ loading, data, defaultcolumns, optionalcolumns, columnclassname, columnOrders, defaultSortColumn, showaction, keyaccessor, tablename, allowRowSelection, onRowSelection, toggleBySorting, lsKeySortColumn, pageUpdated, storeFilter, showFilterOption, showActionInNewTab = false, viewInNewWindow = false, actionCallback, lazy, totalRecords, callBackFunction }) { const multiSelectRef = useRef(null); const [selectedRows, setSelectedRows] = useState(null); @@ -17,7 +17,6 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co const isDebugLoggingEnabled = false const [filters, setFilters] = useState({}) const [timerFilter, setTimerFilter] = useState(null); - const [dataTotalRecords, setDataTotalRecords] = useState(0) const [lazyState, setLazyState] = useState({ first: 0, rows: 15, @@ -27,11 +26,11 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co }); const tablePrefix = "v2ViewtableExt-" + lsKeySortColumn + "-" const [tableProps, setTableProps] = useState({}) - + const VisibleColums = (defaultColumns, optionalColumns) => { - let storedTableConfigData = localStorage.getItem(tablePrefix + tablename + "/columnconfig"); + let storedTableConfigData = localStorage.getItem("viewtableext-" + tablename + "/columnconfig"); if (!storedTableConfigData) return defaultColumns; if (storedTableConfigData) storedTableConfigData = JSON.parse(storedTableConfigData); @@ -45,60 +44,58 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co visibleColumns.push(matchingColumn) } } + console.log("visibleColumns",visibleColumns) return visibleColumns } - const lazyOnSort =(event)=>{ + const lazyOnSort = (event) => { setLazyState(event); - console.log("lazyOnSort",event) + console.log("lazyOnSort", event) } - const lazyOnFilter =(event)=>{ + const lazyOnFilter = (event) => { clearTimeout(timerFilter); - // setFilters(event.filters) + setFilters(event.filters) setLazyState(event); setTimerFilter(setTimeout(() => { - console.log("lazyOnFilter Execute Callback",event) + console.log("lazyOnFilter Execute Callback", event) if (callBackFunction) callBackFunction(event) }, 500)); } - - - const lazyOnPage =(event)=>{ + + + const lazyOnPage = (event) => { setLazyState(event); if (callBackFunction) callBackFunction(event) - console.log("lazyOnPage",event) + console.log("lazyOnPage", event) } useEffect(() => { - + if (lazy) { - let additionalTableProps = {} - additionalTableProps.onSort=(value) => { lazyOnSort(value) } - additionalTableProps.sortOrder=lazyState.sortOrder - additionalTableProps.onFilter= (value) => {lazyOnFilter(value)} - additionalTableProps.onPage=(value) => {lazyOnPage(value)} - additionalTableProps.first=lazyState.first - additionalTableProps.sortField=lazyState.sortField - additionalTableProps.sortOrder=lazyState.sortOrder - additionalTableProps.lazy=true - additionalTableProps.rows=lazyState.rows - additionalTableProps.first=lazyState.first - setTableProps(additionalTableProps) - console.log("setting Lazy Props! ->"+ totalRecords,additionalTableProps) + let additionalTableProps = {} + additionalTableProps.onSort = (value) => { lazyOnSort(value) } + additionalTableProps.sortOrder = lazyState.sortOrder + additionalTableProps.onFilter = (value) => { lazyOnFilter(value) } + additionalTableProps.onPage = (value) => { lazyOnPage(value) } + additionalTableProps.first = lazyState.first + additionalTableProps.sortField = lazyState.sortField + additionalTableProps.sortOrder = lazyState.sortOrder + additionalTableProps.lazy = true + additionalTableProps.rows = lazyState.rows + additionalTableProps.first = lazyState.first + setTableProps(additionalTableProps) + console.log("setting Lazy Props! ->" + totalRecords, additionalTableProps) } - },[lazyState ]); + }, [lazyState]); - useEffect(() => { - console.log("Updating Total Records", totalRecords) - setDataTotalRecords({...totalRecords}); - }, [totalRecords]); useEffect(() => { + console.log("ViewTable loadinks") const storedTableConfigData = localStorage.getItem(tablePrefix + tablename); let tableConfigData = null if (storedTableConfigData) { @@ -116,18 +113,16 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co setVisibleColumns([...SelectColumns, ...actionColumns, ...allvisiblecolums]); setSelectableColumns([...defaultColumns, ...optionalColumns]) let combinedfilters = { ...filters, ...selectableFilters } - console.log("combinedfilters",combinedfilters) + console.log("combinedfilters", combinedfilters) setFilters(combinedfilters); + if (lazy &&callBackFunction ) { callBackFunction({ filters:combinedfilters,rows:storedTableConfigData.rows || 25, first:0}) } -// if (lazy) { lazyOnFilter(filters) } - - }, []); - const SelectorColumn =()=> { + const SelectorColumn = () => { return (<Column key="rowselector" id="rowselector" @@ -195,26 +190,28 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co const GetColumns = (newColumns, tableConfigData) => { - let Columns =[] - let filters ={}; + let Columns = [] + let filters = {}; - if (!newColumns) { return { Columns, filters }}; + if (!newColumns) { return { Columns, filters } }; - Columns = Object.entries(newColumns).map(([key, column]) => { + Columns = Object.entries(newColumns).map(([key, column]) => { const field = key; const header = column?.name || column; let { filterHeader, filter } = getFilterHeader(key, column, showFilterOption, data); let xvalue = tableConfigData?.filters?.[key]?.value + + if (column?.defaultvalue && !xvalue) { + xvalue = column?.defaultvalue + } let assembledFilter = generateFilter(key, filter, xvalue) filters[key] = assembledFilter; - let hasFilter=!lazy - if (column.filter ||column.disableFilters===false) { - hasFilter=true - } + let hasFilter = !lazy + if (column.filter || column.disableFilters === false) { hasFilter = true } - let hasSort = !lazy || column.disableSortBy===false + let hasSort = !lazy || column.disableSortBy === false const columnProps = { key: key, field: field, @@ -228,9 +225,9 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co if (column.showTag) { columnProps.body = (rowData) => TagBodyTemplate(rowData[key], column) } - if (filterHeader) { - columnProps.filterElement = filterHeader; - } + if (filterHeader) { columnProps.filterElement = filterHeader; } + if (column.className) { columnProps.bodyClassName = column.className; } + // legacy support let className = columnclassname[0]?.[header] || undefined if (className) { /* Temporary until migration */ @@ -281,16 +278,16 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co onClick={(e) => multiSelectRef.current.toggle(e)} icon={"pi pi-wrench"}> </Button> <OverlayPanel ref={multiSelectRef} > - <ListBox multiple value={visibleColumns} options={selectableColumns} optionLabel="props.header" onChange={onColumnToggle} className="w-full sm:w-20rem" display="chip" itemTemplate={listBoxitemTemplate} listStyle={{ maxHeight: '550px' }} /> + <ListBox multiple value={visibleColumns} options={selectableColumns} optionLabel="props.header" onChange={onColumnToggle} className="w-full sm:w-20rem" display="chip" itemTemplate={listBoxitemTemplate} listStyle={{ maxHeight: '550px' }} /> </OverlayPanel> </> return <DataTable - {...tableProps} + {...tableProps} value={data} - + totalRecords={totalRecords} data-testid="viewtable" selection={selectedRows} @@ -301,14 +298,14 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co } } - stateKey={tablePrefix + tablename} + stateKey={tablePrefix + tablename} stateStorage="local" alwaysShowPaginator={true} scrollHeight="flex" size="small" filterDisplay="row" showGridlines - paginator + paginator loading={loading} filters={filters} header={header} @@ -320,9 +317,10 @@ export function ViewTableExt({ loading,data, defaultcolumns, optionalcolumns, co resizableColumns columnResizeMode="expand" tableStyle={{ minWidth: '60rem' }} - rowsPerPageOptions={[2,5, 10, 15,25, 50, 100]} - - + rowsPerPageOptions={[2, 5, 10, 15, 25, 50, 100]} + paginatorTemplate="RowsPerPageDropdown FirstPageLink PrevPageLink PageLinks CurrentPageReport NextPageLink LastPageLink" + currentPageReportTemplate=" ({first} to {last} of {totalRecords})" + > {visibleColumns} 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 1dd1aea73a7bf4650d08f70959a1355346f99454..dfe1f79f7a8fa2e494fd318b9d07085abb887105 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 @@ -2,15 +2,12 @@ import PropTypes from 'prop-types'; import { useEffect, useState } from 'react'; import _ from 'lodash'; import moment from 'moment'; -import { TriStateCheckbox } from 'primereact/tristatecheckbox'; import PageHeader from '../../layout/components/PageHeader'; import WorkflowService from '../../services/workflow.service'; import ScheduleService from '../../services/schedule.service'; import UIConstants from '../../utils/ui.constants'; -import UtilService from '../../services/util.service'; import AuthUtil from '../../utils/auth.util'; import AccessDenied from '../../layout/components/AccessDenied'; -import { Dropdown } from 'primereact/dropdown'; import ProjectService from '../../services/project.service'; import { ViewTableExt } from '../../components/ViewTable/ViewTableExt'; import { useParsedDataWebSocket } from '../../utils/websocket'; @@ -19,36 +16,18 @@ import Auth from '../../authenticate/auth'; export function WorkflowList(props) { - const [workflowUIAttr, setWorkflowUIAttr] = useState(UtilService.localStore({ type: 'get', key: 'WORKFLOW_UI_ATTR' }) || {}); - const [userrole, setUserrole] = useState(); const [projectCache, setProjectCache] = useState({}); - const [ftAssignstatus, setFtAssignstatus] = useState('All'); - const [activeWorkflow, setActiveWorkflow] = useState(null); - const [columnMap, setColumnMap] = useState([]); const [tmpDefaulcolumns, setTmpDefaulcolumns] = useState(); - - - - const [showActiveStage, setShowActiveStage] = useState(); - - const [filteredWorkflowProcessList, setFilteredWorkflowProcessList] = useState(); - - - const [isLoading, setIsLoading] = useState(true) const [tablestate, setTablestate] = useState() const [loadingStatus, setLoadingStatus] = useState(true) - - - const [workflowList, setWorkflowList] = useState([]); const [schedulingUnitList, setSchedulingUnitList] = useState([]); - const [totalRecords, setTotalRecords] = useState(0); const [projectCategories, setProjectCategories] = useState(); - + const isDebugLoggingOn = false const columnOrders = [ @@ -67,13 +46,19 @@ export function WorkflowList(props) { disableFilters: false }, su: { - name: "Scheduling Unit ID", + name: "Scheduling Unit ID", }, status: { + name: "Workflow status", + filter: "multiselect-filter", + defaultvalue: ["NEW", "ASSIGNED"], + className: "capitalfirst" + }, + scheduling_unit_status: { name: "Scheduling Unit Status", showTag: true, - filter: "select" , + filter: "select", tagClass: 'su-$dynamic$' //$dynamic$ will be replace with cell value }, project: { @@ -81,10 +66,12 @@ export function WorkflowList(props) { }, project_category_value: { name: "Project Category", - filter: "select" + filter: "select" }, owner_username: { - name: "Assigned To" + name: "Assigned to", + filter: "select", + editable: true }, lastTaskName: { name: "Current Workflow Stage", @@ -101,7 +88,7 @@ export function WorkflowList(props) { }; const optionalcolumns = [{ - }]; + }]; const columnclassname = [{ "Scheduling Unit ID": "filter-input-50", @@ -114,9 +101,6 @@ export function WorkflowList(props) { let filterQry = ''; let orderBy = ''; - - - let workflowTasksList = []; @@ -131,11 +115,8 @@ export function WorkflowList(props) { 'decide unpin data': 'Unpin Data', 'end': 'Done' }; - const filterslist = [{ 'name': 'All', 'code': 'All' }, { 'name': 'Assigned to me', 'code': 'Assigned to me' }, { 'name': 'Participated', 'code': 'Participated' }, { 'name': 'Participated and Unassigned', 'code': 'Participated and Unassigned' }, { 'name': 'Unassigned', 'code': 'Unassigned' }]; - - const notActiveStages = ['done', 'waiting to be scheduled', 'scheduled']; useEffect(() => { @@ -143,26 +124,12 @@ export function WorkflowList(props) { }, []); const init = async () => { - const projectcategoryList = await ProjectService.getProjectCategories(); + const projectcategoryList = await ProjectService.getProjectCategories(); setProjectCategories(projectcategoryList) const permission = await AuthUtil.getUserPermissionByModule('project'); await getFilterColumns(); setUserrole(permission) - filterTableData(); - - } - - - - - const storeUIAttr = (key, value) => { - setWorkflowUIAttr[key] = value - } - useEffect(() => { - UtilService.localStore({ type: 'set', key: 'WORKFLOW_UI_ATTR', value: workflowUIAttr }) - }, [workflowUIAttr]); - const LookupCategoryForProject = async (ProjectName) => { @@ -182,12 +149,7 @@ export function WorkflowList(props) { const prepareWorkflowTasklist = async (filterQry, orderBy, limit, offset, projectCategoryFilter, schedulingunitId) => { let projectList = [] let doubleFilterdworkflowList = []; - if (ftAssignstatus === "Participated and Unassigned") { - filterQry += '&status=NEW&' - } - else { - filterQry += '&status=NEW&status=ASSIGNED&' - } + let response response = await WorkflowService.getActiveWorkflowTasksWithFilter(filterQry, orderBy, limit, offset); @@ -226,7 +188,7 @@ export function WorkflowList(props) { workflowTask['suName'] = schedulingUnit.name; workflowTask['su'] = workflowProcess.su; workflowTask['project'] = schedulingUnit.draft.scheduling_set.project_id; - workflowTask['status'] = schedulingUnit.status; + workflowTask['scheduling_unit_status'] = schedulingUnit.status; workflowTask['created'] = moment(workflowTask['created']).format(UIConstants.UTC_DATE_TIME_FORMAT); workflowTask['lastTaskName'] = redirectionMap[workflowTask.flow_task.toLowerCase()]; workflowTask['owner'] = workflowTask.owner ? workflowTask.owner : ''; @@ -265,10 +227,6 @@ export function WorkflowList(props) { } - setWorkflowUIAttr(UtilService.localStore({ type: 'get', key: 'WORKFLOW_UI_ATTR' })); - setFtAssignstatus(workflowUIAttr.ftAssignstatus || 'All') - setActiveWorkflow(workflowUIAttr.activeWorkflow || activeWorkflow); - setShowActiveStage(workflowUIAttr.showActiveStage); if (isDebugLoggingOn) console.log("Setting WorkFlowLijst", doubleFilterdworkflowList) setWorkflowList(doubleFilterdworkflowList) setIsLoading(false) @@ -283,17 +241,22 @@ export function WorkflowList(props) { */ const getFilterOptions = (id) => { if (isDebugLoggingOn) console.log("getFilterOptions", id) - let options = null; - + let options = []; switch (id) { case 'Current Workflow Stage': - return UIConstants.CURRENT_WORKFLOW_STAGE.map( stage => { return { name: stage, value: stage } }); + return UIConstants.CURRENT_WORKFLOW_STAGE.map(stage => { return { name: stage, value: stage } }); case 'Scheduling Unit Status': return UIConstants.SU_STATUS.map(status => { return status }); case 'Project Category': - return projectCategories.map(item => item.value); + return projectCategories.map(item => { return { name: item.value, value: item.value } }); + case 'Workflow status': + return [{ name: "New", value: "NEW" }, { name: "Done", value: "DONE" }, { name: "Assigned", value: "ASSIGNED" }]; + case 'Assigned to': + options[0] = { name: "Assigned to me", value: "Assigned to me" }; + options[1] = { name: "Unassigned", value: "Unassigned" }; + return options default: - console.log(" Missing Option for" +id) + console.log("Missing Option for " + id) } return options; @@ -304,14 +267,13 @@ export function WorkflowList(props) { */ const getFilterColumns = async () => { + let currenttmpDefaulColumns = _.cloneDeep(defaultcolumns); currenttmpDefaulColumns = getAPIFilter(currenttmpDefaulColumns); setTmpDefaulcolumns(currenttmpDefaulColumns) } - // SU_STATUS: ['cancelled', 'error', 'defining', 'defined', 'schedulable', 'scheduled', 'started', 'observing', 'observed', 'processing', 'processed', 'ingesting', 'finished', 'unschedulable'], - /** * To set filterable columns from the API options. But currently it is manually set. Later it needs to be set from API options * @param {Object} columnDef - Column definitions with original and display names @@ -341,86 +303,11 @@ export function WorkflowList(props) { return columnDef; } - /** - * Filter the table data with drop down selected - * @param {String} value - Drop Down filter value - */ - const assignStatusChangeEvent = (value) => { - storeUIAttr('ftAssignstatus', value) - setFtAssignstatus(value) - filterTableData(value) - } - - /** - * Filter the table data with checkbox value, it will fetch active workflow stagerows if the checkbox selected - * @param {Boolena} value - */ - const setWorkflowActiveState = (value) => { - let newShowActiveStage = ''; - if (value === null) { - newShowActiveStage = 'Show Active Workflow Process'; - } else if (value === true) { - newShowActiveStage = 'Show Inactive Workflow Process'; - } else { - newShowActiveStage = 'Show All Workflow Process'; - } - setActiveWorkflow(value) - setShowActiveStage(newShowActiveStage) - storeUIAttr('activeWorkflow', value) - storeUIAttr('showActiveStage', newShowActiveStage) - } /** * Filter table data if any changes in filter Dropdown or Checkbox. */ - const filterTableData = async (assignStatus) => { - let workflowList = []; - let filters = UtilService.localStore({ type: 'get', key: "workflow_process_list" }); - if (!assignStatus) - { - assignStatus = UtilService.localStore({ type: 'get', key: "WORKFLOW_UI_ATTR" }).ftAssignstatus; - } - // Get current user details - let userDetails = Auth.getUser(); - // Remove all owner filters and add only the required one - const ownerFilters = ['ownerIsNull', 'participated', 'Assigned To']; - filters = _.filter(filters, filter => { return ownerFilters.indexOf(filter.id) < 0 }); - console.log("assignStatus", assignStatus) - - if (assignStatus === 'Assigned to me') { - filters.push({ id: 'Assigned To', value: userDetails.name }); - } else if (assignStatus === "Unassigned") { - filters.push({ id: 'ownerIsNull', value: true }); - } else if (assignStatus === "Participated" || assignStatus === "Participated and Unassigned") { - let processList = []; - let taskParticipated = await WorkflowService.getActiveWorkflowTasksWithFilter('owner_username=' + userDetails.name); - processList = _.union(processList, _.map(taskParticipated.data.results, 'process')); - filters.push({ id: 'participated', value: processList }); - } else if (!filters) { - filters = []; - } - - console.log("additional filters",filters) - UtilService.localStore({ type: 'set', key: 'workflow_process_list', value: filters }); - await fetchTableData({ row: 25, first: 0 }); - - for (const workflow of workflowList) { - let ftAssigned = true; - let activestage = false; - if (activeWorkflow === null) { - activestage = true; - } else if (activeWorkflow === true) { - activestage = _.includes(notActiveStages, workflow.lastTaskName.toLowerCase()) ? false : true; - } else if (activeWorkflow === false) { - activestage = _.includes(notActiveStages, workflow.lastTaskName.toLowerCase()) ? true : false; - } - if (ftAssigned && activestage) { - workflowList.push(workflow); - } - } - setFilteredWorkflowProcessList(workflowList); - } @@ -444,7 +331,6 @@ export function WorkflowList(props) { for (const filter of filters) { let filterid = filter[0] let filtervalue = filter[1] - console.log("filter:" + filterid, filtervalue) if (!filtervalue.value) continue; let qryString = []; switch (filterid) { @@ -456,49 +342,55 @@ export function WorkflowList(props) { } } } - filterQry = AddQuery(filterQry,"flow_task",qryString.join(",").replaceAll(" ","_")) + filterQry = AddQuery(filterQry, "flow_task", qryString.join(",").replaceAll(" ", "_")) break; case "suName": - filterQry = AddQuery(filterQry,"scheduling_unit_name",filtervalue.value); + filterQry = AddQuery(filterQry, "scheduling_unit_name", filtervalue.value); break; case "project_category_value": ProjectCategoryFilter = filtervalue.value; break; case "project": - filterQry = AddQuery(filterQry,"project_name", filtervalue.value); + filterQry = AddQuery(filterQry, "project_name", filtervalue.value); break; case "status": - - filterQry = AddQuery(filterQry,"scheduling_unit_status",filtervalue.value); + for (const value of filtervalue.value) { + filterQry = AddQuery(filterQry, "status", value); + } + break; + case "scheduling_unit_status": + filterQry = AddQuery(filterQry, "scheduling_unit_status", filtervalue.value); break; case "su": - if (filtervalue) { - filterQry = AddQuery(filterQry,"scheduling_unit_id",filtervalue.value); - } + filterQry = AddQuery(filterQry, "scheduling_unit_id", filtervalue.value); su = filtervalue.value break; case 'owner_username': - if (filtervalue) { - filterQry = AddQuery(filterQry,"owner_username",filtervalue.value); + if (filtervalue.value == "Assigned to me") { + filterQry = AddQuery(filterQry, "owner_username", Auth.getUser().name); + } else if (filtervalue.value == "Unassigned") { + filterQry = AddQuery(filterQry, "ownerIsNull", true); + } else { + filterQry = AddQuery(filterQry, "owner_username", filtervalue.value); } break; case 'created': console.log("Updated at filter value", filtervalue) if (filtervalue.value[0] && filtervalue.value[0] !== '') { - filterQry = AddQuery(filterQry,'created_after=', moment(new Date(filtervalue.value[0])).format("YYYY-MM-DD HH:mm:ss&")); + filterQry = AddQuery(filterQry, 'created_after', moment(new Date(filtervalue.value[0])).format("YYYY-MM-DD HH:mm:ss&")); } if (filtervalue.value[1] && filtervalue.value[1] !== '') { - filterQry = AddQuery (filterQry,'created_before=', moment(new Date(filtervalue.value[1])).format("YYYY-MM-DD HH:mm:ss&")); + filterQry = AddQuery(filterQry, 'created_before', moment(new Date(filtervalue.value[1])).format("YYYY-MM-DD HH:mm:ss&")); } break; case 'ownerIsNull': - filterQry = AddQuery(filterQry,"owner_isnull=", filtervalue.value); + filterQry = AddQuery(filterQry, "owner_isnull", filtervalue.value); break; case 'participated': if (filtervalue.value) { for (const process of filter.value) { - filterQry = AddQuery(filterQry,"process=", process); + filterQry = AddQuery(filterQry, "process=", process); } } break; @@ -547,36 +439,7 @@ export function WorkflowList(props) { <> <PageHeader className="defaultpageHeader" location={props.location} title={'Workflow - List'} actions={[]} /> - <div style={{ marginTop: '15px' }}> - <div className="p-select " style={{ position: 'relative', marginLeft: '27em', marginTop: '-2em' }}> - <div className="p-field p-grid workflow-wrap"> - <div className="col-lg-4 col-md-3 col-sm-12 ms-height"> - <span className="p-float-label" style={{ display: "flex" }}> - <div className="label" style={{ minWidth: '120px', paddingTop: "4px" }}>Show Workflow </div> - <div> - <Dropdown inputId="workflowoverview" id="workflowoverview" optionLabel="name" optionValue="code" filter={true} - tooltip="Show workflows those are 'Assigned to me' / 'Unassigned'/ 'I Participated'" - value={ftAssignstatus} - options={filterslist} - onChange={(e) => { assignStatusChangeEvent(e.value) }} - style={{ width: '20em', height: "33px", lineHeight: 0 }} - ></Dropdown> - </div> - </span> - </div> - <div style={{ marginLeft: "225px" }}> - <label htmlFor="cb1" className="p-checkbox-label">Active</label> - <TriStateCheckbox - onChange={(e) => { setWorkflowActiveState(e.value) }} - value={true} - disabled={true} - style={{ marginLeft: '5px', marginTop: '5px' }} - tooltip={showActiveStage} - ></TriStateCheckbox> - </div> - </div> - </div> - <div style={{ height: "calc(100vh - 180px)", position: 'relative', top: "30px" }}> + <div style={{ height: "calc(100vh - 120px)"}}> <ViewTableExt lazy={true} data={workflowList} @@ -598,7 +461,7 @@ export function WorkflowList(props) { showTopTotal={true} /> </div> - </div> + </> : <AccessDenied />} </> );