@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.18.3 → 4.20.0

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 (84) hide show
  1. package/dpr/components/_async/async-filters-form/view.njk +1 -1
  2. package/dpr/components/_async/async-polling/clientClass.mjs +0 -22
  3. package/dpr/components/_async/async-polling/view.njk +11 -8
  4. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  5. package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
  6. package/dpr/components/_catalogue/catalogue-list/utils.ts +50 -57
  7. package/dpr/components/_charts/utils.js +1 -1
  8. package/dpr/components/_charts/utils.js.map +3 -3
  9. package/dpr/components/_charts/utils.ts +17 -9
  10. package/dpr/components/_sync/sync-load/view.njk +1 -1
  11. package/dpr/components/user-reports/utils.js +1 -1
  12. package/dpr/components/user-reports/utils.js.map +2 -2
  13. package/dpr/components/user-reports/utils.ts +4 -4
  14. package/dpr/data/dashboardClient.js +1 -1
  15. package/dpr/data/dashboardClient.js.map +2 -2
  16. package/dpr/data/dashboardClient.ts +17 -0
  17. package/dpr/data/reportingClient.js +1 -1
  18. package/dpr/data/reportingClient.js.map +3 -3
  19. package/dpr/data/reportingClient.ts +1 -24
  20. package/dpr/middleware/setUpDprResources.js +1 -1
  21. package/dpr/middleware/setUpDprResources.js.map +3 -3
  22. package/dpr/middleware/setUpDprResources.ts +21 -3
  23. package/dpr/routes/authError.njk +10 -0
  24. package/dpr/routes/index.js +1 -1
  25. package/dpr/routes/index.js.map +3 -3
  26. package/dpr/routes/index.ts +7 -1
  27. package/dpr/routes/journeys/api-failures.cy.js +2 -0
  28. package/dpr/routes/journeys/api-failures.cy.js.map +7 -0
  29. package/dpr/routes/journeys/api-failures.cy.ts +377 -0
  30. package/dpr/routes/journeys/my-reports/bookmarks/service.js.map +2 -2
  31. package/dpr/routes/journeys/my-reports/bookmarks/service.ts +1 -0
  32. package/dpr/routes/journeys/request-report/controller.js +1 -1
  33. package/dpr/routes/journeys/request-report/controller.js.map +3 -3
  34. package/dpr/routes/journeys/request-report/controller.ts +25 -5
  35. package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
  36. package/dpr/routes/journeys/request-report/filters/controller.js.map +2 -2
  37. package/dpr/routes/journeys/request-report/filters/controller.ts +1 -1
  38. package/dpr/routes/journeys/request-report/routes.js +1 -1
  39. package/dpr/routes/journeys/request-report/routes.js.map +3 -3
  40. package/dpr/routes/journeys/request-report/routes.ts +16 -0
  41. package/dpr/routes/journeys/request-report/status/controller.js +1 -1
  42. package/dpr/routes/journeys/request-report/status/controller.js.map +3 -3
  43. package/dpr/routes/journeys/request-report/status/controller.ts +0 -17
  44. package/dpr/routes/journeys/request-report/status/routes.js +1 -1
  45. package/dpr/routes/journeys/request-report/status/routes.js.map +2 -2
  46. package/dpr/routes/journeys/request-report/status/routes.ts +0 -1
  47. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  48. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +2 -2
  49. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -4
  50. package/dpr/routes/journeys/view-report/sync/dashboard/controller.js +2 -0
  51. package/dpr/routes/journeys/view-report/sync/dashboard/controller.js.map +7 -0
  52. package/dpr/routes/journeys/view-report/sync/dashboard/controller.ts +39 -0
  53. package/dpr/routes/journeys/view-report/sync/dashboard/routes.js +2 -0
  54. package/dpr/routes/journeys/view-report/sync/dashboard/routes.js.map +7 -0
  55. package/dpr/routes/journeys/view-report/sync/dashboard/routes.ts +18 -0
  56. package/dpr/routes/journeys/view-report/sync/dashboard/utils.js +2 -0
  57. package/dpr/routes/journeys/view-report/sync/dashboard/utils.js.map +7 -0
  58. package/dpr/routes/journeys/view-report/sync/dashboard/utils.ts +149 -0
  59. package/dpr/routes/journeys/view-report/sync/load-report/controller.js +1 -1
  60. package/dpr/routes/journeys/view-report/sync/load-report/controller.js.map +3 -3
  61. package/dpr/routes/journeys/view-report/sync/load-report/controller.ts +43 -13
  62. package/dpr/routes/journeys/view-report/sync/report/routes.js +1 -1
  63. package/dpr/routes/journeys/view-report/sync/report/routes.js.map +3 -3
  64. package/dpr/routes/journeys/view-report/sync/report/routes.ts +2 -2
  65. package/dpr/routes/journeys/view-report/sync/routes.js +1 -1
  66. package/dpr/routes/journeys/view-report/sync/routes.js.map +3 -3
  67. package/dpr/routes/journeys/view-report/sync/routes.ts +2 -0
  68. package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
  69. package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +2 -2
  70. package/dpr/routes/journeys/view-report/sync/tests.cy.ts +21 -1
  71. package/dpr/routes/serviceProblem.njk +10 -0
  72. package/dpr/services/dashboardService.js +1 -1
  73. package/dpr/services/dashboardService.js.map +2 -2
  74. package/dpr/services/dashboardService.ts +9 -0
  75. package/dpr/types/ReportQuery.js +1 -1
  76. package/dpr/types/ReportQuery.js.map +2 -2
  77. package/dpr/types/ReportQuery.ts +1 -1
  78. package/dpr/types/api.d.js +1 -1
  79. package/dpr/types/api.d.js.map +1 -1
  80. package/dpr/types/api.d.ts +139 -3
  81. package/dpr/utils/datasetHelper.js +1 -1
  82. package/dpr/utils/datasetHelper.js.map +3 -3
  83. package/dpr/utils/datasetHelper.ts +18 -9
  84. package/package.json +6 -7
@@ -100,7 +100,7 @@
100
100
  {% endif %}
101
101
 
102
102
  {# SORT OPTIONS #}
103
- {% if sortBy.length > 0 and not interactive %}
103
+ {% if sortBy.length > 0 and not interactive and type !== 'dashboard' %}
104
104
  <div class="dpr-async-request-filters__section">
105
105
  <div class="dpr-async-request-filters__section--heading">
106
106
  <h2 class="govuk-heading-m govuk-!-margin-bottom-0">Sort</strong></h2>
@@ -20,7 +20,6 @@ class DprAsyncPolling extends DprPollingStatusClass {
20
20
  this.csrfToken = this.statusSection.getAttribute('data-csrf-token')
21
21
  this.reportUrl = this.statusSection.getAttribute('data-report-url')
22
22
 
23
- this.initCancelRequestButton()
24
23
  this.initPollingInterval()
25
24
  }
26
25
 
@@ -45,27 +44,6 @@ class DprAsyncPolling extends DprPollingStatusClass {
45
44
  }
46
45
  }
47
46
  }
48
-
49
- initCancelRequestButton() {
50
- if (this.cancelRequestButton) {
51
- const meta = JSON.parse(this.requestData)
52
- const csrfToken = this.cancelRequestButton.getAttribute('data-csrf-token')
53
- this.cancelRequestButton.addEventListener('click', async () => {
54
- await fetch(meta.pollingUrl, {
55
- method: 'delete',
56
- headers: {
57
- Accept: 'application/json',
58
- 'Content-Type': 'application/json',
59
- 'CSRF-Token': csrfToken,
60
- },
61
- })
62
- .then(() => {
63
- window.location.reload()
64
- })
65
- .catch((error) => console.error('Error:', error))
66
- })
67
- }
68
- }
69
47
  }
70
48
 
71
49
  export { DprAsyncPolling }
@@ -66,14 +66,17 @@
66
66
  html: "<p>Your " + type + " will be generated shortly.</p> <p>You may navigate away from this page at anytime. Please visit the homepage to monitor your report status.</p>"
67
67
  }) }}
68
68
 
69
- {{ govukButton({
70
- id: "cancel-async-request",
71
- text: "Cancel request",
72
- classes: "govuk-button--secondary govuk-!-margin-bottom-0",
73
- attributes: {
74
- 'data-csrf-token': csrfToken
75
- }
76
- }) }}
69
+ <form method="post" action="./cancel">
70
+ <input type="hidden" name="_csrf" value="{{ csrfToken }}">
71
+ {{ govukButton({
72
+ id: "cancel-async-request",
73
+ text: "Cancel request",
74
+ classes: "govuk-button--secondary govuk-!-margin-bottom-0",
75
+ attributes: {
76
+ 'data-csrf-token': csrfToken
77
+ }
78
+ }) }}
79
+ </form>
77
80
 
78
81
  {% endif %}
79
82
 
