@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.22.2 → 4.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dpr/DprPollingStatusClass.mjs +2 -2
  2. package/dpr/components/_async/async-filters-form/types.d.js +1 -1
  3. package/dpr/components/_async/async-filters-form/types.d.js.map +1 -1
  4. package/dpr/components/_async/async-filters-form/types.d.ts +0 -1
  5. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  6. package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
  7. package/dpr/components/_catalogue/catalogue-list/utils.ts +2 -1
  8. package/dpr/components/_charts/utils.test.ts +0 -3
  9. package/dpr/components/bookmark-toggle/clientClass.mjs +3 -4
  10. package/dpr/components/bookmark-toggle/view.njk +1 -1
  11. package/dpr/components/user-reports/bookmarks/utils.js +1 -1
  12. package/dpr/components/user-reports/bookmarks/utils.js.map +3 -3
  13. package/dpr/components/user-reports/bookmarks/utils.ts +13 -3
  14. package/dpr/components/user-reports/requested/clientClass.mjs +18 -6
  15. package/dpr/components/user-reports/utils.js.map +2 -2
  16. package/dpr/components/user-reports/utils.test.ts +24 -24
  17. package/dpr/components/user-reports/utils.ts +2 -0
  18. package/dpr/components/user-reports/viewed/clientClass.mjs +3 -2
  19. package/dpr/middleware/setUpDprResources.js +1 -1
  20. package/dpr/middleware/setUpDprResources.js.map +3 -3
  21. package/dpr/middleware/setUpDprResources.test.ts +1 -0
  22. package/dpr/middleware/setUpDprResources.ts +3 -1
  23. package/dpr/routes/journeys/my-reports/bookmarks/controller.js +1 -1
  24. package/dpr/routes/journeys/my-reports/bookmarks/controller.js.map +3 -3
  25. package/dpr/routes/journeys/my-reports/bookmarks/controller.ts +6 -9
  26. package/dpr/routes/journeys/my-reports/bookmarks/routes.js +1 -1
  27. package/dpr/routes/journeys/my-reports/bookmarks/routes.js.map +2 -2
  28. package/dpr/routes/journeys/my-reports/bookmarks/routes.ts +0 -3
  29. package/dpr/routes/journeys/my-reports/bookmarks/service.js +3 -3
  30. package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +3 -3
  31. package/dpr/routes/journeys/my-reports/bookmarks/service.ts +4 -1
  32. package/dpr/routes/journeys/my-reports/recently-viewed/controller.js +1 -1
  33. package/dpr/routes/journeys/my-reports/recently-viewed/controller.js.map +2 -2
  34. package/dpr/routes/journeys/my-reports/recently-viewed/controller.ts +1 -0
  35. package/dpr/routes/journeys/my-reports/requested-reports/service.js +1 -1
  36. package/dpr/routes/journeys/my-reports/requested-reports/service.js.map +3 -3
  37. package/dpr/routes/journeys/my-reports/requested-reports/service.ts +37 -1
  38. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  39. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  40. package/dpr/routes/journeys/request-report/filters/utils.ts +3 -1
  41. package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
  42. package/dpr/routes/journeys/request-report/tests.cy.js.map +2 -2
  43. package/dpr/routes/journeys/request-report/tests.cy.ts +22 -1
  44. package/package.json +1 -1
@@ -28,13 +28,13 @@ class DprPollingStatusClass extends DprClientClass {
28
28
  }
29
29
 
