From 9637f4e8f786017e5a93fb24bd9ec3ae8707cd0d Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Thu, 29 Dec 2022 13:30:07 -0500 Subject: [PATCH] refactoring --- .../workOrders-post/doSearchWorkOrders.js | 1 + .../workOrders-post/doSearchWorkOrders.ts | 1 + public-typescript/workOrderSearch.js | 316 ++++++++-------- public-typescript/workOrderSearch.ts | 358 +++++++++--------- public/javascripts/workOrderSearch.min.js | 2 +- 5 files changed, 340 insertions(+), 338 deletions(-) diff --git a/handlers/workOrders-post/doSearchWorkOrders.js b/handlers/workOrders-post/doSearchWorkOrders.js index 710c3963..ece6d706 100644 --- a/handlers/workOrders-post/doSearchWorkOrders.js +++ b/handlers/workOrders-post/doSearchWorkOrders.js @@ -7,6 +7,7 @@ export const handler = async (request, response) => { }); response.json({ count: result.count, + offset: Number.parseInt(request.body.offset, 10), workOrders: result.workOrders }); }; diff --git a/handlers/workOrders-post/doSearchWorkOrders.ts b/handlers/workOrders-post/doSearchWorkOrders.ts index 721b13b2..024e1f9a 100644 --- a/handlers/workOrders-post/doSearchWorkOrders.ts +++ b/handlers/workOrders-post/doSearchWorkOrders.ts @@ -11,6 +11,7 @@ export const handler: RequestHandler = async (request, response) => { response.json({ count: result.count, + offset: Number.parseInt(request.body.offset, 10), workOrders: result.workOrders }); }; diff --git a/public-typescript/workOrderSearch.js b/public-typescript/workOrderSearch.js index a14039ce..7426f955 100644 --- a/public-typescript/workOrderSearch.js +++ b/public-typescript/workOrderSearch.js @@ -9,175 +9,175 @@ Object.defineProperty(exports, "__esModule", { value: true }); const searchResultsContainerElement = document.querySelector("#container--searchResults"); const limit = Number.parseInt(document.querySelector("#searchFilter--limit").value, 10); const offsetElement = document.querySelector("#searchFilter--offset"); - const getWorkOrders = () => { - const offset = Number.parseInt(offsetElement.value, 10); + function renderWorkOrders(responseJSON) { + if (responseJSON.workOrders.length === 0) { + searchResultsContainerElement.innerHTML = + '
' + + '

There are no work orders that meet the search criteria.

' + + "
"; + return; + } + const resultsTbodyElement = document.createElement("tbody"); + for (const workOrder of responseJSON.workOrders) { + let relatedHTML = ""; + for (const lot of workOrder.workOrderLots) { + relatedHTML += + '' + + ' ' + + cityssm.escapeHTML(lot.lotName || "(No Lot Name)") + + "
"; + } + for (const occupancy of workOrder.workOrderLotOccupancies) { + for (const occupant of occupancy.lotOccupancyOccupants) { + relatedHTML += + '' + + ' ' + + cityssm.escapeHTML(occupant.occupantName || "(No Name)") + + "
"; + } + } + resultsTbodyElement.insertAdjacentHTML("beforeend", "" + + ("" + + '' + + (workOrder.workOrderNumber.trim() + ? cityssm.escapeHTML(workOrder.workOrderNumber || "") + : "(No Number)") + + "" + + "") + + ("" + + cityssm.escapeHTML(workOrder.workOrderType || "") + + "
" + + '' + + cityssm.escapeHTML(workOrder.workOrderDescription || "") + + "" + + "") + + ('' + + relatedHTML + + "") + + ('' + + ('' + + ' ' + + workOrder.workOrderOpenDateString + + "
") + + ('' + + ' ' + + (workOrder.workOrderCloseDate + ? workOrder.workOrderCloseDateString + : '(No ' + + cityssm.escapeHTML(exports.aliases.workOrderCloseDate) + + ")") + + "") + + "") + + ("" + + (workOrder.workOrderMilestoneCount === 0 + ? "-" + : workOrder.workOrderMilestoneCompletionCount + + " / " + + workOrder.workOrderMilestoneCount) + + "") + + (workOrderPrints.length > 0 + ? "" + + '' + + '' + + "" + + "" + : "") + + ""); + } + searchResultsContainerElement.innerHTML = + '' + + "" + + "" + + "" + + "" + + "" + + '' + + (workOrderPrints.length > 0 ? '' : "") + + "" + + "
Work Order NumberDescriptionRelatedDateProgress
" + + '
' + + ('
' + + '
' + + "Displaying " + + (responseJSON.offset + 1).toString() + + " to " + + Math.min(responseJSON.count, limit + responseJSON.offset) + + " of " + + responseJSON.count + + "
" + + "
") + + ('
' + + (responseJSON.offset > 0 + ? '
' + + '" + + "
" + : "") + + (limit + responseJSON.offset < responseJSON.count + ? '
' + + '" + + "
" + : "") + + "
") + + "
"; + searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); + if (responseJSON.offset > 0) { + searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetWorkOrders); + } + if (limit + responseJSON.offset < responseJSON.count) { + searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetWorkOrders); + } + } + function getWorkOrders() { searchResultsContainerElement.innerHTML = '
' + '
' + "Loading Work Orders..." + "
"; - cityssm.postJSON(los.urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, (responseJSON) => { - if (responseJSON.workOrders.length === 0) { - searchResultsContainerElement.innerHTML = - '
' + - '

There are no work orders that meet the search criteria.

' + - "
"; - return; - } - const resultsTbodyElement = document.createElement("tbody"); - for (const workOrder of responseJSON.workOrders) { - let relatedHTML = ""; - for (const lot of workOrder.workOrderLots) { - relatedHTML += - '' + - ' ' + - cityssm.escapeHTML(lot.lotName || "(No Lot Name)") + - "
"; - } - for (const occupancy of workOrder.workOrderLotOccupancies) { - for (const occupant of occupancy.lotOccupancyOccupants) { - relatedHTML += - '' + - ' ' + - cityssm.escapeHTML(occupant.occupantName || "(No Name)") + - "
"; - } - } - resultsTbodyElement.insertAdjacentHTML("beforeend", "" + - ("") + - ("") + - ('") + - ('") + - ("") + - (workOrderPrints.length > 0 - ? "" - : "") + - ""); - } - searchResultsContainerElement.innerHTML = - '
" + - '' + - (workOrder.workOrderNumber.trim() - ? cityssm.escapeHTML(workOrder.workOrderNumber || "") - : "(No Number)") + - "" + - "" + - cityssm.escapeHTML(workOrder.workOrderType || "") + - "
" + - '' + - cityssm.escapeHTML(workOrder.workOrderDescription || "") + - "" + - "
' + - relatedHTML + - "' + - ('' + - ' ' + - workOrder.workOrderOpenDateString + - "
") + - ('' + - ' ' + - (workOrder.workOrderCloseDate - ? workOrder.workOrderCloseDateString - : '(No ' + - cityssm.escapeHTML(exports.aliases.workOrderCloseDate) + - ")") + - "") + - "
" + - (workOrder.workOrderMilestoneCount === 0 - ? "-" - : workOrder.workOrderMilestoneCompletionCount + - " / " + - workOrder.workOrderMilestoneCount) + - "" + - '' + - '' + - "" + - "
' + - "" + - "" + - "" + - "" + - "" + - '' + - (workOrderPrints.length > 0 ? '' : "") + - "" + - "
Work Order NumberDescriptionRelatedDateProgress
" + - '
' + - ('
' + - '
' + - "Displaying " + - (offset + 1).toString() + - " to " + - Math.min(responseJSON.count, limit + offset) + - " of " + - responseJSON.count + - "
" + - "
") + - ('
' + - (offset > 0 - ? '
' + - '" + - "
" - : "") + - (limit + offset < responseJSON.count - ? '
' + - '" + - "
" - : "") + - "
") + - "
"; - searchResultsContainerElement.querySelector("table").append(resultsTbodyElement); - if (offset > 0) { - searchResultsContainerElement.querySelector("button[data-page='previous']").addEventListener("click", previousAndGetWorkOrders); - } - if (limit + offset < responseJSON.count) { - searchResultsContainerElement.querySelector("button[data-page='next']").addEventListener("click", nextAndGetWorkOrders); - } - }); - }; - const resetOffsetAndGetWorkOrders = () => { + cityssm.postJSON(los.urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, renderWorkOrders); + } + function resetOffsetAndGetWorkOrders() { offsetElement.value = "0"; getWorkOrders(); - }; - const previousAndGetWorkOrders = () => { + } + function previousAndGetWorkOrders() { offsetElement.value = Math.max(Number.parseInt(offsetElement.value, 10) - limit, 0).toString(); getWorkOrders(); - }; - const nextAndGetWorkOrders = () => { + } + function nextAndGetWorkOrders() { offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString(); getWorkOrders(); - }; + } const filterElements = searchFilterFormElement.querySelectorAll("input, select"); for (const filterElement of filterElements) { filterElement.addEventListener("change", resetOffsetAndGetWorkOrders); diff --git a/public-typescript/workOrderSearch.ts b/public-typescript/workOrderSearch.ts index e5747d4c..c9b7ef16 100644 --- a/public-typescript/workOrderSearch.ts +++ b/public-typescript/workOrderSearch.ts @@ -28,9 +28,178 @@ declare const cityssm: cityssmGlobal; const offsetElement = document.querySelector("#searchFilter--offset") as HTMLInputElement; - const getWorkOrders = () => { - const offset = Number.parseInt(offsetElement.value, 10); + function renderWorkOrders(responseJSON: { count: number; offset: number; workOrders: recordTypes.WorkOrder[]; }) { + if (responseJSON.workOrders.length === 0) { + searchResultsContainerElement.innerHTML = + '
' + + '

There are no work orders that meet the search criteria.

' + + "
"; + return; + } + + const resultsTbodyElement = document.createElement("tbody"); + + for (const workOrder of responseJSON.workOrders) { + let relatedHTML = ""; + + for (const lot of workOrder.workOrderLots!) { + relatedHTML += + '' + + ' ' + + cityssm.escapeHTML(lot.lotName || "(No Lot Name)") + + "
"; + } + + for (const occupancy of workOrder.workOrderLotOccupancies!) { + for (const occupant of occupancy.lotOccupancyOccupants!) { + relatedHTML += + '' + + ' ' + + cityssm.escapeHTML(occupant.occupantName || "(No Name)") + + "
"; + } + } + + resultsTbodyElement.insertAdjacentHTML( + "beforeend", + "" + + ("") + + ("") + + ('") + + ('") + + ("") + + (workOrderPrints.length > 0 + ? "" + : "") + + "" + ); + } + + searchResultsContainerElement.innerHTML = + '
" + + '' + + (workOrder.workOrderNumber!.trim() + ? cityssm.escapeHTML(workOrder.workOrderNumber || "") + : "(No Number)") + + "" + + "" + + cityssm.escapeHTML(workOrder.workOrderType || "") + + "
" + + '' + + cityssm.escapeHTML(workOrder.workOrderDescription || "") + + "" + + "
' + + relatedHTML + + "' + + ('' + + ' ' + + workOrder.workOrderOpenDateString + + "
") + + ('' + + ' ' + + (workOrder.workOrderCloseDate + ? workOrder.workOrderCloseDateString + : '(No ' + + cityssm.escapeHTML(exports.aliases.workOrderCloseDate) + + ")") + + "") + + "
" + + (workOrder.workOrderMilestoneCount === 0 + ? "-" + : workOrder.workOrderMilestoneCompletionCount + + " / " + + workOrder.workOrderMilestoneCount) + + "" + + '' + + '' + + "" + + "
' + + "" + + "" + + "" + + "" + + "" + + '' + + (workOrderPrints.length > 0 ? '' : "") + + "" + + "
Work Order NumberDescriptionRelatedDateProgress
" + + '
' + + ('
' + + '
' + + "Displaying " + + (responseJSON.offset + 1).toString() + + " to " + + Math.min(responseJSON.count, limit + responseJSON.offset) + + " of " + + responseJSON.count + + "
" + + "
") + + ('
' + + (responseJSON.offset > 0 + ? '
' + + '" + + "
" + : "") + + (limit + responseJSON.offset < responseJSON.count + ? '
' + + '" + + "
" + : "") + + "
") + + "
"; + + searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement); + + if (responseJSON.offset > 0) { + ( + searchResultsContainerElement.querySelector( + "button[data-page='previous']" + ) as HTMLButtonElement + ).addEventListener("click", previousAndGetWorkOrders); + } + + if (limit + responseJSON.offset < responseJSON.count) { + ( + searchResultsContainerElement.querySelector( + "button[data-page='next']" + ) as HTMLButtonElement + ).addEventListener("click", nextAndGetWorkOrders); + } + } + + function getWorkOrders() { searchResultsContainerElement.innerHTML = '
' + '
' + @@ -40,196 +209,27 @@ declare const cityssm: cityssmGlobal; cityssm.postJSON( los.urlPrefix + "/workOrders/doSearchWorkOrders", searchFilterFormElement, - (responseJSON: { count: number; workOrders: recordTypes.WorkOrder[] }) => { - if (responseJSON.workOrders.length === 0) { - searchResultsContainerElement.innerHTML = - '
' + - '

There are no work orders that meet the search criteria.

' + - "
"; - - return; - } - - const resultsTbodyElement = document.createElement("tbody"); - - for (const workOrder of responseJSON.workOrders) { - let relatedHTML = ""; - - for (const lot of workOrder.workOrderLots!) { - relatedHTML += - '' + - ' ' + - cityssm.escapeHTML(lot.lotName || "(No Lot Name)") + - "
"; - } - - for (const occupancy of workOrder.workOrderLotOccupancies!) { - for (const occupant of occupancy.lotOccupancyOccupants!) { - relatedHTML += - '' + - ' ' + - cityssm.escapeHTML(occupant.occupantName || "(No Name)") + - "
"; - } - } - - resultsTbodyElement.insertAdjacentHTML( - "beforeend", - "
" + - ("") + - ("") + - ('") + - ('") + - ("") + - (workOrderPrints.length > 0 - ? "" - : "") + - "" - ); - } - - searchResultsContainerElement.innerHTML = - '
" + - '' + - (workOrder.workOrderNumber!.trim() - ? cityssm.escapeHTML(workOrder.workOrderNumber || "") - : "(No Number)") + - "" + - "" + - cityssm.escapeHTML(workOrder.workOrderType || "") + - "
" + - '' + - cityssm.escapeHTML(workOrder.workOrderDescription || "") + - "" + - "
' + - relatedHTML + - "' + - ('' + - ' ' + - workOrder.workOrderOpenDateString + - "
") + - ('' + - ' ' + - (workOrder.workOrderCloseDate - ? workOrder.workOrderCloseDateString - : '(No ' + - cityssm.escapeHTML(exports.aliases.workOrderCloseDate) + - ")") + - "") + - "
" + - (workOrder.workOrderMilestoneCount === 0 - ? "-" - : workOrder.workOrderMilestoneCompletionCount + - " / " + - workOrder.workOrderMilestoneCount) + - "" + - '' + - '' + - "" + - "
' + - "" + - "" + - "" + - "" + - "" + - '' + - (workOrderPrints.length > 0 ? '' : "") + - "" + - "
Work Order NumberDescriptionRelatedDateProgress
" + - '
' + - ('
' + - '
' + - "Displaying " + - (offset + 1).toString() + - " to " + - Math.min(responseJSON.count, limit + offset) + - " of " + - responseJSON.count + - "
" + - "
") + - ('
' + - (offset > 0 - ? '
' + - '" + - "
" - : "") + - (limit + offset < responseJSON.count - ? '
' + - '" + - "
" - : "") + - "
") + - "
"; - - searchResultsContainerElement.querySelector("table")!.append(resultsTbodyElement); - - if (offset > 0) { - ( - searchResultsContainerElement.querySelector( - "button[data-page='previous']" - ) as HTMLButtonElement - ).addEventListener("click", previousAndGetWorkOrders); - } - - if (limit + offset < responseJSON.count) { - ( - searchResultsContainerElement.querySelector( - "button[data-page='next']" - ) as HTMLButtonElement - ).addEventListener("click", nextAndGetWorkOrders); - } - } + renderWorkOrders ); - }; + } - const resetOffsetAndGetWorkOrders = () => { + function resetOffsetAndGetWorkOrders() { offsetElement.value = "0"; getWorkOrders(); - }; + } - const previousAndGetWorkOrders = () => { + function previousAndGetWorkOrders() { offsetElement.value = Math.max( Number.parseInt(offsetElement.value, 10) - limit, 0 ).toString(); getWorkOrders(); - }; + } - const nextAndGetWorkOrders = () => { + function nextAndGetWorkOrders() { offsetElement.value = (Number.parseInt(offsetElement.value, 10) + limit).toString(); getWorkOrders(); - }; + } const filterElements = searchFilterFormElement.querySelectorAll("input, select") as NodeListOf< HTMLInputElement | HTMLSelectElement diff --git a/public/javascripts/workOrderSearch.min.js b/public/javascripts/workOrderSearch.min.js index fae674cf..4bc37e1e 100644 --- a/public/javascripts/workOrderSearch.min.js +++ b/public/javascripts/workOrderSearch.min.js @@ -1 +1 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset"),i=()=>{const i=Number.parseInt(o.value,10);a.innerHTML='

Loading Work Orders...
',cityssm.postJSON(e.urlPrefix+"/workOrders/doSearchWorkOrders",s,s=>{if(0===s.workOrders.length)return void(a.innerHTML='

There are no work orders that meet the search criteria.

');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+=' '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"
";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+=' '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"
";o.insertAdjacentHTML("beforeend",'"+(t.length>0?'':"")+"")}a.innerHTML='
'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+""+cityssm.escapeHTML(a.workOrderType||"")+'
'+cityssm.escapeHTML(a.workOrderDescription||"")+'
'+s+' '+a.workOrderOpenDateString+'
'+(a.workOrderCloseDate?a.workOrderCloseDateString:'(No '+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+")")+"
"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"
'+(t.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(i+1).toString()+" to "+Math.min(s.count,r+i)+" of "+s.count+'
'+(i>0?'
':"")+(r+i
':"")+"
",a.querySelector("table").append(o),i>0&&a.querySelector("button[data-page='previous']").addEventListener("click",c),r+i{o.value="0",i()},c=()=>{o.value=Math.max(Number.parseInt(o.value,10)-r,0).toString(),i()},n=()=>{o.value=(Number.parseInt(o.value,10)+r).toString(),i()},d=s.querySelectorAll("input, select");for(const e of d)e.addEventListener("change",l);s.addEventListener("submit",e=>{e.preventDefault(),l()}),i()})(); \ No newline at end of file +"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),(()=>{const e=exports.los,t=exports.workOrderPrints,s=document.querySelector("#form--searchFilters");e.initializeDatePickers(s);const a=document.querySelector("#container--searchResults"),r=Number.parseInt(document.querySelector("#searchFilter--limit").value,10),o=document.querySelector("#searchFilter--offset");function i(s){if(0===s.workOrders.length)return void(a.innerHTML='

There are no work orders that meet the search criteria.

');const o=document.createElement("tbody");for(const a of s.workOrders){let s="";for(const e of a.workOrderLots)s+=' '+cityssm.escapeHTML(e.lotName||"(No Lot Name)")+"
";for(const e of a.workOrderLotOccupancies)for(const t of e.lotOccupancyOccupants)s+=' '+cityssm.escapeHTML(t.occupantName||"(No Name)")+"
";o.insertAdjacentHTML("beforeend",'
"+(t.length>0?'':"")+"")}a.innerHTML='
'+(a.workOrderNumber.trim()?cityssm.escapeHTML(a.workOrderNumber||""):"(No Number)")+""+cityssm.escapeHTML(a.workOrderType||"")+'
'+cityssm.escapeHTML(a.workOrderDescription||"")+'
'+s+' '+a.workOrderOpenDateString+'
'+(a.workOrderCloseDate?a.workOrderCloseDateString:'(No '+cityssm.escapeHTML(exports.aliases.workOrderCloseDate)+")")+"
"+(0===a.workOrderMilestoneCount?"-":a.workOrderMilestoneCompletionCount+" / "+a.workOrderMilestoneCount)+"
'+(t.length>0?'':"")+'
Work Order NumberDescriptionRelatedDateProgress
Displaying '+(s.offset+1).toString()+" to "+Math.min(s.count,r+s.offset)+" of "+s.count+'
'+(s.offset>0?'
':"")+(r+s.offset
':"")+"
",a.querySelector("table").append(o),s.offset>0&&a.querySelector("button[data-page='previous']").addEventListener("click",c),r+s.offset{e.preventDefault(),n()}),l()})(); \ No newline at end of file