@@ -1,2 +1,2 @@
1
- "use strict";var N=Object.create;var b=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var O=(e,t)=>{for(var o in t)b(e,o,{get:t[o],enumerable:!0})},M=(e,t,o,D)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of E(t))!F.call(e,n)&&n!==o&&b(e,n,{get:()=>t[n],enumerable:!(D=P(t,n))||D.enumerable});return e};var R=(e,t,o)=>(o=e!=null?N(V(e)):{},M(t||!e||!e.__esModule?b(o,"default",{value:e,enumerable:!0}):o,e)),U=e=>M(b({},"__esModule",{value:!0}),e);var $={};O($,{default:()=>Y,getReportsList:()=>A});module.exports=U($);var d=require("../../../types/UserReports"),w=R(require("../../show-more/utils")),l=require("../../../utils/reportListsHelper"),x=R(require("../../../utils/localsHelper"));const A=async(e,t,o)=>{const{definitions:D,csrfToken:n,bookmarkingEnabled:H,dprUser:L}=x.default.getValues(e),v=D.sort((a,i)=>a.name<i.name?-1:a.name>i.name?1:0).flatMap(a=>{const{id:i,name:g,description:m,variants:T,dashboards:f,authorised:y}=a,p=T.map(r=>{const{id:s,name:u,description:c,isMissing:S}=r,I=r.loadType||d.LoadType.ASYNC;return{reportName:g,reportId:i,id:s,name:u,description:c||"",type:d.ReportType.REPORT,loadType:I,authorised:y,isMissing:S,...m&&m.length&&{reportDescription:m}}});let h=[];f&&(h=f.map(r=>{const{id:s,name:u,description:c}=r;return{reportName:g,reportId:i,id:s,name:u,description:c||"",type:d.ReportType.DASHBOARD,reportDescription:m||"",authorised:y,isMissing:!1,loadType:d.LoadType.ASYNC}}));const k=[...h,...p];return k.sort((r,s)=>r.name<s.name?-1:r.name>s.name?1:0),k}),B=await t.bookmarkService.getState(L.id),C=await Promise.all(v.map(async a=>{const{id:i,name:g,description:m,reportName:T,reportId:f,reportDescription:y,type:p,loadType:h,authorised:k,isMissing:r}=a,s=m||y||"",u=(0,l.setInitialHref)(h,p,f,i,e,r);let c;return(o?.bookmarkingEnabled!==void 0?o?.bookmarkingEnabled:H)&&(c=await t.bookmarkService.createBookMarkToggleHtml({userConfig:B,reportId:f,id:i,csrfToken:n,ctxId:"reports-list",reportType:p,isMissing:!!r})),[{html:`<p class="govuk-body-s">${T}</p>`},{html:(0,l.createListItemProductMin)(g,p)},{html:w.default.createShowMoreHtml(s)},{html:(0,l.createListActions)(u,p,h,c,k,r)}]}));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:C,id:"dpr-reports-catalogue"}};var Y={getReportsList:A};0&&(module.exports={getReportsList});
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});
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(\n (\n def: components['schemas']['ReportDefinitionSummary'] & {\n dashboards: components['schemas']['DashboardDefinition'][]\n authorised: boolean\n },\n ) => {\n const { id: reportId, name: reportName, description: reportDescription, variants, dashboards, authorised } = def\n\n const variantsArray: DefinitionData[] = variants.map(\n (variant: components['schemas']['VariantDefinitionSummary']) => {\n const { id, name, description, isMissing } = variant\n\n // NOTE: loadType added to VariantDefinitionSummary mocked data to dictate the load/request journey. Not present in API response. To discuss\n const loadType = variant.loadType || LoadType.ASYNC\n\n return {\n reportName,\n reportId,\n id,\n name,\n description: description || '',\n type: ReportType.REPORT,\n loadType: loadType as LoadType,\n authorised,\n isMissing,\n ...(reportDescription && reportDescription.length && { reportDescription }),\n }\n },\n )\n\n let dashboardsArray: DefinitionData[] = []\n if (dashboards) {\n dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinition']) => {\n const { id, name, description } = dashboard\n return {\n reportName,\n reportId,\n id,\n name,\n description: description || '',\n type: ReportType.DASHBOARD,\n reportDescription: reportDescription || '',\n authorised,\n isMissing: false,\n loadType: LoadType.ASYNC,\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\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", "b", "def", "reportId", "reportName", "reportDescription", "variants", "dashboards", "authorised", "variantsArray", "variant", "id", "name", "description", "isMissing", "loadType", "dashboardsArray", "dashboard", "mergedArray", "a", "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 } = 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"]
7
7
  }
@@ -24,67 +24,60 @@ export const getReportsList = async (
24
24
  )
25
25
 
26
26
  // Sort by variant/dashboard name
27
- const sortedVariants = sortedDefinitions.flatMap(
28
- (
29
- def: components['schemas']['ReportDefinitionSummary'] & {
30
- dashboards: components['schemas']['DashboardDefinition'][]
31
- authorised: boolean
32
- },
33
- ) => {
34
- const { id: reportId, name: reportName, description: reportDescription, variants, dashboards, authorised } = def
35
-
36
- const variantsArray: DefinitionData[] = variants.map(
37
- (variant: components['schemas']['VariantDefinitionSummary']) => {
38
- const { id, name, description, isMissing } = variant
39
-
40
- // NOTE: loadType added to VariantDefinitionSummary mocked data to dictate the load/request journey. Not present in API response. To discuss
41
- const loadType = variant.loadType || LoadType.ASYNC
42
-
43
- return {
44
- reportName,
45
- reportId,
46
- id,
47
- name,
48
- description: description || '',
49
- type: ReportType.REPORT,
50
- loadType: loadType as LoadType,
51
- authorised,
52
- isMissing,
53
- ...(reportDescription && reportDescription.length && { reportDescription }),
54
- }
55
- },
56
- )
57
-
58
- let dashboardsArray: DefinitionData[] = []
59
- if (dashboards) {
60
- dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinition']) => {
61
- const { id, name, description } = dashboard
62
- return {
63
- reportName,
64
- reportId,
65
- id,
66
- name,
67
- description: description || '',
68
- type: ReportType.DASHBOARD,
69
- reportDescription: reportDescription || '',
70
- authorised,
71
- isMissing: false,
72
- loadType: LoadType.ASYNC,
73
- }
74
- })
75
- }
27
+ const sortedVariants = sortedDefinitions.flatMap((def: components['schemas']['ReportDefinitionSummary']) => {
28
+ const { id: reportId, name: reportName, description: reportDescription, variants, dashboards, authorised } = def
29
+
30
+ const productBase = {
31
+ reportName,
32
+ reportId,
33
+ authorised,
34
+ reportDescription: reportDescription || '',
35
+ }
36
+
37
+ let variantsArray: DefinitionData[] = []
38
+ if (variants) {
39
+ variantsArray = variants.map((variant: components['schemas']['VariantDefinitionSummary']) => {
40
+ const { id, name, description, isMissing, loadType } = variant
41
+
42
+ return {
43
+ ...productBase,
44
+ type: ReportType.REPORT,
45
+ loadType: <LoadType>loadType || LoadType.ASYNC,
46
+ id,
47
+ name,
48
+ description: description || '',
49
+ isMissing,
50
+ }
51
+ })
52
+ }
76
53
 
77
- const mergedArray = [...dashboardsArray, ...variantsArray]
54
+ let dashboardsArray: DefinitionData[] = []
55
+ if (dashboards) {
56
+ dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinitionSummary']) => {
57
+ const { id, name, description, loadType } = dashboard
78
58
 
79
- mergedArray.sort((a: DefinitionData, b: DefinitionData) => {
80
- if (a.name < b.name) return -1
81
- if (a.name > b.name) return 1
82
- return 0
59
+ return {
60
+ ...productBase,
61
+ type: ReportType.DASHBOARD,
62
+ loadType: <LoadType>loadType || LoadType.ASYNC,
63
+ id,
64
+ name,
65
+ description: description || '',
66
+ isMissing: false,
67
+ }
83
68
  })
69
+ }
84
70
 
85
- return mergedArray
86
- },
87
- )
71
+ const mergedArray = [...dashboardsArray, ...variantsArray]
72
+
73
+ mergedArray.sort((a: DefinitionData, b: DefinitionData) => {
74
+ if (a.name < b.name) return -1
75
+ if (a.name > b.name) return 1
76
+ return 0
77
+ })
78
+
79
+ return mergedArray
80
+ })
88
81
 
89
82
  const userConfig = await services.bookmarkService.getState(dprUser.id)
90
83
  const rows = await Promise.all(
@@ -1,2 +1,2 @@
1
- "use strict";var A=Object.create;var R=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var Y=(a,s)=>{for(var t in s)R(a,t,{get:s[t],enumerable:!0})},T=(a,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of $(s))!H.call(a,o)&&o!==t&&R(a,o,{get:()=>s[o],enumerable:!(e=G(s,o))||e.enumerable});return a};var y=(a,s,t)=>(t=a!=null?A(F(a)):{},T(s||!a||!a.__esModule?R(t,"default",{value:a,enumerable:!0}):t,a)),j=a=>T(R({},"__esModule",{value:!0}),a);var Q={};Y(Q,{createChart:()=>J,createMatrixChart:()=>N,createTimeseriesCharts:()=>K,default:()=>P});module.exports=j(Q);var S=y(require("dayjs")),I=y(require("dayjs/plugin/weekOfYear")),h=y(require("../../utils/datasetHelper")),x=y(require("../_dashboards/dashboard-list/utils")),L=require("../_inputs/granular-date-range/types"),B=y(require("./chart/heatmap/HeatmapChart"));S.default.extend(I.default);const J=(a,s)=>{let t,e,o;const{dataSetRows:n,snapshotData:l}=v(a,s);return n.length&&(e=O(a,l),t=X(a,n),o=V(a,n)),{details:o,table:t,chart:e}},K=(a,s)=>{let t,e,o;const{latestData:n,dataSetRows:l,timeseriesData:d}=k(a,s);return l.length&&(e=z(a,d),t=M(a,d),o=V(a,n,!0)),{details:o,table:t,chart:e}},N=(a,s,t)=>{let e,o,n,l=L.Granularity.DAILY;Object.keys(t).forEach(D=>{D.includes("granularity")&&(l=t[D])});const{latestData:d,dataSetRows:i,timeseriesData:r}=k(a,s);return i.length&&(o=new B.default(r,l,a).build(),e=M(a,r),n=V(a,d,!0)),{details:n,table:e,chart:o}},v=(a,s)=>{const t=h.default.getLastestDataset(s),e=h.default.getDatasetRows(a,t),o=h.default.filterRowsByDisplayColumns(a,e,!0);return{dataSetRows:e,snapshotData:o}},k=(a,s)=>{const t=h.default.getLastestDataset(s),e=h.default.getDatasetRows(a,s),o=h.default.filterRowsByDisplayColumns(a,e,!0);return{latestData:t,dataSetRows:e,timeseriesData:o}},V=(a,s,t=!1)=>{const e=[],o=E(a,s,t);return s[0]?.ts.raw&&e.push({label:"Values for:",value:s[0]?.ts.raw}),{meta:e,headlines:o}},E=(a,s,t=!1)=>{const e=[],{columns:o}=a,{measures:n}=o,l=!!n.find(u=>u.axis);let d,i,r,D;if(t){if(i=n.find(u=>u.id!=="ts"),i){const{id:u}=i,{raw:m}=s[0][u];D=`${s[0].ts.raw}`,r=m?Number(m):void 0,r&&(d={label:D,value:r})}}else if(i=l?n.find(u=>u.axis&&u.axis==="y"):n[0],i){const u=i.display?.toLowerCase();D=u?`Total ${u}`:"Total",r=s.reduce((m,c)=>{if(i){const{id:b}=i,{raw:p}=c[b];if(p)return m+Number(p)}return m},0),d={label:D,value:r}}return d&&e.push(d),e},O=(a,s)=>{const{type:t,columns:e}=a,{measures:o}=e,n=!!o.find(r=>r.axis);let l,d,i;if(n)({labels:l,unit:d,datasets:i}=U(e,s));else{const r=W(e,s);l=r.labels,d=r.unit,i=r.datasets}return{type:t,unit:d,data:{labels:l,datasets:i}}},W=(a,s)=>{const{keys:t,measures:e}=a,o=e.map(i=>i.display||""),n=t?t[t.length-1]?.id:void 0,l=e[0].unit?e[0].unit:void 0,d=s.map(i=>{const r=n&&i[n]?`${i[n].raw}`:"All",D=e.map(m=>{const c=m.id;return i[c]&&i[c].raw?Number(i[c].raw):0}),u=D.reduce((m,c)=>m+c,0);return{label:r,data:D,total:u}});return{labels:o,unit:l,datasets:d}},U=(a,s)=>{const{measures:t,keys:e}=a,o=t.find(u=>u.axis==="x")||t[0],n=t.find(u=>u.axis==="y")||t[1];if(!o||!n)throw new Error("No X of Y Axis found in definition");const l=n?.unit||void 0,d=h.default.getGroupKey(s,e),i=d?h.default.groupRowsByKey(s,d.id):[s],r=i[0]?.map(u=>{const{id:m}=o,c=u[m];return c?`${c.raw}`:""}),D=i.map(u=>{const m=u.map(b=>{const{id:p}=n,f=b[p],w=f&&f.raw?Number(f.raw):0;return Number(w)});let c="";if(d){const b=d.id,p=u[0];c=p&&p[b]?`${p[b].raw}`:""}else c=n.display||c;return{label:c,data:m,total:m.reduce((b,p)=>b+p,0)}});return{labels:r,unit:l,datasets:D}},X=(a,s)=>{const{columns:t}=a,{measures:e}=t,l=[...t.keys||[],...e].map(r=>({text:r.display||""})),d=h.default.filterRowsByDisplayColumns(a,s,!0),i=x.default.createTableRows(d);return{head:l,rows:i}},z=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t,n=o[0].unit?o[0].unit:void 0,l=a.type.split("-")[0],i=h.default.getGroupKey(s,e)?.id,r=h.default.groupRowsByTimestamp(s),D=r.map(c=>c[0].ts.raw),u=r[0].length,m=[];for(let c=0;c<u;c+=1){const b=r.map(g=>{const{raw:C}=g[c][o[1].id];return C?Number(C):0}),p=b.reduce((g,C)=>g+C,0),f=r[0][c][i].raw,w=f||"";m.push({data:b,label:w,total:p})}return{type:l,unit:n,timeseries:!0,data:{labels:D,datasets:m}}},M=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t;let n=s.flat(),l=[...o];if(s.length>1){const r=l.findIndex(m=>m.id==="ts"),D=l[r];l.splice(r,1),l=[...e?e.filter(m=>m.id!=="ts"):[],...l],l.unshift(D)}else n=h.default.filterRowsByDisplayColumns(a,n);const d=l.map(r=>({text:r.display})),i=x.default.createTableRows(n);return{head:d,rows:i}};var P={createChart:J,createTimeseriesCharts:K,createMatrixChart:N};0&&(module.exports={createChart,createMatrixChart,createTimeseriesCharts});
1
+ "use strict";var G=Object.create;var w=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var Y=(a,s)=>{for(var t in s)w(a,t,{get:s[t],enumerable:!0})},k=(a,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of v(s))!H.call(a,o)&&o!==t&&w(a,o,{get:()=>s[o],enumerable:!(e=$(s,o))||e.enumerable});return a};var C=(a,s,t)=>(t=a!=null?G(E(a)):{},k(s||!a||!a.__esModule?w(t,"default",{value:a,enumerable:!0}):t,a)),j=a=>k(w({},"__esModule",{value:!0}),a);var _={};Y(_,{createChart:()=>K,createMatrixChart:()=>A,createTimeseriesCharts:()=>N,default:()=>Z});module.exports=j(_);var I=C(require("dayjs")),L=C(require("dayjs/plugin/weekOfYear")),p=C(require("../../utils/datasetHelper")),x=C(require("../_dashboards/dashboard-list/utils")),B=require("../_inputs/granular-date-range/types"),J=C(require("./chart/heatmap/HeatmapChart"));I.default.extend(L.default);const K=(a,s)=>{let t,e,o;const{dataSetRows:i,snapshotData:l}=O(a,s);return i.length&&(e=U(a,l),t=P(a,i),o=V(a,i)),{details:o,table:t,chart:e}},N=(a,s)=>{let t,e,o;const{latestData:i,dataSetRows:l,timeseriesData:d}=M(a,s);return l.length&&(e=Q(a,d),t=S(a,d),o=V(a,i,!0)),{details:o,table:t,chart:e}},A=(a,s,t)=>{let e,o,i,l=B.Granularity.DAILY;Object.keys(t).forEach(D=>{D.includes("granularity")&&(l=t[D])});const{latestData:d,dataSetRows:r,timeseriesData:n}=M(a,s);return r.length&&(o=new J.default(n,l,a).build(),e=S(a,n),i=V(a,d,!0)),{details:i,table:e,chart:o}},O=(a,s)=>{const t=p.default.getLastestDataset(s),e=p.default.getDatasetRows(a,t),o=p.default.filterRowsByDisplayColumns(a,e,!0);return{dataSetRows:e,snapshotData:o}},M=(a,s)=>{const t=p.default.getLastestDataset(s),e=p.default.getDatasetRows(a,s),o=p.default.filterRowsByDisplayColumns(a,e,!0);return{latestData:t,dataSetRows:e,timeseriesData:o}},V=(a,s,t=!1)=>{const e=[],o=W(a,s,t);return s[0]?.ts?.raw&&e.push({label:"Values for:",value:s[0]?.ts.raw}),{meta:e,headlines:o}},W=(a,s,t=!1)=>{const e=[],{columns:o}=a,{measures:i}=o,l=!!i.find(u=>u.axis);let d,r,n,D;if(t){if(r=i.find(u=>u.id!=="ts"),r){const{id:u}=r,{raw:c}=s[0][u];D=`${s[0].ts.raw}`,n=c?Number(c):void 0,n&&(d={label:D,value:n})}}else if(r=l?i.find(u=>u.axis&&u.axis==="y"):i[0],r){const u=r.display?.toLowerCase();D=u?`Total ${u}`:"Total",n=s.reduce((c,m)=>{if(r){const{id:h}=r,{raw:b}=m[h];if(b)return c+Number(b)}return c},0),d={label:D,value:n}}return d&&e.push(d),e},U=(a,s)=>{const{type:t,columns:e}=a,{measures:o}=e,i=!!o.find(n=>n.axis);let l,d,r;if(i)({labels:l,unit:d,datasets:r}=z(e,s));else{const n=X(e,s);l=n.labels,d=n.unit,r=n.datasets}return{type:t,unit:d,data:{labels:l,datasets:r}}},X=(a,s)=>{const{keys:t,measures:e}=a,o=e.map(r=>r.display||""),i=t?t[t.length-1]?.id:void 0,l=e[0].unit?e[0].unit:void 0,d=s.map(r=>{const n=i&&r[i]?`${r[i].raw}`:"All",D=e.map(c=>{const m=c.id;return r[m]&&r[m].raw?Number(r[m].raw):0}),u=D.reduce((c,m)=>c+m,0);return{label:n,data:D,total:u}});return{labels:o,unit:l,datasets:d}},z=(a,s)=>{const{measures:t,keys:e}=a,o=t.find(u=>u.axis==="x")||t[0],i=t.find(u=>u.axis==="y")||t[1];if(!o||!i)throw new Error("No X of Y Axis found in definition");const l=i?.unit||void 0,d=p.default.getGroupKey(s,e),r=d?p.default.groupRowsByKey(s,d.id):[s],n=r.flatMap(u=>u.map(c=>{const{id:m}=o,h=c[m];return h?`${h.raw}`:""})),D=r.map(u=>{const c=Array(n.length);u.forEach(h=>{const{id:b}=i,{id:R}=o,g=h[R],f=h[b],y=f&&f.raw?Number(f.raw):0,T=n.findIndex(F=>F===g.raw);T!==-1&&(c[T]=Number(y))});let m="";if(d){const h=d.id,b=u[0];m=b&&b[h]?`${b[h].raw}`:""}else m=i.display||m;return{label:m,data:c,total:c.reduce((h,b)=>h+b,0)}});return{labels:n,unit:l,datasets:D}},P=(a,s)=>{const{columns:t}=a,{measures:e}=t,l=[...t.keys||[],...e].map(n=>({text:n.display||""})),d=p.default.filterRowsByDisplayColumns(a,s,!0),r=x.default.createTableRows(d);return{head:l,rows:r}},Q=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t,i=o[0].unit?o[0].unit:void 0,l=a.type.split("-")[0],r=p.default.getGroupKey(s,e)?.id,n=p.default.groupRowsByTimestamp(s),D=n.map(m=>m[0].ts.raw),u=n[0].length,c=[];for(let m=0;m<u;m+=1){const h=n.map(f=>{const{raw:y}=f[m][o[1].id];return y?Number(y):0}),b=h.reduce((f,y)=>f+y,0),R=n[0][m][r].raw,g=R||"";c.push({data:h,label:g,total:b})}return{type:l,unit:i,timeseries:!0,data:{labels:D,datasets:c}}},S=(a,s)=>{const{columns:t}=a,{keys:e,measures:o}=t;let i=s.flat(),l=[...o];if(s.length>1){const n=l.findIndex(c=>c.id==="ts"),D=l[n];l.splice(n,1),l=[...e?e.filter(c=>c.id!=="ts"):[],...l],l.unshift(D)}else i=p.default.filterRowsByDisplayColumns(a,i);const d=l.map(n=>({text:n.display})),r=x.default.createTableRows(i);return{head:d,rows:r}};var Z={createChart:K,createTimeseriesCharts:N,createMatrixChart:A};0&&(module.exports={createChart,createMatrixChart,createTimeseriesCharts});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/_charts/utils.ts"],
4
- "sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport { ChartDetails, ChartMetaData } from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\nimport { components } from '../../types/api'\nimport {\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n DashboardVisualisatonCardData,\n MoJTable,\n} from '../_dashboards/dashboard-visualisation/types'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData | undefined => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.['ts'].raw) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.['ts'].raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n let headline: ChartMetaData | undefined\n\n let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n let value: number | undefined\n let label: string\n\n if (timeseries) {\n headlineColumn = measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = data[0][id]\n label = `${data[0]['ts'].raw}`\n value = raw ? Number(raw) : undefined\n\n if (value) {\n headline = {\n label,\n value,\n }\n }\n }\n } else {\n headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n const display = headlineColumn.display?.toLowerCase()\n label = display ? `Total ${display}` : 'Total'\n value = data.reduce((acc: number, d: DashboardDataResponse) => {\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = d[id]\n if (raw) {\n return acc + Number(raw)\n }\n }\n return acc\n }, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n if (headline) headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n snapshotData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: DashboardVisualisationDataSet[]\n\n if (!isListChart) {\n const chart = buildChart(columns, snapshotData)\n labels = chart.labels\n unit = chart.unit\n datasets = chart.datasets\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display || '')\n const labelId = keys ? (keys[keys.length - 1]?.id as keyof DashboardDataResponse) : undefined\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = labelId && row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as DashboardVisualisationDataSet\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { measures, keys } = columns\n\n const xAxisColumn = measures.find((col) => col.axis === 'x') || measures[0]\n const yAxisColumn = measures.find((col) => col.axis === 'y') || measures[1]\n\n if (!xAxisColumn || !yAxisColumn) {\n throw new Error('No X of Y Axis found in definition')\n }\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(rawData, keys)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData[0]?.map((row) => {\n const { id: xId } = xAxisColumn\n const field = row[xId]\n return field ? `${field.raw}` : ''\n })\n\n const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {\n const data = groupData.map((row) => {\n const { id: yId } = yAxisColumn\n const field = row[yId]\n const raw = field && field.raw ? Number(field.raw) : 0\n return Number(raw)\n })\n\n let label = ''\n if (groupKey) {\n const groupKeyId = groupKey.id\n const groupRow = groupData[0]\n label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''\n } else {\n label = yAxisColumn.display || label\n }\n\n return {\n label,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { measures } = columns\n const keys = columns.keys || []\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display || '' }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(timeseriesData, keys)\n const labelId = groupKey?.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0]['ts'].raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: DashboardVisualisationDataSet[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n const { raw } = timeperiod[index][measures[1].id]\n return raw ? Number(raw) : 0\n })\n const total = data.reduce((a, c) => a + c, 0)\n const rawValue = timeBlockData[0][index][labelId].raw\n const label = rawValue ? <string>rawValue : ''\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys ? keys.filter((k) => k.id !== 'ts') : []\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "id", "raw", "display", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "c", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "xId", "field", "groupData", "yId", "groupKeyId", "groupRow", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "rawValue", "flatTimeseriesData", "headerColumns", "timestampIndex", "timestampCol", "k"]
4
+ "sourcesContent": ["import dayjs from 'dayjs'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport { ChartDetails, ChartMetaData } from '../../types/Charts'\nimport { DashboardDataResponse } from '../../types/Metrics'\nimport DatasetHelper from '../../utils/datasetHelper'\nimport DashboardListUtils from '../_dashboards/dashboard-list/utils'\nimport { Granularity } from '../_inputs/granular-date-range/types'\nimport HeatmapChart from './chart/heatmap/HeatmapChart'\nimport { components } from '../../types/api'\nimport {\n DashboardVisualisationData,\n DashboardVisualisationDataSet,\n DashboardVisualisatonCardData,\n MoJTable,\n} from '../_dashboards/dashboard-visualisation/types'\n\ndayjs.extend(weekOfYear)\n\nexport const createChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData | undefined => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { dataSetRows, snapshotData } = getDataForSnapshotCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createSnapshotChart(chartDefinition, snapshotData)\n table = createSnapshotTable(chartDefinition, dataSetRows)\n details = getChartDetails(chartDefinition, dataSetRows)\n }\n\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n): DashboardVisualisatonCardData => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = createTimeseriesChart(chartDefinition, timeseriesData)\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nexport const createMatrixChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n query: Record<string, string | string[]>,\n) => {\n let table: MoJTable | undefined\n let chart: DashboardVisualisationData | undefined\n let details: ChartDetails | undefined\n let granularity: Granularity = Granularity.DAILY\n\n Object.keys(query).forEach((key) => {\n if (key.includes('granularity')) {\n granularity = <Granularity>query[key]\n }\n })\n\n const { latestData, dataSetRows, timeseriesData } = getDataForTimeseriesCharts(chartDefinition, rawData)\n if (dataSetRows.length) {\n chart = new HeatmapChart(timeseriesData, granularity, chartDefinition).build()\n table = createTimeseriesTable(chartDefinition, timeseriesData)\n details = getChartDetails(chartDefinition, latestData, true)\n }\n return {\n details,\n table,\n chart,\n }\n}\n\nconst getDataForSnapshotCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const data = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, data)\n const snapshotData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n dataSetRows,\n snapshotData,\n }\n}\n\nconst getDataForTimeseriesCharts = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const latestData = DatasetHelper.getLastestDataset(rawData)\n const dataSetRows = DatasetHelper.getDatasetRows(chartDefinition, rawData)\n const timeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, dataSetRows, true)\n\n return {\n latestData,\n dataSetRows,\n timeseriesData,\n }\n}\n\nconst getChartDetails = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n): ChartDetails => {\n const meta: ChartMetaData[] = []\n const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)\n\n if (data[0]?.['ts']?.raw) {\n meta.push({\n label: 'Values for:',\n value: data[0]?.['ts'].raw,\n })\n }\n\n return {\n meta,\n headlines,\n }\n}\n\nconst createHeadlines = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n timeseries = false,\n) => {\n const headlines: ChartMetaData[] = []\n const { columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n let headline: ChartMetaData | undefined\n\n let headlineColumn: components['schemas']['DashboardVisualisationColumnDefinition'] | undefined\n let value: number | undefined\n let label: string\n\n if (timeseries) {\n headlineColumn = measures.find((col) => col.id !== 'ts')\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = data[0][id]\n label = `${data[0]['ts'].raw}`\n value = raw ? Number(raw) : undefined\n\n if (value) {\n headline = {\n label,\n value,\n }\n }\n }\n } else {\n headlineColumn = !isListChart ? measures[0] : measures.find((col) => col.axis && col.axis === 'y')\n\n if (headlineColumn) {\n const display = headlineColumn.display?.toLowerCase()\n label = display ? `Total ${display}` : 'Total'\n value = data.reduce((acc: number, d: DashboardDataResponse) => {\n if (headlineColumn) {\n const { id } = headlineColumn\n const { raw } = d[id]\n if (raw) {\n return acc + Number(raw)\n }\n }\n return acc\n }, 0)\n\n headline = {\n label,\n value,\n }\n }\n }\n\n if (headline) headlines.push(headline)\n\n return headlines\n}\n\nconst createSnapshotChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n snapshotData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { type, columns } = chartDefinition\n const { measures } = columns\n const isListChart = !!measures.find((col) => col.axis)\n\n let labels: string[]\n let unit\n let datasets: DashboardVisualisationDataSet[]\n\n if (!isListChart) {\n const chart = buildChart(columns, snapshotData)\n labels = chart.labels\n unit = chart.unit\n datasets = chart.datasets\n } else {\n ;({ labels, unit, datasets } = buildChartFromListData(columns, snapshotData))\n }\n\n return {\n type,\n unit,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst buildChart = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { keys, measures } = columns\n const labels = measures.map((col) => col.display || '')\n const labelId = keys ? (keys[keys.length - 1]?.id as keyof DashboardDataResponse) : undefined\n const unit = measures[0].unit ? measures[0].unit : undefined\n\n const datasets = rawData.map((row) => {\n const label = labelId && row[labelId] ? `${row[labelId].raw}` : 'All'\n const data = measures.map((c) => {\n const rowId = c.id as keyof DashboardDataResponse\n return row[rowId] && row[rowId].raw ? Number(row[rowId].raw) : 0\n })\n const total = data.reduce((acc: number, val: number) => acc + val, 0)\n return { label, data, total } as DashboardVisualisationDataSet\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst buildChartFromListData = (\n columns: components['schemas']['DashboardVisualisationColumnsDefinition'],\n rawData: DashboardDataResponse[],\n) => {\n const { measures, keys } = columns\n\n const xAxisColumn = measures.find((col) => col.axis === 'x') || measures[0]\n const yAxisColumn = measures.find((col) => col.axis === 'y') || measures[1]\n\n if (!xAxisColumn || !yAxisColumn) {\n throw new Error('No X of Y Axis found in definition')\n }\n\n const unit = yAxisColumn?.unit || undefined\n const groupKey = DatasetHelper.getGroupKey(rawData, keys)\n const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]\n\n const labels = groupsData.flatMap((gd) => {\n return gd.map((row) => {\n const { id: xId } = xAxisColumn\n const field = row[xId]\n return field ? `${field.raw}` : ''\n })\n })\n\n const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {\n const data = Array(labels.length)\n groupData.forEach((row) => {\n const { id: yId } = yAxisColumn\n const { id: xId } = xAxisColumn\n const labelField = row[xId]\n const valueField = row[yId]\n const raw = valueField && valueField.raw ? Number(valueField.raw) : 0\n const dataIndex = labels.findIndex((l) => l === labelField.raw)\n if (dataIndex !== -1) {\n data[dataIndex] = Number(raw)\n }\n })\n\n let label = ''\n if (groupKey) {\n const groupKeyId = groupKey.id\n const groupRow = groupData[0]\n label = groupRow && groupRow[groupKeyId] ? `${groupRow[groupKeyId].raw}` : ''\n } else {\n label = yAxisColumn.display || label\n }\n\n return {\n label,\n data,\n total: data.reduce((acc: number, val: number) => acc + val, 0),\n }\n })\n\n return {\n labels,\n unit,\n datasets,\n }\n}\n\nconst createSnapshotTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n data: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { measures } = columns\n const keys = columns.keys || []\n\n const headerColumns = [...keys, ...measures]\n const head = headerColumns.map((column) => {\n return { text: column.display || '' }\n })\n\n const filteredRowData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, data, true)\n const rows = DashboardListUtils.createTableRows(filteredRowData)\n\n return {\n head,\n rows,\n }\n}\n\nconst createTimeseriesChart = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): DashboardVisualisationData => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n const unit = measures[0].unit ? measures[0].unit : undefined\n const type = <components['schemas']['DashboardVisualisationDefinition']['type']>chartDefinition.type.split('-')[0]\n const groupKey = DatasetHelper.getGroupKey(timeseriesData, keys)\n const labelId = groupKey?.id as keyof DashboardDataResponse\n\n const timeBlockData = DatasetHelper.groupRowsByTimestamp(timeseriesData)\n const labels = timeBlockData.map((d: DashboardDataResponse[]) => d[0]['ts'].raw as unknown as string)\n const datasetCount = timeBlockData[0].length\n\n const datasets: DashboardVisualisationDataSet[] = []\n for (let index = 0; index < datasetCount; index += 1) {\n const data = timeBlockData.map((timeperiod) => {\n const { raw } = timeperiod[index][measures[1].id]\n return raw ? Number(raw) : 0\n })\n const total = data.reduce((a, c) => a + c, 0)\n const rawValue = timeBlockData[0][index][labelId].raw\n const label = rawValue ? <string>rawValue : ''\n\n datasets.push({\n data,\n label,\n total,\n })\n }\n\n return {\n type,\n unit,\n timeseries: true,\n data: {\n labels,\n datasets,\n },\n }\n}\n\nconst createTimeseriesTable = (\n chartDefinition: components['schemas']['DashboardVisualisationDefinition'],\n timeseriesData: DashboardDataResponse[],\n): MoJTable => {\n const { columns } = chartDefinition\n const { keys, measures } = columns\n\n let flatTimeseriesData = timeseriesData.flat()\n let headerColumns = [...measures]\n\n if (timeseriesData.length > 1) {\n // Add keys as columns as well as measures, and put TS first:\n // Get TS column an remove it from headings\n const timestampIndex = headerColumns.findIndex((m) => m.id === 'ts')\n const timestampCol = headerColumns[timestampIndex]\n headerColumns.splice(timestampIndex, 1)\n // Remove duplicate TS from keys if present and add keys to headings\n const keysWithoutTs = keys ? keys.filter((k) => k.id !== 'ts') : []\n headerColumns = [...keysWithoutTs, ...headerColumns]\n // Add TS column to the start\n headerColumns.unshift(timestampCol)\n } else {\n flatTimeseriesData = DatasetHelper.filterRowsByDisplayColumns(chartDefinition, flatTimeseriesData)\n }\n\n const head = headerColumns.map((column) => {\n return { text: column.display }\n })\n\n const rows = DashboardListUtils.createTableRows(flatTimeseriesData)\n\n return {\n head,\n rows,\n } as MoJTable\n}\n\nexport default {\n createChart,\n createTimeseriesCharts,\n createMatrixChart,\n}\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,sBAAAC,EAAA,2BAAAC,EAAA,YAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAAkB,oBAClBC,EAAuB,sCAGvBC,EAA0B,wCAC1BC,EAA+B,kDAC/BC,EAA4B,gDAC5BC,EAAyB,2CASzB,EAAAC,QAAM,OAAO,EAAAC,OAAU,EAEhB,MAAMZ,EAAc,CACzBa,EACAC,IAC8C,CAC9C,IAAIC,EACAC,EACAC,EAEJ,KAAM,CAAE,YAAAC,EAAa,aAAAC,CAAa,EAAIC,EAAyBP,EAAiBC,CAAO,EACvF,OAAII,EAAY,SACdF,EAAQK,EAAoBR,EAAiBM,CAAY,EACzDJ,EAAQO,EAAoBT,EAAiBK,CAAW,EACxDD,EAAUM,EAAgBV,EAAiBK,CAAW,GAGjD,CACL,QAAAD,EACA,MAAAF,EACA,MAAAC,CACF,CACF,EAEad,EAAyB,CACpCW,EACAC,IACkC,CAClC,IAAIC,EACAC,EACAC,EAEJ,KAAM,CAAE,WAAAO,EAAY,YAAAN,EAAa,eAAAO,CAAe,EAAIC,EAA2Bb,EAAiBC,CAAO,EACvG,OAAII,EAAY,SACdF,EAAQW,EAAsBd,EAAiBY,CAAc,EAC7DV,EAAQa,EAAsBf,EAAiBY,CAAc,EAC7DR,EAAUM,EAAgBV,EAAiBW,EAAY,EAAI,GAEtD,CACL,QAAAP,EACA,MAAAF,EACA,MAAAC,CACF,CACF,EAEaf,EAAoB,CAC/BY,EACAC,EACAe,IACG,CACH,IAAId,EACAC,EACAC,EACAa,EAA2B,cAAY,MAE3C,OAAO,KAAKD,CAAK,EAAE,QAASE,GAAQ,CAC9BA,EAAI,SAAS,aAAa,IAC5BD,EAA2BD,EAAME,CAAG,EAExC,CAAC,EAED,KAAM,CAAE,WAAAP,EAAY,YAAAN,EAAa,eAAAO,CAAe,EAAIC,EAA2Bb,EAAiBC,CAAO,EACvG,OAAII,EAAY,SACdF,EAAQ,IAAI,EAAAgB,QAAaP,EAAgBK,EAAajB,CAAe,EAAE,MAAM,EAC7EE,EAAQa,EAAsBf,EAAiBY,CAAc,EAC7DR,EAAUM,EAAgBV,EAAiBW,EAAY,EAAI,GAEtD,CACL,QAAAP,EACA,MAAAF,EACA,MAAAC,CACF,CACF,EAEMI,EAA2B,CAC/BP,EACAC,IACG,CACH,MAAMmB,EAAO,EAAAC,QAAc,kBAAkBpB,CAAO,EAC9CI,EAAc,EAAAgB,QAAc,eAAerB,EAAiBoB,CAAI,EAChEd,EAAe,EAAAe,QAAc,2BAA2BrB,EAAiBK,EAAa,EAAI,EAEhG,MAAO,CACL,YAAAA,EACA,aAAAC,CACF,CACF,EAEMO,EAA6B,CACjCb,EACAC,IACG,CACH,MAAMU,EAAa,EAAAU,QAAc,kBAAkBpB,CAAO,EACpDI,EAAc,EAAAgB,QAAc,eAAerB,EAAiBC,CAAO,EACnEW,EAAiB,EAAAS,QAAc,2BAA2BrB,EAAiBK,EAAa,EAAI,EAElG,MAAO,CACL,WAAAM,EACA,YAAAN,EACA,eAAAO,CACF,CACF,EAEMF,EAAkB,CACtBV,EACAoB,EACAE,EAAa,KACI,CACjB,MAAMC,EAAwB,CAAC,EACzBC,EAA6BC,EAAgBzB,EAAiBoB,EAAME,CAAU,EAEpF,OAAIF,EAAK,CAAC,GAAI,IAAO,KACnBG,EAAK,KAAK,CACR,MAAO,cACP,MAAOH,EAAK,CAAC,GAAI,GAAM,GACzB,CAAC,EAGI,CACL,KAAAG,EACA,UAAAC,CACF,CACF,EAEMC,EAAkB,CACtBzB,EACAoB,EACAE,EAAa,KACV,CACH,MAAME,EAA6B,CAAC,EAC9B,CAAE,QAAAE,CAAQ,EAAI1B,EACd,CAAE,SAAA2B,CAAS,EAAID,EACfE,EAAc,CAAC,CAACD,EAAS,KAAME,GAAQA,EAAI,IAAI,EACrD,IAAIC,EAEAC,EACAC,EACAC,EAEJ,GAAIX,GAEF,GADAS,EAAiBJ,EAAS,KAAME,GAAQA,EAAI,KAAO,IAAI,EACnDE,EAAgB,CAClB,KAAM,CAAE,GAAAG,CAAG,EAAIH,EACT,CAAE,IAAAI,CAAI,EAAIf,EAAK,CAAC,EAAEc,CAAE,EAC1BD,EAAQ,GAAGb,EAAK,CAAC,EAAE,GAAM,GAAG,GAC5BY,EAAQG,EAAM,OAAOA,CAAG,EAAI,OAExBH,IACFF,EAAW,CACT,MAAAG,EACA,MAAAD,CACF,EAEJ,UAEAD,EAAkBH,EAA4BD,EAAS,KAAME,GAAQA,EAAI,MAAQA,EAAI,OAAS,GAAG,EAAjEF,EAAS,CAAC,EAEtCI,EAAgB,CAClB,MAAMK,EAAUL,EAAe,SAAS,YAAY,EACpDE,EAAQG,EAAU,SAASA,CAAO,GAAK,QACvCJ,EAAQZ,EAAK,OAAO,CAACiB,EAAaC,IAA6B,CAC7D,GAAIP,EAAgB,CAClB,KAAM,CAAE,GAAAG,CAAG,EAAIH,EACT,CAAE,IAAAI,CAAI,EAAIG,EAAEJ,CAAE,EACpB,GAAIC,EACF,OAAOE,EAAM,OAAOF,CAAG,CAE3B,CACA,OAAOE,CACT,EAAG,CAAC,EAEJP,EAAW,CACT,MAAAG,EACA,MAAAD,CACF,CACF,CAGF,OAAIF,GAAUN,EAAU,KAAKM,CAAQ,EAE9BN,CACT,EAEMhB,EAAsB,CAC1BR,EACAM,IAC+B,CAC/B,KAAM,CAAE,KAAAiC,EAAM,QAAAb,CAAQ,EAAI1B,EACpB,CAAE,SAAA2B,CAAS,EAAID,EACfE,EAAc,CAAC,CAACD,EAAS,KAAME,GAAQA,EAAI,IAAI,EAErD,IAAIW,EACAC,EACAC,EAEJ,GAAKd,GAMD,CAAE,OAAAY,EAAQ,KAAAC,EAAM,SAAAC,CAAS,EAAIC,EAAuBjB,EAASpB,CAAY,OAN3D,CAChB,MAAMH,EAAQyC,EAAWlB,EAASpB,CAAY,EAC9CkC,EAASrC,EAAM,OACfsC,EAAOtC,EAAM,KACbuC,EAAWvC,EAAM,QACnB,CAIA,MAAO,CACL,KAAAoC,EACA,KAAAE,EACA,KAAM,CACJ,OAAAD,EACA,SAAAE,CACF,CACF,CACF,EAEME,EAAa,CACjBlB,EACAzB,IACG,CACH,KAAM,CAAE,KAAA4C,EAAM,SAAAlB,CAAS,EAAID,EACrBc,EAASb,EAAS,IAAKE,GAAQA,EAAI,SAAW,EAAE,EAChDiB,EAAUD,EAAQA,EAAKA,EAAK,OAAS,CAAC,GAAG,GAAqC,OAC9EJ,EAAOd,EAAS,CAAC,EAAE,KAAOA,EAAS,CAAC,EAAE,KAAO,OAE7Ce,EAAWzC,EAAQ,IAAK8C,GAAQ,CACpC,MAAMd,EAAQa,GAAWC,EAAID,CAAO,EAAI,GAAGC,EAAID,CAAO,EAAE,GAAG,GAAK,MAC1D1B,EAAOO,EAAS,IAAK,GAAM,CAC/B,MAAMqB,EAAQ,EAAE,GAChB,OAAOD,EAAIC,CAAK,GAAKD,EAAIC,CAAK,EAAE,IAAM,OAAOD,EAAIC,CAAK,EAAE,GAAG,EAAI,CACjE,CAAC,EACKC,EAAQ7B,EAAK,OAAO,CAACiB,EAAaa,IAAgBb,EAAMa,EAAK,CAAC,EACpE,MAAO,CAAE,MAAAjB,EAAO,KAAAb,EAAM,MAAA6B,CAAM,CAC9B,CAAC,EAED,MAAO,CACL,OAAAT,EACA,KAAAC,EACA,SAAAC,CACF,CACF,EAEMC,EAAyB,CAC7BjB,EACAzB,IACG,CACH,KAAM,CAAE,SAAA0B,EAAU,KAAAkB,CAAK,EAAInB,EAErByB,EAAcxB,EAAS,KAAME,GAAQA,EAAI,OAAS,GAAG,GAAKF,EAAS,CAAC,EACpEyB,EAAczB,EAAS,KAAME,GAAQA,EAAI,OAAS,GAAG,GAAKF,EAAS,CAAC,EAE1E,GAAI,CAACwB,GAAe,CAACC,EACnB,MAAM,IAAI,MAAM,oCAAoC,EAGtD,MAAMX,EAAOW,GAAa,MAAQ,OAC5BC,EAAW,EAAAhC,QAAc,YAAYpB,EAAS4C,CAAI,EAClDS,EAAaD,EAAW,EAAAhC,QAAc,eAAepB,EAASoD,EAAS,EAAE,EAAI,CAACpD,CAAO,EAErFuC,EAASc,EAAW,QAASC,GAC1BA,EAAG,IAAKR,GAAQ,CACrB,KAAM,CAAE,GAAIS,CAAI,EAAIL,EACdM,EAAQV,EAAIS,CAAG,EACrB,OAAOC,EAAQ,GAAGA,EAAM,GAAG,GAAK,EAClC,CAAC,CACF,EAEKf,EAA4CY,EAAW,IAAKI,GAAc,CAC9E,MAAMtC,EAAO,MAAMoB,EAAO,MAAM,EAChCkB,EAAU,QAASX,GAAQ,CACzB,KAAM,CAAE,GAAIY,CAAI,EAAIP,EACd,CAAE,GAAII,CAAI,EAAIL,EACdS,EAAab,EAAIS,CAAG,EACpBK,EAAad,EAAIY,CAAG,EACpBxB,EAAM0B,GAAcA,EAAW,IAAM,OAAOA,EAAW,GAAG,EAAI,EAC9DC,EAAYtB,EAAO,UAAWuB,GAAMA,IAAMH,EAAW,GAAG,EAC1DE,IAAc,KAChB1C,EAAK0C,CAAS,EAAI,OAAO3B,CAAG,EAEhC,CAAC,EAED,IAAIF,EAAQ,GACZ,GAAIoB,EAAU,CACZ,MAAMW,EAAaX,EAAS,GACtBY,EAAWP,EAAU,CAAC,EAC5BzB,EAAQgC,GAAYA,EAASD,CAAU,EAAI,GAAGC,EAASD,CAAU,EAAE,GAAG,GAAK,EAC7E,MACE/B,EAAQmB,EAAY,SAAWnB,EAGjC,MAAO,CACL,MAAAA,EACA,KAAAb,EACA,MAAOA,EAAK,OAAO,CAACiB,EAAaa,IAAgBb,EAAMa,EAAK,CAAC,CAC/D,CACF,CAAC,EAED,MAAO,CACL,OAAAV,EACA,KAAAC,EACA,SAAAC,CACF,CACF,EAEMjC,EAAsB,CAC1BT,EACAoB,IACa,CACb,KAAM,CAAE,QAAAM,CAAQ,EAAI1B,EACd,CAAE,SAAA2B,CAAS,EAAID,EAIfwC,EADgB,CAAC,GAFVxC,EAAQ,MAAQ,CAAC,EAEE,GAAGC,CAAQ,EAChB,IAAKwC,IACvB,CAAE,KAAMA,EAAO,SAAW,EAAG,EACrC,EAEKC,EAAkB,EAAA/C,QAAc,2BAA2BrB,EAAiBoB,EAAM,EAAI,EACtFiD,EAAO,EAAAC,QAAmB,gBAAgBF,CAAe,EAE/D,MAAO,CACL,KAAAF,EACA,KAAAG,CACF,CACF,EAEMvD,EAAwB,CAC5Bd,EACAY,IAC+B,CAC/B,KAAM,CAAE,QAAAc,CAAQ,EAAI1B,EACd,CAAE,KAAA6C,EAAM,SAAAlB,CAAS,EAAID,EAErBe,EAAOd,EAAS,CAAC,EAAE,KAAOA,EAAS,CAAC,EAAE,KAAO,OAC7CY,EAA0EvC,EAAgB,KAAK,MAAM,GAAG,EAAE,CAAC,EAE3G8C,EADW,EAAAzB,QAAc,YAAYT,EAAgBiC,CAAI,GACrC,GAEpB0B,EAAgB,EAAAlD,QAAc,qBAAqBT,CAAc,EACjE4B,EAAS+B,EAAc,IAAKjC,GAA+BA,EAAE,CAAC,EAAE,GAAM,GAAwB,EAC9FkC,EAAeD,EAAc,CAAC,EAAE,OAEhC7B,EAA4C,CAAC,EACnD,QAAS+B,EAAQ,EAAGA,EAAQD,EAAcC,GAAS,EAAG,CACpD,MAAMrD,EAAOmD,EAAc,IAAKG,GAAe,CAC7C,KAAM,CAAE,IAAAvC,CAAI,EAAIuC,EAAWD,CAAK,EAAE9C,EAAS,CAAC,EAAE,EAAE,EAChD,OAAOQ,EAAM,OAAOA,CAAG,EAAI,CAC7B,CAAC,EACKc,EAAQ7B,EAAK,OAAO,CAACuD,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EACtCC,EAAWN,EAAc,CAAC,EAAEE,CAAK,EAAE3B,CAAO,EAAE,IAC5Cb,EAAQ4C,GAA8B,GAE5CnC,EAAS,KAAK,CACZ,KAAAtB,EACA,MAAAa,EACA,MAAAgB,CACF,CAAC,CACH,CAEA,MAAO,CACL,KAAAV,EACA,KAAAE,EACA,WAAY,GACZ,KAAM,CACJ,OAAAD,EACA,SAAAE,CACF,CACF,CACF,EAEM3B,EAAwB,CAC5Bf,EACAY,IACa,CACb,KAAM,CAAE,QAAAc,CAAQ,EAAI1B,EACd,CAAE,KAAA6C,EAAM,SAAAlB,CAAS,EAAID,EAE3B,IAAIoD,EAAqBlE,EAAe,KAAK,EACzCmE,EAAgB,CAAC,GAAGpD,CAAQ,EAEhC,GAAIf,EAAe,OAAS,EAAG,CAG7B,MAAMoE,EAAiBD,EAAc,UAAWE,GAAMA,EAAE,KAAO,IAAI,EAC7DC,EAAeH,EAAcC,CAAc,EACjDD,EAAc,OAAOC,EAAgB,CAAC,EAGtCD,EAAgB,CAAC,GADKlC,EAAOA,EAAK,OAAQsC,GAAMA,EAAE,KAAO,IAAI,EAAI,CAAC,EAC/B,GAAGJ,CAAa,EAEnDA,EAAc,QAAQG,CAAY,CACpC,MACEJ,EAAqB,EAAAzD,QAAc,2BAA2BrB,EAAiB8E,CAAkB,EAGnG,MAAMZ,EAAOa,EAAc,IAAKZ,IACvB,CAAE,KAAMA,EAAO,OAAQ,EAC/B,EAEKE,EAAO,EAAAC,QAAmB,gBAAgBQ,CAAkB,EAElE,MAAO,CACL,KAAAZ,EACA,KAAAG,CACF,CACF,EAEA,IAAO/E,EAAQ,CACb,YAAAH,EACA,uBAAAE,EACA,kBAAAD,CACF",
6
+ "names": ["utils_exports", "__export", "createChart", "createMatrixChart", "createTimeseriesCharts", "utils_default", "__toCommonJS", "import_dayjs", "import_weekOfYear", "import_datasetHelper", "import_utils", "import_types", "import_HeatmapChart", "dayjs", "weekOfYear", "chartDefinition", "rawData", "table", "chart", "details", "dataSetRows", "snapshotData", "getDataForSnapshotCharts", "createSnapshotChart", "createSnapshotTable", "getChartDetails", "latestData", "timeseriesData", "getDataForTimeseriesCharts", "createTimeseriesChart", "createTimeseriesTable", "query", "granularity", "key", "HeatmapChart", "data", "DatasetHelper", "timeseries", "meta", "headlines", "createHeadlines", "columns", "measures", "isListChart", "col", "headline", "headlineColumn", "value", "label", "id", "raw", "display", "acc", "d", "type", "labels", "unit", "datasets", "buildChartFromListData", "buildChart", "keys", "labelId", "row", "rowId", "total", "val", "xAxisColumn", "yAxisColumn", "groupKey", "groupsData", "gd", "xId", "field", "groupData", "yId", "labelField", "valueField", "dataIndex", "l", "groupKeyId", "groupRow", "head", "column", "filteredRowData", "rows", "DashboardListUtils", "timeBlockData", "datasetCount", "index", "timeperiod", "a", "c", "rawValue", "flatTimeseriesData", "headerColumns", "timestampIndex", "m", "timestampCol", "k"]
7
7
  }