30
30
  shouldPollStatus(data) {
31
- return JSON.parse(data).some((item) => {
31
+ return data.some((item) => {
32
32
  return !this.END_STATUSES.includes(item.status)
33
33
  })
34
34
  }
35
35
 
36
36
  shouldPollExpired(data) {
37
- return JSON.parse(data).some((item) => {
37
+ return data.some((item) => {
38
38
  return !this.EXPIRED_END_STATUSES.includes(item.status)
39
39
  })
40
40
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(t,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of a(r))!l.call(t,e)&&e!==s&&n(t,e,{get:()=>r[e],enumerable:!(i=o(r,e))||i.enumerable});return t};var g=t=>u(n({},"__esModule",{value:!0}),t);var c={};module.exports=g(c);
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(t,r,s,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of o(r))!l.call(t,e)&&e!==s&&n(t,e,{get:()=>r[e],enumerable:!(i=a(r,e))||i.enumerable});return t};var g=t=>u(n({},"__esModule",{value:!0}),t);var f={};module.exports=g(f);
2
2
  //# sourceMappingURL=types.d.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_async/async-filters-form/types.d.ts"],
4
- "sourcesContent": ["import { FilterValue } from '../../_filters/types'\nimport Dict = NodeJS.Dict\n\nexport interface requestAsyncReportParams {\n apiTimeout: number\n apiUrl: string\n token: string\n reportId: string\n reportVariantId: string\n query: Query\n}\n\n// todo update to correct type\ninterface Query {\n sortColumn: string\n sortedAsc: boolean\n filters: filter[]\n dataProductDefinitionsPath: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n\nexport interface SortByDefaults {\n options: { text: string; value: string }[]\n value: string\n}\n\nexport interface RenderFiltersReturnValue {\n filters: FilterValue[]\n sortBy?: FilterValue[]\n}\n\nexport interface SetQueryFromFiltersResult {\n query: Record<string, string>\n filterData: Record<string, string>\n querySummary: Array<Record<string, string>>\n sortData: Record<string, string>\n}\n"],
4
+ "sourcesContent": ["import { FilterValue } from '../../_filters/types'\n\nexport interface requestAsyncReportParams {\n apiTimeout: number\n apiUrl: string\n token: string\n reportId: string\n reportVariantId: string\n query: Query\n}\n\n// todo update to correct type\ninterface Query {\n sortColumn: string\n sortedAsc: boolean\n filters: filter[]\n dataProductDefinitionsPath: string\n}\n\ninterface filter {\n [filterId: string]: string\n}\n\nexport interface SortByDefaults {\n options: { text: string; value: string }[]\n value: string\n}\n\nexport interface RenderFiltersReturnValue {\n filters: FilterValue[]\n sortBy?: FilterValue[]\n}\n\nexport interface SetQueryFromFiltersResult {\n query: Record<string, string>\n filterData: Record<string, string>\n querySummary: Array<Record<string, string>>\n sortData: Record<string, string>\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["types_d_exports", "__toCommonJS"]
7
7
  }
@@ -1,5 +1,4 @@
1
1
  import { FilterValue } from '../../_filters/types'
2
- import Dict = NodeJS.Dict
3
2
 
4
3
  export interface requestAsyncReportParams {
5
4
  apiTimeout: number
@@ -1,2 +1,2 @@
1
- "use strict";var P=Object.create;var k=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var U=(e,t)=>{for(var o in t)k(e,o,{get:t[o],enumerable:!0})},R=(e,t,o,h)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of V(t))!O.call(e,s)&&s!==o&&k(e,s,{get:()=>t[s],enumerable:!(h=E(t,s))||h.enumerable});return e};var w=(e,t,o)=>(o=e!=null?P(F(e)):{},R(t||!e||!e.__esModule?k(o,"default",{value:e,enumerable:!0}):o,e)),Y=e=>R(k({},"__esModule",{value:!0}),e);var j={};U(j,{default:()=>$,getReportsList:()=>L});module.exports=Y(j);var d=require("../../../types/UserReports"),x=w(require("../../show-more/utils")),l=require("../../../utils/reportListsHelper"),A=w(require("../../../utils/localsHelper"));const L=async(e,t,o)=>{const{definitions:h,csrfToken:s,bookmarkingEnabled:v,dprUser:B}=A.default.getValues(e),H=h.sort((m,n)=>m.name<n.name?-1:m.name>n.name?1:0).flatMap(m=>{const{id:n,name:T,description:S,variants:g,dashboards:f,authorised:b}=m,a={reportName:T,reportId:n,authorised:b,reportDescription:S||""};let u=[];g&&(u=g.map(r=>{const{id:i,name:c,description:y,isMissing:M,loadType:N}=r;return{...a,type:d.ReportType.REPORT,loadType:N||d.LoadType.ASYNC,id:i,name:c,description:y||"",isMissing:M}}));let D=[];f&&(D=f.map(r=>{const{id:i,name:c,description:y,loadType:M}=r;return{...a,type:d.ReportType.DASHBOARD,loadType:M||d.LoadType.ASYNC,id:i,name:c,description:y||"",isMissing:!1}}));const p=[...D,...u];return p.sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0),p}),C=await t.bookmarkService.getState(B.id),I=await Promise.all(H.map(async m=>{const{id:n,name:T,description:S,reportName:g,reportId:f,reportDescription:b,type:a,loadType:u,authorised:D,isMissing:p}=m,r=S||b||"",i=(0,l.setInitialHref)(u,a,f,n,e,p);let c;return(o?.bookmarkingEnabled!==void 0?o?.bookmarkingEnabled:v)&&(c=await t.bookmarkService.createBookMarkToggleHtml({userConfig:C,reportId:f,id:n,csrfToken:s,ctxId:"reports-list",reportType:a,isMissing:!!p})),[{html:`<p class="govuk-body-s">${g}</p>`},{html:(0,l.createListItemProductMin)(T,a)},{html:x.default.createShowMoreHtml(r)},{html:(0,l.createListActions)(i,a,u,c,D,p)}]}));return{head:[{text:"Product",classes:"dpr-product-head"},{text:"Name",classes:"dpr-name-head"},{text:"Description",classes:"dpr-description-head"},{text:"Actions",classes:"dpr-bookmark-head"}],rows:I,id:"dpr-reports-catalogue"}};var $={getReportsList:L};0&&(module.exports={getReportsList});
1
+ "use strict";var E=Object.create;var k=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var Y=(e,t)=>{for(var o in t)k(e,o,{get:t[o],enumerable:!0})},R=(e,t,o,h)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of V(t))!O.call(e,s)&&s!==o&&k(e,s,{get:()=>t[s],enumerable:!(h=U(t,s))||h.enumerable});return e};var w=(e,t,o)=>(o=e!=null?E(F(e)):{},R(t||!e||!e.__esModule?k(o,"default",{value:e,enumerable:!0}):o,e)),$=e=>R(k({},"__esModule",{value:!0}),e);var q={};Y(q,{default:()=>j,getReportsList:()=>B});module.exports=$(q);var d=require("../../../types/UserReports"),x=w(require("../../show-more/utils")),l=require("../../../utils/reportListsHelper"),A=w(require("../../../utils/localsHelper"));const B=async(e,t,o)=>{const{definitions:h,csrfToken:s,bookmarkingEnabled:L,dprUser:v,nestedBaseUrl:H}=A.default.getValues(e),C=h.sort((m,n)=>m.name<n.name?-1:m.name>n.name?1:0).flatMap(m=>{const{id:n,name:T,description:S,variants:g,dashboards:f,authorised:b}=m,a={reportName:T,reportId:n,authorised:b,reportDescription:S||""};let u=[];g&&(u=g.map(r=>{const{id:i,name:c,description:y,isMissing:M,loadType:P}=r;return{...a,type:d.ReportType.REPORT,loadType:P||d.LoadType.ASYNC,id:i,name:c,description:y||"",isMissing:M}}));let D=[];f&&(D=f.map(r=>{const{id:i,name:c,description:y,loadType:M}=r;return{...a,type:d.ReportType.DASHBOARD,loadType:M||d.LoadType.ASYNC,id:i,name:c,description:y||"",isMissing:!1}}));const p=[...D,...u];return p.sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0),p}),I=await t.bookmarkService.getState(v.id),N=await Promise.all(C.map(async m=>{const{id:n,name:T,description:S,reportName:g,reportId:f,reportDescription:b,type:a,loadType:u,authorised:D,isMissing:p}=m,r=S||b||"",i=(0,l.setInitialHref)(u,a,f,n,e,p);let c;return(o?.bookmarkingEnabled!==void 0?o?.bookmarkingEnabled:L)&&(c=await t.bookmarkService.createBookMarkToggleHtml({userConfig:I,reportId:f,id:n,csrfToken:s,ctxId:"reports-list",reportType:a,isMissing:!!p,nestedBaseUrl:H})),[{html:`<p class="govuk-body-s">${g}</p>`},{html:(0,l.createListItemProductMin)(T,a)},{html:x.default.createShowMoreHtml(r)},{html:(0,l.createListActions)(i,a,u,c,D,p)}]}));return{head:[{text:"Product",classes:"dpr-product-head"},{text:"Name",classes:"dpr-name-head"},{text:"Description",classes:"dpr-description-head"},{text:"Actions",classes:"dpr-bookmark-head"}],rows:N,id:"dpr-reports-catalogue"}};var j={getReportsList:B};0&&(module.exports={getReportsList});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_catalogue/catalogue-list/utils.ts"],
4
- "sourcesContent": ["import { Response } from 'express'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport { DefinitionData, LoadType, ReportType } from '../../../types/UserReports'\nimport ShowMoreUtils from '../../show-more/utils'\nimport { createListItemProductMin, createListActions, setInitialHref } from '../../../utils/reportListsHelper'\nimport { CatalogueFeatures } from '../catalogue/types'\nimport LocalsHelper from '../../../utils/localsHelper'\n\nexport const getReportsList = async (\n res: Response,\n services: Services,\n features?: CatalogueFeatures,\n): Promise<{ head: { text: string }[]; rows: { text?: string; html?: string }[]; id: string }> => {\n const { definitions, csrfToken, bookmarkingEnabled, dprUser } = LocalsHelper.getValues(res)\n\n // Sort report Definitions by product name\n const sortedDefinitions = definitions.sort(\n (a: components['schemas']['ReportDefinitionSummary'], b: components['schemas']['ReportDefinitionSummary']) => {\n if (a.name < b.name) return -1\n if (a.name > b.name) return 1\n return 0\n },\n )\n\n // Sort by variant/dashboard name\n const sortedVariants = sortedDefinitions.flatMap((def: components['schemas']['ReportDefinitionSummary']) => {\n const { id: reportId, name: reportName, description: reportDescription, variants, dashboards, authorised } = def\n\n const productBase = {\n reportName,\n reportId,\n authorised,\n reportDescription: reportDescription || '',\n }\n\n let variantsArray: DefinitionData[] = []\n if (variants) {\n variantsArray = variants.map((variant: components['schemas']['VariantDefinitionSummary']) => {\n const { id, name, description, isMissing, loadType } = variant\n\n return {\n ...productBase,\n type: ReportType.REPORT,\n loadType: <LoadType>loadType || LoadType.ASYNC,\n id,\n name,\n description: description || '',\n isMissing,\n }\n })\n }\n\n let dashboardsArray: DefinitionData[] = []\n if (dashboards) {\n dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinitionSummary']) => {\n const { id, name, description, loadType } = dashboard\n\n return {\n ...productBase,\n type: ReportType.DASHBOARD,\n loadType: <LoadType>loadType || LoadType.ASYNC,\n id,\n name,\n description: description || '',\n isMissing: false,\n }\n })\n }\n\n const mergedArray = [...dashboardsArray, ...variantsArray]\n\n mergedArray.sort((a: DefinitionData, b: DefinitionData) => {\n if (a.name < b.name) return -1\n if (a.name > b.name) return 1\n return 0\n })\n\n return mergedArray\n })\n\n const userConfig = await services.bookmarkService.getState(dprUser.id)\n const rows = await Promise.all(\n sortedVariants.map(async (v: DefinitionData) => {\n const { id, name, description, reportName, reportId, reportDescription, type, loadType, authorised, isMissing } =\n v\n const desc = description || reportDescription || ''\n\n const href = setInitialHref(loadType, type, reportId, id, res, isMissing)\n\n let bookmarkHtml\n const showBookMarkToggle =\n features?.bookmarkingEnabled !== undefined ? features?.bookmarkingEnabled : bookmarkingEnabled\n\n if (showBookMarkToggle) {\n bookmarkHtml = await services.bookmarkService.createBookMarkToggleHtml({\n userConfig,\n reportId,\n id,\n csrfToken,\n ctxId: 'reports-list',\n reportType: type,\n isMissing: Boolean(isMissing),\n })\n }\n\n return [\n { html: `<p class=\"govuk-body-s\">${reportName}</p>` },\n { html: createListItemProductMin(name, <ReportType>type) },\n { html: ShowMoreUtils.createShowMoreHtml(desc) },\n { html: createListActions(href, type, loadType, bookmarkHtml, authorised, isMissing) },\n ]\n }),\n )\n\n const head = [\n { text: 'Product', classes: 'dpr-product-head' },\n { text: 'Name', classes: 'dpr-name-head' },\n { text: 'Description', classes: 'dpr-description-head' },\n { text: 'Actions', classes: 'dpr-bookmark-head' },\n ]\n\n return {\n head,\n rows,\n id: 'dpr-reports-catalogue',\n }\n}\n\nexport default {\n getReportsList,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "getReportsList", "__toCommonJS", "import_UserReports", "import_utils", "import_reportListsHelper", "import_localsHelper", "res", "services", "features", "definitions", "csrfToken", "bookmarkingEnabled", "dprUser", "LocalsHelper", "sortedVariants", "a", "b", "def", "reportId", "reportName", "reportDescription", "variants", "dashboards", "authorised", "productBase", "variantsArray", "variant", "id", "name", "description", "isMissing", "loadType", "dashboardsArray", "dashboard", "mergedArray", "userConfig", "rows", "v", "type", "desc", "href", "bookmarkHtml", "ShowMoreUtils"]
4
+ "sourcesContent": ["import { Response } from 'express'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport { DefinitionData, LoadType, ReportType } from '../../../types/UserReports'\nimport ShowMoreUtils from '../../show-more/utils'\nimport { createListItemProductMin, createListActions, setInitialHref } from '../../../utils/reportListsHelper'\nimport { CatalogueFeatures } from '../catalogue/types'\nimport LocalsHelper from '../../../utils/localsHelper'\n\nexport const getReportsList = async (\n res: Response,\n services: Services,\n features?: CatalogueFeatures,\n): Promise<{ head: { text: string }[]; rows: { text?: string; html?: string }[]; id: string }> => {\n const { definitions, csrfToken, bookmarkingEnabled, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)\n\n // Sort report Definitions by product name\n const sortedDefinitions = definitions.sort(\n (a: components['schemas']['ReportDefinitionSummary'], b: components['schemas']['ReportDefinitionSummary']) => {\n if (a.name < b.name) return -1\n if (a.name > b.name) return 1\n return 0\n },\n )\n\n // Sort by variant/dashboard name\n const sortedVariants = sortedDefinitions.flatMap((def: components['schemas']['ReportDefinitionSummary']) => {\n const { id: reportId, name: reportName, description: reportDescription, variants, dashboards, authorised } = def\n\n const productBase = {\n reportName,\n reportId,\n authorised,\n reportDescription: reportDescription || '',\n }\n\n let variantsArray: DefinitionData[] = []\n if (variants) {\n variantsArray = variants.map((variant: components['schemas']['VariantDefinitionSummary']) => {\n const { id, name, description, isMissing, loadType } = variant\n\n return {\n ...productBase,\n type: ReportType.REPORT,\n loadType: <LoadType>loadType || LoadType.ASYNC,\n id,\n name,\n description: description || '',\n isMissing,\n }\n })\n }\n\n let dashboardsArray: DefinitionData[] = []\n if (dashboards) {\n dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinitionSummary']) => {\n const { id, name, description, loadType } = dashboard\n\n return {\n ...productBase,\n type: ReportType.DASHBOARD,\n loadType: <LoadType>loadType || LoadType.ASYNC,\n id,\n name,\n description: description || '',\n isMissing: false,\n }\n })\n }\n\n const mergedArray = [...dashboardsArray, ...variantsArray]\n\n mergedArray.sort((a: DefinitionData, b: DefinitionData) => {\n if (a.name < b.name) return -1\n if (a.name > b.name) return 1\n return 0\n })\n\n return mergedArray\n })\n\n const userConfig = await services.bookmarkService.getState(dprUser.id)\n const rows = await Promise.all(\n sortedVariants.map(async (v: DefinitionData) => {\n const { id, name, description, reportName, reportId, reportDescription, type, loadType, authorised, isMissing } =\n v\n const desc = description || reportDescription || ''\n\n const href = setInitialHref(loadType, type, reportId, id, res, isMissing)\n\n let bookmarkHtml\n const showBookMarkToggle =\n features?.bookmarkingEnabled !== undefined ? features?.bookmarkingEnabled : bookmarkingEnabled\n\n if (showBookMarkToggle) {\n bookmarkHtml = await services.bookmarkService.createBookMarkToggleHtml({\n userConfig,\n reportId,\n id,\n csrfToken,\n ctxId: 'reports-list',\n reportType: type,\n isMissing: Boolean(isMissing),\n nestedBaseUrl,\n })\n }\n\n return [\n { html: `<p class=\"govuk-body-s\">${reportName}</p>` },\n { html: createListItemProductMin(name, <ReportType>type) },\n { html: ShowMoreUtils.createShowMoreHtml(desc) },\n { html: createListActions(href, type, loadType, bookmarkHtml, authorised, isMissing) },\n ]\n }),\n )\n\n const head = [\n { text: 'Product', classes: 'dpr-product-head' },\n { text: 'Name', classes: 'dpr-name-head' },\n { text: 'Description', classes: 'dpr-description-head' },\n { text: 'Actions', classes: 'dpr-bookmark-head' },\n ]\n\n return {\n head,\n rows,\n id: 'dpr-reports-catalogue',\n }\n}\n\nexport default {\n getReportsList,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "getReportsList", "__toCommonJS", "import_UserReports", "import_utils", "import_reportListsHelper", "import_localsHelper", "res", "services", "features", "definitions", "csrfToken", "bookmarkingEnabled", "dprUser", "nestedBaseUrl", "LocalsHelper", "sortedVariants", "a", "b", "def", "reportId", "reportName", "reportDescription", "variants", "dashboards", "authorised", "productBase", "variantsArray", "variant", "id", "name", "description", "isMissing", "loadType", "dashboardsArray", "dashboard", "mergedArray", "userConfig", "rows", "v", "type", "desc", "href", "bookmarkHtml", "ShowMoreUtils"]
7
7
  }
@@ -12,7 +12,7 @@ export const getReportsList = async (
12
12
  services: Services,
13
13
  features?: CatalogueFeatures,
14
14
  ): Promise<{ head: { text: string }[]; rows: { text?: string; html?: string }[]; id: string }> => {
15
- const { definitions, csrfToken, bookmarkingEnabled, dprUser } = LocalsHelper.getValues(res)
15
+ const { definitions, csrfToken, bookmarkingEnabled, dprUser, nestedBaseUrl } = LocalsHelper.getValues(res)
16
16
 
17
17
  // Sort report Definitions by product name
18
18
  const sortedDefinitions = definitions.sort(
@@ -101,6 +101,7 @@ export const getReportsList = async (
101
101
  ctxId: 'reports-list',
102
102
  reportType: type,
103
103
  isMissing: Boolean(isMissing),
104
+ nestedBaseUrl,
104
105
  })
105
106
  }
106
107
 
@@ -39,7 +39,6 @@ describe('ChartCard Utils', () => {
39
39
  it('should get the snapshot chart data', async () => {
40
40
  const expectedResult = barChartDataHasEthnicity
41
41
  const result = ChartCardUtils.createChart(snapshotVisualisationDefinition, dashboardMetricsData.flat(), 'bar')
42
- console.log(JSON.stringify(result, null, 2))
43
42
  expect(result).toEqual(expectedResult)
44
43
  })
45
44
 
@@ -64,8 +63,6 @@ describe('ChartCard Utils', () => {
64
63
  'line-timeseries',
65
64
  {},
66
65
  )
67
-
68
- console.log(JSON.stringify(result, null, 2))
69
66
  expect(result).toEqual(expectedResult)
70
67
  })
71
68
  })
@@ -69,17 +69,16 @@ class BookmarkToggle extends DprClientClass {
69
69
  }
70
70
 
71
71
  async toggleBookmark(type, id, reportId, reportType, csrfToken) {
72
- const method = type === 'add' ? 'post' : 'delete'
73
- const endpoint = this.baseUrl ? `${this.baseUrl}/dpr/my-reports/bookmarks/` : `dpr/my-reports/bookmarks/`
74
-
72
+ const endpoint = this.baseUrl ? `${this.baseUrl}/dpr/my-reports/bookmarks/` : `/dpr/my-reports/bookmarks/`
75
73
  await fetch(endpoint, {
76
- method,
74
+ method: 'post',
77
75
  headers: {
78
76
  Accept: 'application/json',
79
77
  'Content-Type': 'application/json',
80
78
  'CSRF-Token': csrfToken,
81
79
  },
82
80
  body: JSON.stringify({
81
+ type,
83
82
  id,
84
83
  reportId,
85
84
  reportType,
@@ -4,7 +4,7 @@
4
4
  {% set tooltip %}{{ 'Remove bookmark' if bookmarked else 'Add bookmark' }}{% endset %}
5
5
 
6
6
  <button class='dpr-bookmark dpr-bookmark-inline dpr-bookmark-component' data-dpr-module="bookmark-toggle">
7
- <input class="bookmark-input" arial-labelledby="{{id}}-{{reportId}}-{{ ctxId }}-bookmark-label" type='checkbox' id='{{ reportId }}-{{ id }}-{{ ctxId }}' data-id='{{ id }}' data-report-id='{{ reportId }}' data-report-type='{{ type }}' data-csrf-token='{{ csrfToken }}' data-base-url="{{ nestedBaseUrl }}"{{ checked }}/>
7
+ <input class="bookmark-input" arial-labelledby="{{id}}-{{reportId}}-{{ ctxId }}-bookmark-label" type='checkbox' id='{{ reportId }}-{{ id }}-{{ ctxId }}' data-id='{{ id }}' data-report-id='{{ reportId }}' data-report-type='{{ type }}' data-csrf-token='{{ csrfToken }}' data-base-url="{{ nestedBaseUrl }}" {{ checked }}/>
8
8
  <label id="{{id}}-{{reportId}}-{{ ctxId }}-bookmark-label" tabindex="0" for='{{ reportId }}-{{ id }}-{{ ctxId }}' class=''><span class="govuk-link--no-visited-state dpr-bookmark-label dpr-bookmark-label--component govuk-body-xs">{{tooltip}}</span></label>
9
9
  </button>
10
10
  {% endmacro %}
@@ -1,2 +1,2 @@
1
- "use strict";var N=Object.create;var g=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var F=(o,t)=>{for(var e in t)g(o,e,{get:t[e],enumerable:!0})},R=(o,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of M(t))!q.call(o,a)&&a!==e&&g(o,a,{get:()=>t[a],enumerable:!(i=A(t,a))||i.enumerable});return o};var B=(o,t,e)=>(e=o!=null?N(O(o)):{},R(t||!o||!o.__esModule?g(e,"default",{value:o,enumerable:!0}):e,o)),U=o=>R(g({},"__esModule",{value:!0}),o);var _={};F(_,{default:()=>Y,formatBookmark:()=>P,formatBookmarks:()=>w,renderBookmarkList:()=>x});module.exports=U(_);var l=require("../../../types/UserReports"),b=B(require("../../show-more/utils")),T=B(require("../../../utils/logger")),v=B(require("../../../utils/definitionUtils")),f=require("../../../utils/reportListsHelper"),S=B(require("../../../utils/localsHelper"));const w=async o=>o.map(t=>P(t)).sort((t,e)=>t.text.localeCompare(e.text)),P=o=>{const t=JSON.parse(JSON.stringify(o)),{id:e,name:i,description:a,href:n,reportName:p,type:r}=t;return{id:e,reportName:p,text:i,description:a,href:n,type:r}},V=async(o,t,e,i,a)=>{const n=await t.getState(i),p=await Promise.all(o.sort((r,s)=>r.name.localeCompare(s.name)).map(async r=>E(r,t,e,n)));return{rows:a?p.slice(0,a):p,head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Description",classes:"dpr-bm-description-head"},{text:"Actions",classes:"dpr-bm-actions-head"}]}},E=async(o,t,e,i)=>{const{description:a,reportName:n,reportId:p,id:r,href:s,name:m,type:k,loadType:d}=o,c=await t.createBookMarkToggleHtml({userConfig:i,reportId:p,id:r,csrfToken:e,ctxId:"bookmark-list",reportType:k,isMissing:!1});return[{html:(0,f.createListItemProduct)(n,m,k)},{html:b.default.createShowMoreHtml(a),classes:"dpr-req-cell"},{html:(0,f.createListActions)(s,k,d,c),classes:"dpr-req-cell dpr-req-cell__status"}]},J=async(o,t,e,i)=>{const a=[],{definitionsPath:n}=S.default.getValues(t);return await Promise.all(o.map(async p=>{let r;const{reportId:s,id:m,automatic:k,type:d}=p,c=d||l.ReportType.REPORT;try{let y="",u="",D=l.LoadType.ASYNC;const C=(0,f.setInitialHref)(D,c,s,m,t),h=await v.default.getReportSummary(s,i.reportingService,e,n),H=h.name;if(c===l.ReportType.REPORT){const I=h.variants.find(L=>L.id===m);r=await i.reportingService.getDefinition(e,s,m,n),y=r.variant.name,u=r.variant.description||r.description||"",D=I?.loadType||D}c===l.ReportType.DASHBOARD&&(r=await i.dashboardService.getDefinition(e,s,m,n),y=r.name,u=r.description||""),r&&a.push({reportId:s,id:m,reportName:H,name:y,description:u,type:c,href:C,loadType:D,automatic:k})}catch{T.default.warn(`Failed to map bookmark for: Report ${s}, variant ${m}`);const{dprUser:u}=S.default.getValues(t);await i.bookmarkService.removeBookmark(u.id,m,s)}})),a},x=async({services:o,maxRows:t=20,res:e})=>{const{token:i,csrfToken:a,dprUser:n,bookmarks:p}=S.default.getValues(e),r=await J(p,e,i,o);let s=await w(r);const m=s.length;t&&(s=s.slice(0,t));const k=await V(r,o.bookmarkService,a,n.id,t),d={...s.length&&{href:"/dpr/my-reports/bookmarks/list"},...!s.length&&{emptyMessage:"You have 0 bookmarked reports"}},c={amount:m,shown:m>t?t:m,max:t};return{head:d,tableData:k,total:c,csrfToken:a,type:"bookmark"}};var Y={renderBookmarkList:x};0&&(module.exports={formatBookmark,formatBookmarks,renderBookmarkList});
1
+ "use strict";var N=Object.create;var D=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var q=(o,t)=>{for(var e in t)D(o,e,{get:t[e],enumerable:!0})},R=(o,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of M(t))!U.call(o,r)&&r!==e&&D(o,r,{get:()=>t[r],enumerable:!(n=A(t,r))||n.enumerable});return o};var B=(o,t,e)=>(e=o!=null?N(O(o)):{},R(t||!o||!o.__esModule?D(e,"default",{value:o,enumerable:!0}):e,o)),F=o=>R(D({},"__esModule",{value:!0}),o);var _={};q(_,{default:()=>Y,formatBookmark:()=>P,formatBookmarks:()=>w,renderBookmarkList:()=>x});module.exports=F(_);var y=require("../../../types/UserReports"),b=B(require("../../show-more/utils")),T=B(require("../../../utils/logger")),v=B(require("../../../utils/definitionUtils")),u=require("../../../utils/reportListsHelper"),S=B(require("../../../utils/localsHelper"));const w=async o=>o.map(t=>P(t)).sort((t,e)=>t.text.localeCompare(e.text)),P=o=>{const t=JSON.parse(JSON.stringify(o)),{id:e,name:n,description:r,href:m,reportName:p,type:a}=t;return{id:e,reportName:p,text:n,description:r,href:m,type:a}},V=async(o,t,e,n,r,m)=>{const p=await t.getState(n),a=await Promise.all(o.sort((i,s)=>i.name.localeCompare(s.name)).map(async i=>E(i,t,e,p,m)));return{rows:r?a.slice(0,r):a,head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Description",classes:"dpr-bm-description-head"},{text:"Actions",classes:"dpr-bm-actions-head"}]}},E=async(o,t,e,n,r)=>{const{description:m,reportName:p,reportId:a,id:i,href:s,name:l,type:c,loadType:k}=o,d=await t.createBookMarkToggleHtml({userConfig:n,reportId:a,id:i,csrfToken:e,ctxId:"bookmark-list",reportType:c,isMissing:!1,nestedBaseUrl:r});return[{html:(0,u.createListItemProduct)(p,l,c)},{html:b.default.createShowMoreHtml(m),classes:"dpr-req-cell"},{html:(0,u.createListActions)(s,c,k,d),classes:"dpr-req-cell dpr-req-cell__status"}]},J=async(o,t,e,n)=>{const r=[],{definitionsPath:m}=S.default.getValues(t);return await Promise.all(o.map(async p=>{let a;const{reportId:i,id:s,automatic:l,type:c}=p,k=c||y.ReportType.REPORT;try{let d="",f="",g=y.LoadType.ASYNC;const C=(0,u.setInitialHref)(g,k,i,s,t),h=await v.default.getReportSummary(i,n.reportingService,e,m),H=h.name;if(k===y.ReportType.REPORT){const I=h.variants.find(L=>L.id===s);a=await n.reportingService.getDefinition(e,i,s,m),d=a.variant.name,f=a.variant.description||a.description||"",g=I?.loadType||g}k===y.ReportType.DASHBOARD&&(a=await n.dashboardService.getDefinition(e,i,s,m),d=a.name,f=a.description||""),a&&r.push({reportId:i,id:s,reportName:H,name:d,description:f,type:k,href:C,loadType:g,automatic:l})}catch{T.default.warn(`Failed to map bookmark for: Report ${i}, variant ${s}`);const{dprUser:f}=S.default.getValues(t);await n.bookmarkService.removeBookmark(f.id,s,i)}})),r},x=async({services:o,maxRows:t=20,res:e})=>{const{token:n,csrfToken:r,dprUser:m,bookmarks:p,nestedBaseUrl:a}=S.default.getValues(e),i=await J(p,e,n,o);let s=await w(i);const l=s.length;t&&(s=s.slice(0,t));const c=await V(i,o.bookmarkService,r,m.id,t,a),k={...s.length&&{href:"/dpr/my-reports/bookmarks/list"},...!s.length&&{emptyMessage:"You have 0 bookmarked reports"}},d={amount:l,shown:l>t?t:l,max:t};return{head:k,tableData:c,total:d,csrfToken:r,type:"bookmark"}};var Y={renderBookmarkList:x};0&&(module.exports={formatBookmark,formatBookmarks,renderBookmarkList});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/user-reports/bookmarks/utils.ts"],
4
- "sourcesContent": ["import { Response } from 'express'\nimport { BookmarkService } from '../../../services'\nimport { BookmarkedReportData, BookmarkStoreData } from '../../../types/Bookmark'\nimport { FormattedBookmarkData, LoadType, ReportType } from '../../../types/UserReports'\nimport { Services } from '../../../types/Services'\nimport ShowMoreUtils from '../../show-more/utils'\nimport logger from '../../../utils/logger'\nimport DefinitionUtils from '../../../utils/definitionUtils'\nimport { createListItemProduct, createListActions, setInitialHref } from '../../../utils/reportListsHelper'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { ReportStoreConfig } from '../../../types/ReportStore'\n\nexport const formatBookmarks = async (bookmarksData: BookmarkedReportData[]): Promise<FormattedBookmarkData[]> => {\n return bookmarksData\n .map((report: BookmarkedReportData) => {\n return formatBookmark(report)\n })\n .sort((a, b) => a.text.localeCompare(b.text))\n}\n\nexport const formatBookmark = (bookmarkData: BookmarkedReportData): FormattedBookmarkData => {\n const reportData: BookmarkedReportData = JSON.parse(JSON.stringify(bookmarkData))\n const { id, name, description, href, reportName, type } = reportData\n\n return {\n id,\n reportName,\n text: name,\n description,\n href,\n type: type as ReportType,\n }\n}\n\nconst formatTable = async (\n bookmarksData: BookmarkedReportData[],\n bookmarkService: BookmarkService,\n csrfToken: string,\n userId: string,\n maxRows?: number,\n) => {\n const userConfig = await bookmarkService.getState(userId)\n const rows = await Promise.all(\n bookmarksData\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(async (bookmark: BookmarkedReportData) => {\n return formatTableData(bookmark, bookmarkService, csrfToken, userConfig)\n }),\n )\n\n return {\n rows: maxRows ? rows.slice(0, maxRows) : rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Description', classes: 'dpr-bm-description-head' },\n { text: 'Actions', classes: 'dpr-bm-actions-head' },\n ],\n }\n}\n\nconst formatTableData = async (\n bookmarksData: BookmarkedReportData,\n bookmarkService: BookmarkService,\n csrfToken: string,\n userConfig: ReportStoreConfig,\n) => {\n const { description, reportName, reportId, id, href, name, type, loadType } = bookmarksData\n const bookmarkHtml = await bookmarkService.createBookMarkToggleHtml({\n userConfig,\n reportId,\n id,\n csrfToken,\n ctxId: 'bookmark-list',\n reportType: type,\n // We don't have the data here, and missing reports should never get into bookmarked, viewed or requested\n isMissing: false,\n })\n return [\n {\n html: createListItemProduct(reportName, name, type),\n },\n { html: ShowMoreUtils.createShowMoreHtml(description), classes: 'dpr-req-cell' },\n {\n html: createListActions(href, type, loadType, bookmarkHtml),\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst mapBookmarkIdsToDefinition = async (\n bookmarks: BookmarkStoreData[],\n res: Response,\n token: string,\n services: Services,\n): Promise<BookmarkedReportData[]> => {\n const bookmarkData: BookmarkedReportData[] = []\n const { definitionsPath } = LocalsHelper.getValues(res)\n\n await Promise.all(\n bookmarks.map(async (bookmark) => {\n let definition\n const { reportId, id, automatic, type } = bookmark\n const reportType: ReportType = type ? (type as ReportType) : ReportType.REPORT\n\n try {\n let name = ''\n let description = ''\n let loadType = LoadType.ASYNC\n const href = setInitialHref(loadType, reportType, reportId, id, res)\n\n const procuctSummary = await DefinitionUtils.getReportSummary(\n reportId,\n services.reportingService,\n token,\n definitionsPath,\n )\n const reportName = procuctSummary.name\n\n if (reportType === ReportType.REPORT) {\n const variantSummary = procuctSummary.variants.find((v) => v.id === id)\n definition = await services.reportingService.getDefinition(token, reportId, id, definitionsPath)\n name = definition.variant.name\n description = definition.variant.description || definition.description || ''\n loadType = (variantSummary?.loadType as LoadType) || loadType\n }\n\n if (reportType === ReportType.DASHBOARD) {\n definition = await services.dashboardService.getDefinition(token, reportId, id, definitionsPath)\n name = definition.name\n description = definition.description || ''\n }\n\n if (definition) {\n bookmarkData.push({\n reportId,\n id,\n reportName,\n name,\n description,\n type: reportType,\n href,\n loadType,\n automatic,\n })\n }\n } catch (error) {\n // DPD has been deleted so API throws error\n logger.warn(`Failed to map bookmark for: Report ${reportId}, variant ${id}`)\n const { dprUser } = LocalsHelper.getValues(res)\n await services.bookmarkService.removeBookmark(dprUser.id, id, reportId)\n }\n }),\n )\n return bookmarkData\n}\n\nexport const renderBookmarkList = async ({\n services,\n maxRows = 20,\n res,\n}: {\n services: Services\n maxRows?: number\n res: Response\n}) => {\n const { token, csrfToken, dprUser, bookmarks } = LocalsHelper.getValues(res)\n const bookmarksData: BookmarkedReportData[] = await mapBookmarkIdsToDefinition(bookmarks, res, token, services)\n\n let formatted = await formatBookmarks(bookmarksData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = await formatTable(bookmarksData, services.bookmarkService, csrfToken, dprUser.id, maxRows)\n\n const head = {\n ...(formatted.length && { href: '/dpr/my-reports/bookmarks/list' }),\n ...(!formatted.length && { emptyMessage: 'You have 0 bookmarked reports' }),\n }\n\n const total = {\n amount: formattedCount,\n shown: formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n\n const result = {\n head,\n tableData,\n total,\n csrfToken,\n type: 'bookmark',\n }\n\n return result\n}\n\nexport default {\n renderBookmarkList,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "formatBookmark", "formatBookmarks", "renderBookmarkList", "__toCommonJS", "import_UserReports", "import_utils", "import_logger", "import_definitionUtils", "import_reportListsHelper", "import_localsHelper", "bookmarksData", "report", "a", "b", "bookmarkData", "reportData", "id", "name", "description", "href", "reportName", "type", "formatTable", "bookmarkService", "csrfToken", "userId", "maxRows", "userConfig", "rows", "bookmark", "formatTableData", "reportId", "loadType", "bookmarkHtml", "ShowMoreUtils", "mapBookmarkIdsToDefinition", "bookmarks", "res", "token", "services", "definitionsPath", "LocalsHelper", "definition", "automatic", "reportType", "procuctSummary", "DefinitionUtils", "variantSummary", "v", "logger", "dprUser", "formatted", "formattedCount", "tableData", "head", "total"]
4
+ "sourcesContent": ["import { Response } from 'express'\nimport { BookmarkService } from '../../../services'\nimport { BookmarkedReportData, BookmarkStoreData } from '../../../types/Bookmark'\nimport { FormattedBookmarkData, LoadType, ReportType } from '../../../types/UserReports'\nimport { Services } from '../../../types/Services'\nimport ShowMoreUtils from '../../show-more/utils'\nimport logger from '../../../utils/logger'\nimport DefinitionUtils from '../../../utils/definitionUtils'\nimport { createListItemProduct, createListActions, setInitialHref } from '../../../utils/reportListsHelper'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { ReportStoreConfig } from '../../../types/ReportStore'\n\nexport const formatBookmarks = async (bookmarksData: BookmarkedReportData[]): Promise<FormattedBookmarkData[]> => {\n return bookmarksData\n .map((report: BookmarkedReportData) => {\n return formatBookmark(report)\n })\n .sort((a, b) => a.text.localeCompare(b.text))\n}\n\nexport const formatBookmark = (bookmarkData: BookmarkedReportData): FormattedBookmarkData => {\n const reportData: BookmarkedReportData = JSON.parse(JSON.stringify(bookmarkData))\n const { id, name, description, href, reportName, type } = reportData\n\n return {\n id,\n reportName,\n text: name,\n description,\n href,\n type: type as ReportType,\n }\n}\n\nconst formatTable = async (\n bookmarksData: BookmarkedReportData[],\n bookmarkService: BookmarkService,\n csrfToken: string,\n userId: string,\n maxRows?: number,\n nestedBaseUrl?: string,\n) => {\n const userConfig = await bookmarkService.getState(userId)\n const rows = await Promise.all(\n bookmarksData\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(async (bookmark: BookmarkedReportData) => {\n return formatTableData(bookmark, bookmarkService, csrfToken, userConfig, nestedBaseUrl)\n }),\n )\n\n return {\n rows: maxRows ? rows.slice(0, maxRows) : rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Description', classes: 'dpr-bm-description-head' },\n { text: 'Actions', classes: 'dpr-bm-actions-head' },\n ],\n }\n}\n\nconst formatTableData = async (\n bookmarksData: BookmarkedReportData,\n bookmarkService: BookmarkService,\n csrfToken: string,\n userConfig: ReportStoreConfig,\n nestedBaseUrl?: string,\n) => {\n const { description, reportName, reportId, id, href, name, type, loadType } = bookmarksData\n const bookmarkHtml = await bookmarkService.createBookMarkToggleHtml({\n userConfig,\n reportId,\n id,\n csrfToken,\n ctxId: 'bookmark-list',\n reportType: type,\n // We don't have the data here, and missing reports should never get into bookmarked, viewed or requested\n isMissing: false,\n nestedBaseUrl,\n })\n return [\n {\n html: createListItemProduct(reportName, name, type),\n },\n { html: ShowMoreUtils.createShowMoreHtml(description), classes: 'dpr-req-cell' },\n {\n html: createListActions(href, type, loadType, bookmarkHtml),\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst mapBookmarkIdsToDefinition = async (\n bookmarks: BookmarkStoreData[],\n res: Response,\n token: string,\n services: Services,\n): Promise<BookmarkedReportData[]> => {\n const bookmarkData: BookmarkedReportData[] = []\n const { definitionsPath } = LocalsHelper.getValues(res)\n\n await Promise.all(\n bookmarks.map(async (bookmark) => {\n let definition\n const { reportId, id, automatic, type } = bookmark\n const reportType: ReportType = type ? (type as ReportType) : ReportType.REPORT\n\n try {\n let name = ''\n let description = ''\n let loadType = LoadType.ASYNC\n const href = setInitialHref(loadType, reportType, reportId, id, res)\n\n const procuctSummary = await DefinitionUtils.getReportSummary(\n reportId,\n services.reportingService,\n token,\n definitionsPath,\n )\n const reportName = procuctSummary.name\n\n if (reportType === ReportType.REPORT) {\n const variantSummary = procuctSummary.variants.find((v) => v.id === id)\n definition = await services.reportingService.getDefinition(token, reportId, id, definitionsPath)\n name = definition.variant.name\n description = definition.variant.description || definition.description || ''\n loadType = (variantSummary?.loadType as LoadType) || loadType\n }\n\n if (reportType === ReportType.DASHBOARD) {\n definition = await services.dashboardService.getDefinition(token, reportId, id, definitionsPath)\n name = definition.name\n description = definition.description || ''\n }\n\n if (definition) {\n bookmarkData.push({\n reportId,\n id,\n reportName,\n name,\n description,\n type: reportType,\n href,\n loadType,\n automatic,\n })\n }\n } catch (error) {\n // DPD has been deleted so API throws error\n logger.warn(`Failed to map bookmark for: Report ${reportId}, variant ${id}`)\n const { dprUser } = LocalsHelper.getValues(res)\n await services.bookmarkService.removeBookmark(dprUser.id, id, reportId)\n }\n }),\n )\n return bookmarkData\n}\n\nexport const renderBookmarkList = async ({\n services,\n maxRows = 20,\n res,\n}: {\n services: Services\n maxRows?: number\n res: Response\n}) => {\n const { token, csrfToken, dprUser, bookmarks, nestedBaseUrl } = LocalsHelper.getValues(res)\n const bookmarksData: BookmarkedReportData[] = await mapBookmarkIdsToDefinition(bookmarks, res, token, services)\n\n let formatted = await formatBookmarks(bookmarksData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = await formatTable(\n bookmarksData,\n services.bookmarkService,\n csrfToken,\n dprUser.id,\n maxRows,\n nestedBaseUrl,\n )\n\n const head = {\n ...(formatted.length && { href: '/dpr/my-reports/bookmarks/list' }),\n ...(!formatted.length && { emptyMessage: 'You have 0 bookmarked reports' }),\n }\n\n const total = {\n amount: formattedCount,\n shown: formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n\n const result = {\n head,\n tableData,\n total,\n csrfToken,\n type: 'bookmark',\n }\n\n return result\n}\n\nexport default {\n renderBookmarkList,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "formatBookmark", "formatBookmarks", "renderBookmarkList", "__toCommonJS", "import_UserReports", "import_utils", "import_logger", "import_definitionUtils", "import_reportListsHelper", "import_localsHelper", "bookmarksData", "report", "a", "b", "bookmarkData", "reportData", "id", "name", "description", "href", "reportName", "type", "formatTable", "bookmarkService", "csrfToken", "userId", "maxRows", "nestedBaseUrl", "userConfig", "rows", "bookmark", "formatTableData", "reportId", "loadType", "bookmarkHtml", "ShowMoreUtils", "mapBookmarkIdsToDefinition", "bookmarks", "res", "token", "services", "definitionsPath", "LocalsHelper", "definition", "automatic", "reportType", "procuctSummary", "DefinitionUtils", "variantSummary", "v", "logger", "dprUser", "formatted", "formattedCount", "tableData", "head", "total"]
7
7
  }
@@ -38,13 +38,14 @@ const formatTable = async (
38
38
  csrfToken: string,
39
39
  userId: string,
40
40
  maxRows?: number,
41
+ nestedBaseUrl?: string,
41
42
  ) => {
42
43
  const userConfig = await bookmarkService.getState(userId)
43
44
  const rows = await Promise.all(
44
45
  bookmarksData
45
46
  .sort((a, b) => a.name.localeCompare(b.name))
46
47
  .map(async (bookmark: BookmarkedReportData) => {
47
- return formatTableData(bookmark, bookmarkService, csrfToken, userConfig)
48
+ return formatTableData(bookmark, bookmarkService, csrfToken, userConfig, nestedBaseUrl)
48
49
  }),
49
50
  )
50
51
 
@@ -63,6 +64,7 @@ const formatTableData = async (
63
64
  bookmarkService: BookmarkService,
64
65
  csrfToken: string,
65
66
  userConfig: ReportStoreConfig,
67
+ nestedBaseUrl?: string,
66
68
  ) => {
67
69
  const { description, reportName, reportId, id, href, name, type, loadType } = bookmarksData
68
70
  const bookmarkHtml = await bookmarkService.createBookMarkToggleHtml({
@@ -74,6 +76,7 @@ const formatTableData = async (
74
76
  reportType: type,
75
77
  // We don't have the data here, and missing reports should never get into bookmarked, viewed or requested
76
78
  isMissing: false,
79
+ nestedBaseUrl,
77
80
  })
78
81
  return [
79
82
  {
@@ -163,14 +166,21 @@ export const renderBookmarkList = async ({
163
166
  maxRows?: number
164
167
  res: Response
165
168
  }) => {
166
- const { token, csrfToken, dprUser, bookmarks } = LocalsHelper.getValues(res)
169
+ const { token, csrfToken, dprUser, bookmarks, nestedBaseUrl } = LocalsHelper.getValues(res)
167
170
  const bookmarksData: BookmarkedReportData[] = await mapBookmarkIdsToDefinition(bookmarks, res, token, services)
168
171
 
169
172
  let formatted = await formatBookmarks(bookmarksData)
170
173
  const formattedCount = formatted.length
171
174
 
172
175
  if (maxRows) formatted = formatted.slice(0, maxRows)
173
- const tableData = await formatTable(bookmarksData, services.bookmarkService, csrfToken, dprUser.id, maxRows)
176
+ const tableData = await formatTable(
177
+ bookmarksData,
178
+ services.bookmarkService,
179
+ csrfToken,
180
+ dprUser.id,
181
+ maxRows,
182
+ nestedBaseUrl,
183
+ )
174
184
 
175
185
  const head = {
176
186
  ...(formatted.length && { href: '/dpr/my-reports/bookmarks/list' }),
@@ -12,7 +12,8 @@ class DprAsyncRequestList extends DprPollingStatusClass {
12
12
  this.POLLING_FREQUENCY = this.getPollingFrquency()
13
13
 
14
14
  this.requestList = document.getElementById('dpr-async-request-component')
15
- this.requestData = this.requestList.getAttribute('data-request-data')
15
+ const requestData = this.requestList.getAttribute('data-request-data')
16
+ this.requestData = requestData ? JSON.parse(requestData) : undefined
16
17
  this.csrfToken = this.requestList.getAttribute('data-csrf-token')
17
18
  this.removeActions = document.querySelectorAll('.dpr-remove-requested-report-button')
18
19
 
@@ -23,7 +24,7 @@ class DprAsyncRequestList extends DprPollingStatusClass {
23
24
  async initPollingIntervals() {
24
25
  await this.checkIfExpired()
25
26
 
26
- if (this.requestData) {
27
+ if (this.requestData && !this.allHaveInvalidIds()) {
27
28
  if (this.shouldPollExpired(this.requestData)) {
28
29
  this.expiredInterval = setInterval(async () => {
29
30
  await this.checkIfExpired()
@@ -38,11 +39,22 @@ class DprAsyncRequestList extends DprPollingStatusClass {
38
39
  }
39
40
  }
40
41
 
42
+ hasValidIds(metaData) {
43
+ const { id, reportId, executionId, tableId } = metaData
44
+ return id !== undefined && reportId !== undefined && executionId !== undefined && tableId !== undefined
45
+ }
46
+
47
+ allHaveInvalidIds() {
48
+ return this.requestData.every((meta) => {
49
+ return !this.hasValidIds(meta)
50
+ })
51
+ }
52
+
41
53
  async checkIfExpired() {
42
54
  await Promise.all(
43
- JSON.parse(this.requestData).map(async (metaData) => {
55
+ this.requestData.map(async (metaData) => {
44
56
  const { status, reportUrl } = metaData
45
- if (!this.EXPIRED_END_STATUSES.includes(status)) {
57
+ if (this.hasValidIds(metaData) && !this.EXPIRED_END_STATUSES.includes(status)) {
46
58
  const response = await this.getExpiredStatus(reportUrl, metaData, this.csrfToken)
47
59
 
48
60
  if (response && response.isExpired) {
@@ -56,9 +68,9 @@ class DprAsyncRequestList extends DprPollingStatusClass {
56
68
 
57
69
  async pollStatus() {
58
70
  await Promise.all(
59
- JSON.parse(this.requestData).map(async (metaData) => {
71
+ this.requestData.map(async (metaData) => {
60
72
  // Don't poll if current state is an end state
61
- if (!this.END_STATUSES.includes(metaData.status)) {
73
+ if (this.hasValidIds(metaData) && !this.END_STATUSES.includes(metaData.status)) {
62
74
  const response = await this.getRequestStatus(metaData, this.csrfToken)
63
75
 
64
76
  // Reload if new status is an end state
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/user-reports/utils.ts"],
4
- "sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n meta,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName || '',\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n status,\n type,\n ...(status && setDataFromStatus(status, reportDataCopy)),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url?.polling?.pathname,\n reportUrl: url?.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n if (href) {\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows = 20) => {\n return {\n amount: formattedCount,\n shown: maxRows && formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response): meta[] => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta?.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const polling = url?.polling\n const request = url?.request\n const report = url?.report\n\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = polling?.fullUrl\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = polling?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result: RenderTableListResponse = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n ...(maxRows && { maxRows }),\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({ services, res, maxRows = 6 }: { services: Services; res: Response; maxRows?: number }) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const columns = <string[]>req.query?.['columns']\n const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query\n const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters, true)\n const reqQuery = {\n ...filtersQuery,\n ...(columns && { columns }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n }\n const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n meta,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName || '',\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n status,\n type,\n ...(status && setDataFromStatus(status, reportDataCopy)),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url?.polling?.pathname,\n reportUrl: url?.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n if (href) {\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = id ? itemActionsHtml(href, id, type, status) : ''\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows = 20) => {\n return {\n amount: formattedCount,\n shown: maxRows && formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response): meta[] => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta?.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const polling = url?.polling\n const request = url?.request\n const report = url?.report\n\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = polling?.fullUrl\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = request?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = report?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = polling?.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result: RenderTableListResponse = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n ...(maxRows && { maxRows }),\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({ services, res, maxRows = 6 }: { services: Services; res: Response; maxRows?: number }) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const columns = <string[]>req.query?.['columns']\n const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query\n const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters, true)\n const reqQuery = {\n ...filtersQuery,\n ...(columns && { columns }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n }\n const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n if (executionId) await services.requestedReportService.updateLastViewed(executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["utils_exports", "__export", "utils_default", "init", "renderList", "setDataFromStatus", "updateExpiredStatus", "updateLastViewed", "__toCommonJS", "import_dayjs", "import_UserReports", "import_requestStatusHelper", "import_utils", "import_reportListsHelper", "import_localsHelper", "import_DateMapper", "import_UserStoreItemBuilder", "formatData", "reportData", "reportDataCopy", "executionId", "tableId", "variantName", "name", "reportId", "variantId", "id", "description", "query", "interactiveQuery", "status", "reportName", "dataProductDefinitionsPath", "reportType", "url", "summary", "interactiveSummary", "type", "formatTable", "data", "card", "formatTableRow", "statusClass", "itemActions", "href", "text", "timestamp", "filtersSummary", "createSummaryHtml", "getTotals", "formattedCount", "maxRows", "summaryHtml", "item", "interactiveSummaryHtml", "getMeta", "formattedData", "res", "nestedBaseUrl", "LocalsHelper", "d", "reportsData", "formattedDate", "time", "polling", "request", "report", "dateMapper", "DateMapper", "dayjs", "filterFunction", "csrfToken", "formatted", "tableData", "path", "req", "services", "dprUser", "requestedReports", "recentlyViewedReports", "bookmarkingEnabled", "requestedReportsList", "RequestedReportUtils", "viewedReportsList", "RecentlyViewedCardGroupUtils", "bookmarks", "BookmarklistUtils", "reportStateData", "userId", "filters", "executionData", "queryData", "columns", "selectedPage", "pageSize", "sortColumn", "sortedAsc", "filtersQuery", "FiltersUtils", "interactiveQueryData", "SelectedFiltersUtils", "recentlyViewedData", "UserStoreItemBuilder"]
7
7
  }
@@ -144,31 +144,31 @@ describe('AsyncRequestListUtils', () => {
144
144
  expect(result.meta?.length).toEqual(7)
145
145
 
146
146
  const v1Ready = <NodeJS.Dict<string>[]>result.tableData.rows[0]
147
- expect(v1Ready[3]!['html']).toContain(
147
+ expect(v1Ready[3]['html']).toContain(
148
148
  'http://localhost:3010/embedded/platform/dpr/view-report/async/report/request-examples/request-example-success/tblId_1729765628165/report',
149
149
  )
150
- expect(v1Ready[2]!['html']).toContain('FINISHED')
150
+ expect(v1Ready[2]['html']).toContain('FINISHED')
151
151
 
152
152
  const v1Failed = <NodeJS.Dict<string>[]>result.tableData.rows[1]
153
153
  const v1FailedRetryUrl =
154
154
  'http://localhost:3010/embedded/platform/async/report/request-examples/request-example-fail-status/request/exId_238947923'
155
- expect(v1Failed[2]!['html']).toContain('FAILED')
156
- expect(v1Failed[3]!['html']).toContain(v1FailedRetryUrl)
157
- expect(v1Failed[3]!['html']).toContain('remove')
155
+ expect(v1Failed[2]['html']).toContain('FAILED')
156
+ expect(v1Failed[3]['html']).toContain(v1FailedRetryUrl)
157
+ expect(v1Failed[3]['html']).toContain('remove')
158
158
 
159
159
  const v1Expired = <NodeJS.Dict<string>[]>result.tableData.rows[2]
160
160
  const v1ExpiredRetryUrl =
161
161
  'http://localhost:3010/embedded/platform/async/report/request-examples/request-example-expire/request?filters.field1=value1.3&filters.field3.start=2003-02-01&filters.field3.end=2006-05-04&sortColumn=field1&sortedAsc=true&filters.field2=value2.1'
162
- expect(v1Expired[2]!['html']).toContain('EXPIRED')
163
- expect(v1Expired[3]!['html']).toContain(v1ExpiredRetryUrl)
164
- expect(v1Expired[3]!['html']).toContain('remove')
162
+ expect(v1Expired[2]['html']).toContain('EXPIRED')
163
+ expect(v1Expired[3]['html']).toContain(v1ExpiredRetryUrl)
164
+ expect(v1Expired[3]['html']).toContain('remove')
165
165
 
166
166
  const v1Aborted = <NodeJS.Dict<string>[]>result.tableData.rows[3]
167
167
  const v1AbortedRetryUrl =
168
168
  'http://localhost:3010/embedded/platform/async/report/request-examples/request-example-success/request?filters.field1=value1.1&filters.field2=value2.3&filters.field3.start=2003-02-01&filters.field3.end=2006-05-04&filters.field7=2007-05-04&sortColumn=field1&sortedAsc=true&filters.field6=Value+6.1'
169
- expect(v1Aborted[2]!['html']).toContain('ABORTED')
170
- expect(v1Aborted[3]!['html']).toContain(v1AbortedRetryUrl)
171
- expect(v1Aborted[3]!['html']).toContain('remove')
169
+ expect(v1Aborted[2]['html']).toContain('ABORTED')
170
+ expect(v1Aborted[3]['html']).toContain(v1AbortedRetryUrl)
171
+ expect(v1Aborted[3]['html']).toContain('remove')
172
172
  })
173
173
 
174
174
  it('should return the render list with dashboards', async () => {
@@ -185,24 +185,24 @@ describe('AsyncRequestListUtils', () => {
185
185
  expect(result.meta?.length).toEqual(7)
186
186
 
187
187
  const v2Ready = <NodeJS.Dict<string>[]>result.tableData.rows[4]
188
- expect(v2Ready[3]!['html']).toContain(
188
+ expect(v2Ready[3]['html']).toContain(
189
189
  'http://localhost:3010/embedded/platform/async/dashboard/request-examples/test-dashboard-1/request/exId_238947923',
190
190
  )
191
- expect(v2Ready[2]!['html']).toContain('SUBMITTED')
191
+ expect(v2Ready[2]['html']).toContain('SUBMITTED')
192
192
 
193
193
  const v2Failed = <NodeJS.Dict<string>[]>result.tableData.rows[5]
194
194
  const v2FailedRetryUrl =
195
195
  'http://localhost:3010/embedded/platform/async/dashboard/request-examples/test-dashboard-2/request/exId_238947923'
196
- expect(v2Failed[2]!['html']).toContain('FAILED')
197
- expect(v2Failed[3]!['html']).toContain(v2FailedRetryUrl)
198
- expect(v2Failed[3]!['html']).toContain('remove')
196
+ expect(v2Failed[2]['html']).toContain('FAILED')
197
+ expect(v2Failed[3]['html']).toContain(v2FailedRetryUrl)
198
+ expect(v2Failed[3]['html']).toContain('remove')
199
199
 
200
200
  const v2Expired = <NodeJS.Dict<string>[]>result.tableData.rows[6]
201
201
  const v2ExpiredRetryUrl =
202
202
  'http://localhost:3010/embedded/platform/async/dashboard/request-examples/test-dashboard-3/request'
203
- expect(v2Expired[2]!['html']).toContain('EXPIRED')
204
- expect(v2Expired[3]!['html']).toContain(v2ExpiredRetryUrl)
205
- expect(v2Expired[3]!['html']).toContain('remove')
203
+ expect(v2Expired[2]['html']).toContain('EXPIRED')
204
+ expect(v2Expired[3]['html']).toContain(v2ExpiredRetryUrl)
205
+ expect(v2Expired[3]['html']).toContain('remove')
206
206
  })
207
207
  })
208
208
 
@@ -221,17 +221,17 @@ describe('AsyncRequestListUtils', () => {
221
221
  expect(result.meta?.length).toEqual(2)
222
222
 
223
223
  const v1Ready = <NodeJS.Dict<string>[]>result.tableData.rows[0]
224
- expect(v1Ready[3]!['html']).toContain(
224
+ expect(v1Ready[3]['html']).toContain(
225
225
  'http://localhost:3010/embedded/platform/async/report/request-examples/request-example-success/request/tblId_1729766362362/report',
226
226
  )
227
- expect(v1Ready[2]!['html']).toContain('READY')
227
+ expect(v1Ready[2]['html']).toContain('READY')
228
228
 
229
229
  const v1Expired = <NodeJS.Dict<string>[]>result.tableData.rows[1]
230
230
  const v1ExpiredRetryUrl =
231
231
  'http://localhost:3010/embedded/platform/async/report/request-examples/request-example-success/request?filters.field2=value2.3&filters.field3.start=2003-09-05&filters.field3.end=2007-05-01&filters.field7=2007-05-04&sortColumn=field1&sortedAsc=true&filters.field4=Inigo+Montoya'
232
- expect(v1Expired[2]!['html']).toContain('EXPIRED')
233
- expect(v1Expired[3]!['html']).toContain(v1ExpiredRetryUrl)
234
- expect(v1Expired[3]!['html']).toContain('remove')
232
+ expect(v1Expired[2]['html']).toContain('EXPIRED')
233
+ expect(v1Expired[3]['html']).toContain(v1ExpiredRetryUrl)
234
+ expect(v1Expired[3]['html']).toContain('remove')
235
235
  })
236
236
  })
237
237
  })