@@ -125,7 +125,7 @@ const getChartDetails = (
125
125
  const meta: ChartMetaData[] = []
126
126
  const headlines: ChartMetaData[] = createHeadlines(chartDefinition, data, timeseries)
127
127
 
128
- if (data[0]?.['ts'].raw) {
128
+ if (data[0]?.['ts']?.raw) {
129
129
  meta.push({
130
130
  label: 'Values for:',
131
131
  value: data[0]?.['ts'].raw,
@@ -271,18 +271,26 @@ const buildChartFromListData = (
271
271
  const groupKey = DatasetHelper.getGroupKey(rawData, keys)
272
272
  const groupsData = groupKey ? DatasetHelper.groupRowsByKey(rawData, groupKey.id) : [rawData]
273
273
 
274
- const labels = groupsData[0]?.map((row) => {
275
- const { id: xId } = xAxisColumn
276
- const field = row[xId]
277
- return field ? `${field.raw}` : ''
274
+ const labels = groupsData.flatMap((gd) => {
275
+ return gd.map((row) => {
276
+ const { id: xId } = xAxisColumn
277
+ const field = row[xId]
278
+ return field ? `${field.raw}` : ''
279
+ })
278
280
  })
279
281
 
280
282
  const datasets: DashboardVisualisationDataSet[] = groupsData.map((groupData) => {
281
- const data = groupData.map((row) => {
283
+ const data = Array(labels.length)
284
+ groupData.forEach((row) => {
282
285
  const { id: yId } = yAxisColumn
283
- const field = row[yId]
284
- const raw = field && field.raw ? Number(field.raw) : 0
285
- return Number(raw)
286
+ const { id: xId } = xAxisColumn
287
+ const labelField = row[xId]
288
+ const valueField = row[yId]
289
+ const raw = valueField && valueField.raw ? Number(valueField.raw) : 0
290
+ const dataIndex = labels.findIndex((l) => l === labelField.raw)
291
+ if (dataIndex !== -1) {
292
+ data[dataIndex] = Number(raw)
293
+ }
286
294
  })
287
295
 
288
296
  let label = ''
@@ -16,7 +16,7 @@
16
16
  html: "<p><strong>Please keep this window open to preserve your progress</strong></p> <p>Your" + type + " will be ready shortly.</p>"
17
17
  }) }}
18
18
 
19
- <form id="dpr-sync-loading-form" action="./report" method="get"></form>
19
+ <form id="dpr-sync-loading-form" action="./{{ type }}" method="get"></form>
20
20
  </div>
21
21
 
22
22
  {% endmacro %}
@@ -1,2 +1,2 @@
1
- "use strict";var j=Object.create;var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var z=(r,s)=>{for(var t in s)k(r,t,{get:s[t],enumerable:!0})},F=(r,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of J(s))!X.call(r,a)&&a!==t&&k(r,a,{get:()=>s[a],enumerable:!(e=G(s,a))||e.enumerable});return r};var c=(r,s,t)=>(t=r!=null?j(K(r)):{},F(s||!r||!r.__esModule?k(t,"default",{value:r,enumerable:!0}):t,r)),W=r=>F(k({},"__esModule",{value:!0}),r);var ie={};z(ie,{default:()=>oe,init:()=>Y,renderList:()=>U,setDataFromStatus:()=>Q,updateExpiredStatus:()=>B,updateLastViewed:()=>H});module.exports=W(ie);var $=c(require("dayjs")),i=require("../../types/UserReports"),x=require("../../utils/requestStatusHelper"),A=c(require("../_filters/filters-selected/utils")),P=c(require("../_filters/utils")),y=require("../../utils/reportListsHelper"),V=c(require("./requested/utils")),L=c(require("./viewed/utils")),_=c(require("./bookmarks/utils")),q=c(require("../../utils/localsHelper")),M=c(require("../../utils/DateMapper/DateMapper")),N=c(require("../../utils/UserStoreItemBuilder"));const Z=r=>{const s=JSON.parse(JSON.stringify(r)),{executionId:t,tableId:e,variantName:a,name:l,reportId:o,variantId:d,id:u,description:p,query:n,interactiveQuery:m,status:g,reportName:D,dataProductDefinitionsPath:b,type:w,url:S}=s;let v=[];n&&(v=n.summary);let f=[];m&&(f=m.summary);const R=w||i.ReportType.REPORT;return{id:t,text:l||a||"",reportName:D,description:p,tag:"MIS",summary:v,interactiveSummary:f,status:g,type:R,...g&&Q(g,s),meta:{reportId:o,id:d||u,executionId:t,tableId:e,status:g,type:R,dataProductDefinitionsPath:b,pollingUrl:S?.polling?.pathname,reportUrl:S?.report?.pathname}}},ee=(r,s)=>({rows:r.map(e=>te(e,s)),head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Filters",classes:"dpr-req-filters-head"},{text:"Status",classes:"dpr-req-status-head"},{text:"Actions",classes:"dpr-req-actions-head"}]}),te=(r,s)=>{let t,e="";const{href:a,id:l,reportName:o,text:d,timestamp:u,type:p,status:n}=r;if(a&&l)switch(n){case i.RequestStatus.FAILED:t="govuk-tag--red",e=(0,y.itemActionsHtml)(a,l,s,n);break;case i.RequestStatus.EXPIRED:t="govuk-tag--grey",e=(0,y.itemActionsHtml)(a,l,s,n);break;case i.RequestStatus.ABORTED:t="govuk-tag--orange",e=(0,y.itemActionsHtml)(a,l,s,n);break;case i.RequestStatus.READY:case i.RequestStatus.FINISHED:e=`<a class=govuk-link govuk-link--no-visited-state dpr-type__${p}' href="${a}">Go to ${p}</a>`,t="govuk-tag--green";break;case i.RequestStatus.PICKED:case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:e=`<a class='govuk-link govuk-link--no-visited-state dpr-type__${p}' href="${a}">Go to status</a>`;break;default:break}let m="";return(r.summary||r.interactiveSummary)&&(m=ae(r)),[{html:(0,y.createListItemProduct)(o,d,p,u)},{html:m},{html:`<strong class="govuk-tag dpr-request-status-tag ${t}">${n}</strong>`,classes:"dpr-req-cell dpr-req-cell__status"},{html:`${e}`,classes:"dpr-req-cell dpr-req-cell__status"}]},re=(r,s=20)=>({amount:r,shown:s&&r>s?s:r,max:s}),ae=r=>{const s=r.summary?.map(e=>`<li class="govuk-body-s dpr-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join(""),t=r.interactiveSummary?.map(e=>`<li class="govuk-body-s dpr-interactive-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join("");return`<ul class="dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0">${s}${t}</ul>`},se=(r,s)=>{const{nestedBaseUrl:t}=q.default.getValues(s);return r.map(e=>({reportId:e.meta?.reportId,id:e.meta.id,executionId:e.meta.executionId,tableId:e.meta.tableId,status:e.meta.status,requestedAt:e.meta.requestedAt,type:e.meta.type,dataProductDefinitionsPath:e.meta.dataProductDefinitionsPath,pollingUrl:e.meta.pollingUrl,reportUrl:e.meta.reportUrl,nestedBaseUrl:t}))},Q=(r,s)=>{let t,e,a;const{url:l,timestamp:o}=s,d=l?.polling,u=l?.request,p=l?.report,n=new M.default;switch(r){case i.RequestStatus.FAILED:{a=o.failed?n.toDateString(o.failed,"local-date"):(0,$.default)().format("DD/MM/YYYY"),e=d?.fullUrl,t=`Failed at: ${a}`;break}case i.RequestStatus.ABORTED:{e=u?.fullUrl,a=n.toDateString(o.aborted,"local-date"),t=`Aborted at: ${a}`;break}case i.RequestStatus.FINISHED:e=p?.fullUrl,a=n.toDateString(o.completed,"local-date"),t=`Ready at: ${a}`;break;case i.RequestStatus.EXPIRED:{e=u?.fullUrl,a=n.toDateString(o.expired,"local-date"),t=`Expired at: ${a}`;break}case i.RequestStatus.READY:{e=p?.fullUrl,a=n.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${a}`;break}case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:case i.RequestStatus.PICKED:e=d?.fullUrl,a=n.toDateString(o.requested,"local-date"),t=`Requested at: ${a}`;break;default:a=n.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${a}`;break}return{timestamp:t,href:e}},U=async({res:r,reportsData:s,maxRows:t,filterFunction:e,type:a})=>{const{csrfToken:l}=q.default.getValues(r);let o=s.filter(e).map(Z);const d=o.length;t&&(o=o.slice(0,t));const u=ee(o,a),p=a==="requested"?"requested-reports":"recently-viewed";return{head:{...o.length&&{href:`dpr/my-reports/${p}/list`},...!o.length&&{emptyMessage:`You have 0 ${a} reports`}},tableData:u,total:re(d,t),meta:se(o,r),csrfToken:l,...t&&{maxRows:t}}},B=async({req:r,res:s,services:t})=>{const{dprUser:e}=q.default.getValues(s),a=await(0,x.getExpiredStatus)({req:r,res:s,services:t});return a&&a.isExpired&&(await t.recentlyViewedService.setToExpired(a.executionId,e.id),await t.requestedReportService.setToExpired(a.executionId,e.id)),a?a.isExpired:!1},Y=async({services:r,res:s,maxRows:t=6})=>{const{requestedReports:e,recentlyViewedReports:a,bookmarkingEnabled:l}=q.default.getValues(s),o=await U({res:s,reportsData:e,filterFunction:V.default.filterReports,maxRows:t,type:"requested"}),d=await U({res:s,reportsData:a,filterFunction:L.default.filterReports,maxRows:t,type:"viewed"});let u;return l&&(u=await _.default.renderBookmarkList({res:s,services:r,maxRows:t})),{requestedReports:o,viewedReports:d,bookmarks:u}},H=async({req:r,services:s,reportStateData:t,userId:e,filters:a})=>{const{type:l,reportId:o,reportName:d,description:u,id:p,name:n,executionId:m,tableId:g,query:D,url:b}=t,w={type:l,reportId:o,reportName:d,description:u,id:p,name:n},S={executionId:m,tableId:g},v=D?{query:D.data,querySummary:D.summary}:{query:{},querySummary:[]},f=r.query?.columns,{selectedPage:R,pageSize:I,sortColumn:h,sortedAsc:E}=r.query,T=P.default.setRequestQueryFromFilterValues(a,!0),C={query:{...T,...f&&{columns:f},...R&&{selectedPage:R},...I&&{pageSize:I},...h&&{sortColumn:h},...E&&{sortedAsc:E}},querySummary:A.default.getQuerySummary(T,a)},O=new N.default(w).addExecutionData(S).addQuery(v).addInteractiveQuery(C).addStatus(i.RequestStatus.READY).addTimestamp().addAsyncUrls(b).addReportUrls(r).build();m&&await s.requestedReportService.updateLastViewed(m,e),await s.recentlyViewedService.setRecentlyViewed(O,e)};var oe={renderList:U,updateExpiredStatus:B,init:Y,updateLastViewed:H};0&&(module.exports={init,renderList,setDataFromStatus,updateExpiredStatus,updateLastViewed});
1
+ "use strict";var j=Object.create;var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var z=(r,s)=>{for(var t in s)k(r,t,{get:s[t],enumerable:!0})},F=(r,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of J(s))!X.call(r,a)&&a!==t&&k(r,a,{get:()=>s[a],enumerable:!(e=G(s,a))||e.enumerable});return r};var c=(r,s,t)=>(t=r!=null?j(K(r)):{},F(s||!r||!r.__esModule?k(t,"default",{value:r,enumerable:!0}):t,r)),W=r=>F(k({},"__esModule",{value:!0}),r);var ie={};z(ie,{default:()=>oe,init:()=>Y,renderList:()=>U,setDataFromStatus:()=>Q,updateExpiredStatus:()=>B,updateLastViewed:()=>H});module.exports=W(ie);var $=c(require("dayjs")),i=require("../../types/UserReports"),x=require("../../utils/requestStatusHelper"),A=c(require("../_filters/filters-selected/utils")),P=c(require("../_filters/utils")),y=require("../../utils/reportListsHelper"),V=c(require("./requested/utils")),L=c(require("./viewed/utils")),_=c(require("./bookmarks/utils")),q=c(require("../../utils/localsHelper")),M=c(require("../../utils/DateMapper/DateMapper")),N=c(require("../../utils/UserStoreItemBuilder"));const Z=r=>{const s=JSON.parse(JSON.stringify(r)),{executionId:t,tableId:e,variantName:a,name:l,reportId:o,variantId:d,id:u,description:p,query:n,interactiveQuery:m,status:g,reportName:D,dataProductDefinitionsPath:b,type:w,url:S}=s;let v=[];n&&(v=n.summary);let f=[];m&&(f=m.summary);const R=w||i.ReportType.REPORT;return{id:t,text:l||a||"",reportName:D,description:p,tag:"MIS",summary:v,interactiveSummary:f,status:g,type:R,...g&&Q(g,s),meta:{reportId:o,id:d||u,executionId:t,tableId:e,status:g,type:R,dataProductDefinitionsPath:b,pollingUrl:S?.polling?.pathname,reportUrl:S?.report?.pathname}}},ee=(r,s)=>({rows:r.map(e=>te(e,s)),head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Filters",classes:"dpr-req-filters-head"},{text:"Status",classes:"dpr-req-status-head"},{text:"Actions",classes:"dpr-req-actions-head"}]}),te=(r,s)=>{let t,e="";const{href:a,id:l,reportName:o,text:d,timestamp:u,type:p,status:n}=r;if(a)switch(n){case i.RequestStatus.FAILED:t="govuk-tag--red",e=l?(0,y.itemActionsHtml)(a,l,s,n):"";break;case i.RequestStatus.EXPIRED:t="govuk-tag--grey",e=l?(0,y.itemActionsHtml)(a,l,s,n):"";break;case i.RequestStatus.ABORTED:t="govuk-tag--orange",e=l?(0,y.itemActionsHtml)(a,l,s,n):"";break;case i.RequestStatus.READY:case i.RequestStatus.FINISHED:e=`<a class=govuk-link govuk-link--no-visited-state dpr-type__${p}' href="${a}">Go to ${p}</a>`,t="govuk-tag--green";break;case i.RequestStatus.PICKED:case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:e=`<a class='govuk-link govuk-link--no-visited-state dpr-type__${p}' href="${a}">Go to status</a>`;break;default:break}let m="";return(r.summary||r.interactiveSummary)&&(m=ae(r)),[{html:(0,y.createListItemProduct)(o,d,p,u)},{html:m},{html:`<strong class="govuk-tag dpr-request-status-tag ${t}">${n}</strong>`,classes:"dpr-req-cell dpr-req-cell__status"},{html:`${e}`,classes:"dpr-req-cell dpr-req-cell__status"}]},re=(r,s=20)=>({amount:r,shown:s&&r>s?s:r,max:s}),ae=r=>{const s=r.summary?.map(e=>`<li class="govuk-body-s dpr-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join(""),t=r.interactiveSummary?.map(e=>`<li class="govuk-body-s dpr-interactive-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join("");return`<ul class="dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0">${s}${t}</ul>`},se=(r,s)=>{const{nestedBaseUrl:t}=q.default.getValues(s);return r.map(e=>({reportId:e.meta?.reportId,id:e.meta.id,executionId:e.meta.executionId,tableId:e.meta.tableId,status:e.meta.status,requestedAt:e.meta.requestedAt,type:e.meta.type,dataProductDefinitionsPath:e.meta.dataProductDefinitionsPath,pollingUrl:e.meta.pollingUrl,reportUrl:e.meta.reportUrl,nestedBaseUrl:t}))},Q=(r,s)=>{let t,e,a;const{url:l,timestamp:o}=s,d=l?.polling,u=l?.request,p=l?.report,n=new M.default;switch(r){case i.RequestStatus.FAILED:{a=o.failed?n.toDateString(o.failed,"local-date"):(0,$.default)().format("DD/MM/YYYY"),e=d?.fullUrl,t=`Failed at: ${a}`;break}case i.RequestStatus.ABORTED:{e=u?.fullUrl,a=n.toDateString(o.aborted,"local-date"),t=`Aborted at: ${a}`;break}case i.RequestStatus.FINISHED:e=p?.fullUrl,a=n.toDateString(o.completed,"local-date"),t=`Ready at: ${a}`;break;case i.RequestStatus.EXPIRED:{e=u?.fullUrl,a=n.toDateString(o.expired,"local-date"),t=`Expired at: ${a}`;break}case i.RequestStatus.READY:{e=p?.fullUrl,a=n.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${a}`;break}case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:case i.RequestStatus.PICKED:e=d?.fullUrl,a=n.toDateString(o.requested,"local-date"),t=`Requested at: ${a}`;break;default:a=n.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${a}`;break}return{timestamp:t,href:e}},U=async({res:r,reportsData:s,maxRows:t,filterFunction:e,type:a})=>{const{csrfToken:l}=q.default.getValues(r);let o=s.filter(e).map(Z);const d=o.length;t&&(o=o.slice(0,t));const u=ee(o,a),p=a==="requested"?"requested-reports":"recently-viewed";return{head:{...o.length&&{href:`dpr/my-reports/${p}/list`},...!o.length&&{emptyMessage:`You have 0 ${a} reports`}},tableData:u,total:re(d,t),meta:se(o,r),csrfToken:l,...t&&{maxRows:t}}},B=async({req:r,res:s,services:t})=>{const{dprUser:e}=q.default.getValues(s),a=await(0,x.getExpiredStatus)({req:r,res:s,services:t});return a&&a.isExpired&&(await t.recentlyViewedService.setToExpired(a.executionId,e.id),await t.requestedReportService.setToExpired(a.executionId,e.id)),a?a.isExpired:!1},Y=async({services:r,res:s,maxRows:t=6})=>{const{requestedReports:e,recentlyViewedReports:a,bookmarkingEnabled:l}=q.default.getValues(s),o=await U({res:s,reportsData:e,filterFunction:V.default.filterReports,maxRows:t,type:"requested"}),d=await U({res:s,reportsData:a,filterFunction:L.default.filterReports,maxRows:t,type:"viewed"});let u;return l&&(u=await _.default.renderBookmarkList({res:s,services:r,maxRows:t})),{requestedReports:o,viewedReports:d,bookmarks:u}},H=async({req:r,services:s,reportStateData:t,userId:e,filters:a})=>{const{type:l,reportId:o,reportName:d,description:u,id:p,name:n,executionId:m,tableId:g,query:D,url:b}=t,w={type:l,reportId:o,reportName:d,description:u,id:p,name:n},S={executionId:m,tableId:g},v=D?{query:D.data,querySummary:D.summary}:{query:{},querySummary:[]},f=r.query?.columns,{selectedPage:R,pageSize:I,sortColumn:h,sortedAsc:E}=r.query,T=P.default.setRequestQueryFromFilterValues(a,!0),C={query:{...T,...f&&{columns:f},...R&&{selectedPage:R},...I&&{pageSize:I},...h&&{sortColumn:h},...E&&{sortedAsc:E}},querySummary:A.default.getQuerySummary(T,a)},O=new N.default(w).addExecutionData(S).addQuery(v).addInteractiveQuery(C).addStatus(i.RequestStatus.READY).addTimestamp().addAsyncUrls(b).addReportUrls(r).build();m&&await s.requestedReportService.updateLastViewed(m,e),await s.recentlyViewedService.setRecentlyViewed(O,e)};var oe={renderList:U,updateExpiredStatus:B,init:Y,updateLastViewed:H};0&&(module.exports={init,renderList,setDataFromStatus,updateExpiredStatus,updateLastViewed});
2
2
  //# sourceMappingURL=utils.js.map