@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.17.0 → 4.17.2

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 (169) hide show
  1. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  2. package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
  3. package/dpr/components/_catalogue/catalogue-list/utils.ts +4 -5
  4. package/dpr/components/_catalogue/catalogue-search/view.njk +1 -0
  5. package/dpr/components/_charts/chart/Buckets.js +1 -1
  6. package/dpr/components/_charts/chart/Buckets.js.map +3 -3
  7. package/dpr/components/_charts/chart/Buckets.ts +44 -36
  8. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  9. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +2 -2
  10. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +22 -14
  11. package/dpr/components/_charts/chart/heatmap/types.js +2 -0
  12. package/dpr/components/_charts/chart/heatmap/types.js.map +7 -0
  13. package/dpr/components/_charts/chart/heatmap/types.ts +6 -0
  14. package/dpr/components/_charts/utils.js +1 -1
  15. package/dpr/components/_charts/utils.js.map +3 -3
  16. package/dpr/components/_charts/utils.test.ts +10 -7
  17. package/dpr/components/_charts/utils.ts +57 -50
  18. package/dpr/components/_dashboards/dashboard/view.njk +1 -1
  19. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  20. package/dpr/components/_dashboards/dashboard-list/utils.js.map +2 -2
  21. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +3 -3
  22. package/dpr/components/_dashboards/dashboard-list/utils.ts +16 -12
  23. package/dpr/components/_dashboards/dashboard-section/view.njk +1 -1
  24. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +2 -0
  25. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +7 -0
  26. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +40 -0
  27. package/dpr/components/_dashboards/dashboard-visualisation/types.js +2 -0
  28. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +7 -0
  29. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +102 -0
  30. package/dpr/components/_dashboards/dashboard-visualisation/view.njk +1 -1
  31. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  32. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +2 -2
  33. package/dpr/components/_dashboards/scorecard/Scorecard.ts +37 -29
  34. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  35. package/dpr/components/_dashboards/scorecard/types.ts +1 -0
  36. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  37. package/dpr/components/_dashboards/scorecard/utils.js.map +2 -2
  38. package/dpr/components/_dashboards/scorecard/utils.test.ts +13 -4
  39. package/dpr/components/_dashboards/scorecard/utils.ts +6 -5
  40. package/dpr/components/_dashboards/scorecard/view.njk +6 -5
  41. package/dpr/components/_dashboards/scorecard-group/view.njk +4 -4
  42. package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
  43. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  44. package/dpr/components/_reports/report-heading/view.njk +1 -1
  45. package/dpr/data/dashboardClient.js +1 -1
  46. package/dpr/data/dashboardClient.js.map +2 -2
  47. package/dpr/data/dashboardClient.ts +8 -7
  48. package/dpr/data/reportingClient.js +1 -1
  49. package/dpr/data/reportingClient.js.map +1 -1
  50. package/dpr/data/reportingClient.ts +1 -1
  51. package/dpr/middleware/reportAuthoriser.js +1 -1
  52. package/dpr/middleware/reportAuthoriser.js.map +3 -3
  53. package/dpr/middleware/reportAuthoriser.ts +9 -20
  54. package/dpr/routes/journeys/download-report/controller.js +1 -1
  55. package/dpr/routes/journeys/download-report/controller.js.map +3 -3
  56. package/dpr/routes/journeys/download-report/controller.ts +4 -1
  57. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js +1 -1
  58. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js.map +2 -2
  59. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.ts +1 -0
  60. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js +1 -1
  61. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js.map +2 -2
  62. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.ts +1 -0
  63. package/dpr/routes/journeys/download-report/tests.cy.js +1 -1
  64. package/dpr/routes/journeys/download-report/tests.cy.js.map +2 -2
  65. package/dpr/routes/journeys/download-report/tests.cy.ts +2 -8
  66. package/dpr/routes/journeys/download-report/utils.js +1 -1
  67. package/dpr/routes/journeys/download-report/utils.js.map +3 -3
  68. package/dpr/routes/journeys/download-report/utils.ts +10 -7
  69. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js +1 -1
  70. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js.map +2 -2
  71. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.ts +1 -0
  72. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js +1 -1
  73. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js.map +3 -3
  74. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.ts +5 -14
  75. package/dpr/routes/journeys/my-reports/bookmarks/utils.js +1 -1
  76. package/dpr/routes/journeys/my-reports/bookmarks/utils.js.map +3 -3
  77. package/dpr/routes/journeys/my-reports/bookmarks/utils.ts +11 -5
  78. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js +1 -1
  79. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js.map +3 -3
  80. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.ts +4 -7
  81. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js +1 -1
  82. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js.map +2 -2
  83. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.ts +1 -0
  84. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js +1 -1
  85. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js.map +2 -2
  86. package/dpr/routes/journeys/request-missing-report/form/tests.cy.ts +1 -0
  87. package/dpr/routes/journeys/request-missing-report/tests.cy.js +1 -1
  88. package/dpr/routes/journeys/request-missing-report/tests.cy.js.map +2 -2
  89. package/dpr/routes/journeys/request-missing-report/tests.cy.ts +3 -5
  90. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  91. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
  92. package/dpr/routes/journeys/request-report/filters/tests.cy.ts +3 -6
  93. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  94. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  95. package/dpr/routes/journeys/request-report/filters/utils.ts +2 -3
  96. package/dpr/routes/journeys/request-report/status/tests.cy.js +1 -1
  97. package/dpr/routes/journeys/request-report/status/tests.cy.js.map +2 -2
  98. package/dpr/routes/journeys/request-report/status/tests.cy.ts +2 -7
  99. package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
  100. package/dpr/routes/journeys/request-report/tests.cy.js.map +3 -3
  101. package/dpr/routes/journeys/request-report/tests.cy.ts +5 -21
  102. package/dpr/routes/journeys/view-report/async/controller.js.map +2 -2
  103. package/dpr/routes/journeys/view-report/async/controller.ts +2 -2
  104. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js +1 -1
  105. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js.map +2 -2
  106. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts +2 -10
  107. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  108. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  109. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +100 -95
  110. package/dpr/routes/journeys/view-report/async/report/controller.js +1 -1
  111. package/dpr/routes/journeys/view-report/async/report/controller.js.map +3 -3
  112. package/dpr/routes/journeys/view-report/async/report/controller.ts +4 -6
  113. package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
  114. package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
  115. package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +8 -19
  116. package/dpr/routes/journeys/view-report/async/report/types.js +2 -0
  117. package/dpr/routes/journeys/view-report/async/report/types.js.map +7 -0
  118. package/dpr/routes/journeys/view-report/async/report/types.ts +31 -0
  119. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  120. package/dpr/routes/journeys/view-report/async/report/utils.js.map +3 -3
  121. package/dpr/routes/journeys/view-report/async/report/utils.ts +173 -136
  122. package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
  123. package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +3 -3
  124. package/dpr/routes/journeys/view-report/sync/tests.cy.ts +3 -5
  125. package/dpr/services/dashboardService.js +1 -1
  126. package/dpr/services/dashboardService.js.map +2 -2
  127. package/dpr/services/dashboardService.ts +7 -5
  128. package/dpr/services/productCollection/productCollectionService.js +1 -1
  129. package/dpr/services/productCollection/productCollectionService.js.map +2 -2
  130. package/dpr/services/productCollection/productCollectionService.ts +3 -3
  131. package/dpr/services/reportingService.js +1 -1
  132. package/dpr/services/reportingService.js.map +1 -1
  133. package/dpr/services/reportingService.ts +1 -1
  134. package/dpr/types/AsyncReportUtils.js.map +1 -1
  135. package/dpr/types/AsyncReportUtils.ts +3 -4
  136. package/dpr/types/Charts.js +1 -1
  137. package/dpr/types/Charts.js.map +3 -3
  138. package/dpr/types/Charts.ts +0 -82
  139. package/dpr/types/Metrics.js +1 -1
  140. package/dpr/types/Metrics.js.map +1 -1
  141. package/dpr/types/Metrics.ts +7 -0
  142. package/dpr/types/ReportQuery.js +1 -1
  143. package/dpr/types/ReportQuery.js.map +3 -3
  144. package/dpr/types/ReportQuery.ts +24 -15
  145. package/dpr/types/Services.d.js +1 -1
  146. package/dpr/types/Services.d.js.map +1 -1
  147. package/dpr/types/Services.d.ts +2 -0
  148. package/dpr/types/api.d.js.map +1 -1
  149. package/dpr/types/api.d.ts +14 -16
  150. package/dpr/utils/Personalisation/personalisationUtils.js +1 -1
  151. package/dpr/utils/Personalisation/personalisationUtils.js.map +3 -3
  152. package/dpr/utils/Personalisation/personalisationUtils.ts +15 -6
  153. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  154. package/dpr/utils/UserStoreItemBuilder.js.map +1 -1
  155. package/dpr/utils/UserStoreItemBuilder.ts +2 -2
  156. package/dpr/utils/datasetHelper.js +1 -1
  157. package/dpr/utils/datasetHelper.js.map +3 -3
  158. package/dpr/utils/datasetHelper.test.ts +11 -11
  159. package/dpr/utils/datasetHelper.ts +23 -8
  160. package/dpr/utils/logger.js +1 -1
  161. package/dpr/utils/logger.js.map +3 -3
  162. package/dpr/utils/logger.ts +6 -1
  163. package/package.json +2 -1
  164. package/dpr/components/_charts/chart/DashboardVisualisation.js +0 -2
  165. package/dpr/components/_charts/chart/DashboardVisualisation.js.map +0 -7
  166. package/dpr/components/_charts/chart/DashboardVisualisation.ts +0 -43
  167. package/dpr/components/_dashboards/dashboard/types.js +0 -2
  168. package/dpr/components/_dashboards/dashboard/types.js.map +0 -7
  169. package/dpr/components/_dashboards/dashboard/types.ts +0 -120
@@ -24,13 +24,17 @@ export const saveDefaults = async (type: FiltersType, res: Response, req: Reques
24
24
  const defaultValuesForReport = await getDefaultValues(req, res, services, type)
25
25
  const { dprUser } = localsHelper.getValues(res)
26
26
  const { reportId, id } = req.params
27
- return services.defaultFilterValuesService.save(dprUser.id, reportId, id, defaultValuesForReport)
27
+ const { defaultFilterValuesService } = services
28
+ return defaultFilterValuesService
29
+ ? defaultFilterValuesService.save(dprUser.id, reportId, id, defaultValuesForReport)
30
+ : undefined
28
31
  }
29
32
 
30
33
  export const removeDefaults = async (type: FiltersType, res: Response, req: Request, services: Services) => {
31
34
  const { dprUser } = localsHelper.getValues(res)
32
35
  const { reportId, id } = req.params
33
- return services.defaultFilterValuesService.delete(dprUser.id, reportId, id, type)
36
+ const { defaultFilterValuesService } = services
37
+ return defaultFilterValuesService ? defaultFilterValuesService.delete(dprUser.id, reportId, id, type) : undefined
34
38
  }
35
39
 
36
40
  const getDefaultValues = async (
@@ -42,10 +46,15 @@ const getDefaultValues = async (
42
46
  const { token, definitionsPath } = localsHelper.getValues(res)
43
47
  const { reportId, id, type } = req.params
44
48
 
45
- const service = type === ReportType.REPORT ? services.reportingService : services.dashboardService
46
- const definition = await service.getDefinition(token, reportId, id, definitionsPath)
47
- const fields: components['schemas']['FieldDefinition'][] =
48
- type === ReportType.REPORT ? definition.variant.specification.fields : definition.filterFields
49
+ let definition: components['schemas']['SingleVariantReportDefinition'] | components['schemas']['DashboardDefinition']
50
+ let fields = []
51
+ if (type === ReportType.REPORT) {
52
+ definition = await services.reportingService.getDefinition(token, reportId, id, definitionsPath)
53
+ fields = definition.variant.specification?.fields || []
54
+ } else {
55
+ definition = await services.dashboardService.getDefinition(token, reportId, id, definitionsPath)
56
+ fields = definition.filterFields || []
57
+ }
49
58
 
50
59
  const bodyFilterValues = Object.keys(req.body)
51
60
  .filter((k) => {
@@ -1,2 +1,2 @@
1
- var I=Object.create;var u=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var q=(r,t)=>{for(var e in t)u(r,e,{get:t[e],enumerable:!0})},d=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of y(t))!R.call(r,s)&&s!==e&&u(r,s,{get:()=>t[s],enumerable:!(i=g(t,s))||i.enumerable});return r};var f=(r,t,e)=>(e=r!=null?I(D(r)):{},d(t||!r||!r.__esModule?u(e,"default",{value:r,enumerable:!0}):e,r)),U=r=>d(u({},"__esModule",{value:!0}),r);var b={};q(b,{UserStoreItemBuilder:()=>h,default:()=>E});module.exports=U(b);var p=f(require("parseurl")),o=require("../types/UserReports");class h{constructor(t,e){this.build=()=>this.userStoreItem;this.addReportData=({type:t,reportId:e,reportName:i,description:s,id:m,name:n})=>({type:t,reportId:e,reportName:i,description:s,id:m,name:n,timestamp:{}});this.addExecutionData=t=>(this.userStoreItem={...this.userStoreItem,...t},this);this.addChildExecutionData=t=>(this.userStoreItem={...this.userStoreItem,childExecutionData:t},this);this.addFilters=t=>{const e=new URLSearchParams(t).toString();return this.userStoreItem={...this.userStoreItem,filters:{data:t,queryString:e}},this};this.addSortData=t=>{const e=new URLSearchParams(t).toString();return this.userStoreItem={...this.userStoreItem,sortBy:{data:t,queryString:e}},this};this.addRequestUrls=t=>{const{origin:e,pathname:i,search:s,href:m}=this.requestFormData,{executionId:n,dataProductDefinitionsPath:S,dpdPathFromQuery:l}=this.userStoreItem;let a=t.baseUrl.replace("/filters",`/${n}/status`);l&&(a=`${a}?dataProductDefinitionsPath=${S}`);const c=`${e}${a}`;return this.userStoreItem={...this.userStoreItem,url:{origin:e,request:{fullUrl:m,pathname:i,search:s},polling:{fullUrl:c,pathname:a}}},this};this.addAsyncUrls=t=>(this.userStoreItem={...this.userStoreItem,url:t},this);this.addReportUrls=t=>{const e=t.get("host"),i=`${t.protocol}://${t.get("host")}${t.originalUrl}`,s=(0,p.default)(t);return this.userStoreItem={...this.userStoreItem,url:{origin:e||this.userStoreItem.url?.origin||"",...this.userStoreItem.url?.request&&{request:this.userStoreItem.url.request},...this.userStoreItem.url?.polling&&{polling:this.userStoreItem.url.polling},report:{...this.userStoreItem.url?.report&&this.userStoreItem.url.report,fullUrl:i,...s&&s.search&&{search:s.search}}}},this};this.addLoadType=t=>(this.userStoreItem={...this.userStoreItem,loadType:t},this);this.addQuery=t=>(this.userStoreItem={...this.userStoreItem,...t&&{query:{data:t.query,summary:t.querySummary}}},this);this.addInteractiveQuery=t=>(t&&(this.userStoreItem={...this.userStoreItem,interactiveQuery:{data:t.query,summary:t.querySummary}}),this);this.addStatus=t=>(this.userStoreItem={...this.userStoreItem,status:t},this);this.addMetrics=t=>(this.userStoreItem={...this.userStoreItem,metrics:t.filter(e=>e.display).map(e=>({name:e.display||""}))},this);this.addTimestamp=()=>{const{status:t}=this.userStoreItem,e=new Date;switch(t){case o.RequestStatus.FAILED:this.userStoreItem.timestamp.failed=e;break;case o.RequestStatus.EXPIRED:this.userStoreItem.timestamp.expired=e;break;case o.RequestStatus.ABORTED:this.userStoreItem.timestamp.aborted=e;break;case o.RequestStatus.FINISHED:this.userStoreItem.timestamp.completed=e;break;case o.RequestStatus.SUBMITTED:this.userStoreItem.timestamp.requested=e;break;case o.RequestStatus.STARTED:case o.RequestStatus.PICKED:break;default:this.userStoreItem.timestamp.lastViewed=e;break}return this};this.addDefinitionsPath=(t,e)=>(t&&(this.userStoreItem={...this.userStoreItem,dataProductDefinitionsPath:t,dpdPathFromQuery:e}),this);this.requestFormData=e||{},this.userStoreItem=this.addReportData(t)}}var E=h;0&&(module.exports={UserStoreItemBuilder});
1
+ var I=Object.create;var u=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var f=(r,t)=>{for(var e in t)u(r,e,{get:t[e],enumerable:!0})},d=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of y(t))!R.call(r,s)&&s!==e&&u(r,s,{get:()=>t[s],enumerable:!(i=g(t,s))||i.enumerable});return r};var q=(r,t,e)=>(e=r!=null?I(D(r)):{},d(t||!r||!r.__esModule?u(e,"default",{value:r,enumerable:!0}):e,r)),U=r=>d(u({},"__esModule",{value:!0}),r);var T={};f(T,{UserStoreItemBuilder:()=>h,default:()=>E});module.exports=U(T);var p=q(require("parseurl")),o=require("../types/UserReports");class h{constructor(t,e){this.build=()=>this.userStoreItem;this.addReportData=({type:t,reportId:e,reportName:i,description:s,id:m,name:n})=>({type:t,reportId:e,reportName:i,description:s,id:m,name:n,timestamp:{}});this.addExecutionData=t=>(this.userStoreItem={...this.userStoreItem,...t},this);this.addChildExecutionData=t=>(this.userStoreItem={...this.userStoreItem,childExecutionData:t},this);this.addFilters=t=>{const e=new URLSearchParams(t).toString();return this.userStoreItem={...this.userStoreItem,filters:{data:t,queryString:e}},this};this.addSortData=t=>{const e=new URLSearchParams(t).toString();return this.userStoreItem={...this.userStoreItem,sortBy:{data:t,queryString:e}},this};this.addRequestUrls=t=>{const{origin:e,pathname:i,search:s,href:m}=this.requestFormData,{executionId:n,dataProductDefinitionsPath:S,dpdPathFromQuery:l}=this.userStoreItem;let a=t.baseUrl.replace("/filters",`/${n}/status`);l&&(a=`${a}?dataProductDefinitionsPath=${S}`);const c=`${e}${a}`;return this.userStoreItem={...this.userStoreItem,url:{origin:e,request:{fullUrl:m,pathname:i,search:s},polling:{fullUrl:c,pathname:a}}},this};this.addAsyncUrls=t=>(this.userStoreItem={...this.userStoreItem,url:t},this);this.addReportUrls=t=>{const e=t.get("host"),i=`${t.protocol}://${t.get("host")}${t.originalUrl}`,s=(0,p.default)(t);return this.userStoreItem={...this.userStoreItem,url:{origin:e||this.userStoreItem.url?.origin||"",...this.userStoreItem.url?.request&&{request:this.userStoreItem.url.request},...this.userStoreItem.url?.polling&&{polling:this.userStoreItem.url.polling},report:{...this.userStoreItem.url?.report&&this.userStoreItem.url.report,fullUrl:i,...s&&s.search&&{search:s.search}}}},this};this.addLoadType=t=>(this.userStoreItem={...this.userStoreItem,loadType:t},this);this.addQuery=t=>(this.userStoreItem={...this.userStoreItem,...t&&{query:{data:t.query,summary:t.querySummary}}},this);this.addInteractiveQuery=t=>(t&&(this.userStoreItem={...this.userStoreItem,interactiveQuery:{data:t.query,summary:t.querySummary}}),this);this.addStatus=t=>(this.userStoreItem={...this.userStoreItem,status:t},this);this.addMetrics=t=>(this.userStoreItem={...this.userStoreItem,metrics:t.filter(e=>e.display).map(e=>({name:e.display||""}))},this);this.addTimestamp=()=>{const{status:t}=this.userStoreItem,e=new Date;switch(t){case o.RequestStatus.FAILED:this.userStoreItem.timestamp.failed=e;break;case o.RequestStatus.EXPIRED:this.userStoreItem.timestamp.expired=e;break;case o.RequestStatus.ABORTED:this.userStoreItem.timestamp.aborted=e;break;case o.RequestStatus.FINISHED:this.userStoreItem.timestamp.completed=e;break;case o.RequestStatus.SUBMITTED:this.userStoreItem.timestamp.requested=e;break;case o.RequestStatus.STARTED:case o.RequestStatus.PICKED:break;default:this.userStoreItem.timestamp.lastViewed=e;break}return this};this.addDefinitionsPath=(t,e)=>(t&&(this.userStoreItem={...this.userStoreItem,dataProductDefinitionsPath:t,dpdPathFromQuery:e}),this);this.requestFormData=e||{},this.userStoreItem=this.addReportData(t)}}var E=h;0&&(module.exports={UserStoreItemBuilder});
2
2
  //# sourceMappingURL=UserStoreItemBuilder.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/utils/UserStoreItemBuilder.ts"],
4
- "sourcesContent": ["import type { Request } from 'express'\nimport parseUrl from 'parseurl'\nimport {\n AsyncReportUrlData,\n LoadType,\n ReportType,\n RequestedReport,\n RequestFormData,\n RequestStatus,\n UserReportData,\n} from '../types/UserReports'\nimport Dict = NodeJS.Dict\nimport { ChildReportExecutionData, ExecutionData } from '../types/ExecutionData'\nimport { DashboardSection } from '../components/_dashboards/dashboard/types'\n\nclass UserStoreItemBuilder {\n userStoreItem: UserReportData\n\n requestFormData: RequestFormData | Record<string, never>\n\n constructor(\n reportData: {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n },\n requestFormData?: RequestFormData,\n ) {\n this.requestFormData = requestFormData || {}\n this.userStoreItem = this.addReportData(reportData)\n }\n\n build = () => {\n return this.userStoreItem as RequestedReport\n }\n\n addReportData = ({\n type,\n reportId,\n reportName,\n description,\n id,\n name,\n }: {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n }) => {\n return {\n type: type as ReportType,\n reportId,\n reportName,\n description,\n id,\n name,\n timestamp: {},\n }\n }\n\n addExecutionData = (executionData: ExecutionData) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n ...executionData,\n }\n return this\n }\n\n addChildExecutionData = (childExecutionData: Array<ChildReportExecutionData>) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n childExecutionData,\n }\n return this\n }\n\n addFilters = (filterData?: Record<string, string>) => {\n const filtersQueryString = new URLSearchParams(filterData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n filters: {\n data: filterData,\n queryString: filtersQueryString,\n },\n },\n }\n return this\n }\n\n addSortData = (sortData: Record<string, string>) => {\n const sortByQueryString = new URLSearchParams(sortData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n sortBy: {\n data: sortData,\n queryString: sortByQueryString,\n },\n },\n }\n return this\n }\n\n addRequestUrls = (req: Request) => {\n const { origin, pathname, search, href } = this.requestFormData\n const { executionId, dataProductDefinitionsPath, dpdPathFromQuery } = this.userStoreItem\n\n // Polling path\n let pollingPath = req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n }\n const pollingFullUrl = `${origin}${pollingPath}`\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin,\n request: {\n fullUrl: href,\n pathname,\n search,\n },\n polling: {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n },\n },\n },\n }\n\n return this\n }\n\n addAsyncUrls = (url: AsyncReportUrlData) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url,\n },\n }\n\n return this\n }\n\n addReportUrls = (req: Request) => {\n const origin = req.get('host')\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const urlData = parseUrl(req)\n\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin: origin || this.userStoreItem.url?.origin || '',\n ...(this.userStoreItem.url?.request && { request: this.userStoreItem.url.request }),\n ...(this.userStoreItem.url?.polling && { polling: this.userStoreItem.url.polling }),\n report: {\n ...(this.userStoreItem.url?.report && this.userStoreItem.url.report),\n fullUrl,\n ...(urlData && urlData.search && { search: urlData.search }),\n },\n },\n },\n }\n\n return this\n }\n\n addLoadType = (loadType: LoadType) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n loadType,\n }\n\n return this\n }\n\n addQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...(queryData && {\n query: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n }),\n }\n return this\n }\n\n addInteractiveQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n if (queryData) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n interactiveQuery: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n },\n }\n }\n return this\n }\n\n addStatus = (status: RequestStatus) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n status,\n }\n return this\n }\n\n addMetrics = (metrics: DashboardSection[]) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n metrics: metrics.filter((metric) => metric.display).map((metric) => ({ name: metric.display || '' })),\n }\n return this\n }\n\n addTimestamp = () => {\n const { status } = this.userStoreItem\n const ts = new Date()\n switch (status) {\n case RequestStatus.FAILED:\n this.userStoreItem.timestamp.failed = ts\n break\n case RequestStatus.EXPIRED:\n this.userStoreItem.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n this.userStoreItem.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED:\n this.userStoreItem.timestamp.completed = ts\n break\n case RequestStatus.SUBMITTED:\n this.userStoreItem.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n this.userStoreItem.timestamp.lastViewed = ts\n break\n }\n return this\n }\n\n addDefinitionsPath = (definitionsPath: string, dpdPathFromQuery: boolean) => {\n if (definitionsPath) {\n this.userStoreItem = {\n ...this.userStoreItem,\n dataProductDefinitionsPath: definitionsPath,\n dpdPathFromQuery,\n }\n }\n return this\n }\n}\n\nexport { UserStoreItemBuilder }\nexport default UserStoreItemBuilder\n"],
4
+ "sourcesContent": ["import type { Request } from 'express'\nimport parseUrl from 'parseurl'\nimport {\n AsyncReportUrlData,\n LoadType,\n ReportType,\n RequestedReport,\n RequestFormData,\n RequestStatus,\n UserReportData,\n} from '../types/UserReports'\nimport Dict = NodeJS.Dict\nimport { ChildReportExecutionData, ExecutionData } from '../types/ExecutionData'\nimport { components } from '../types/api'\n\nclass UserStoreItemBuilder {\n userStoreItem: UserReportData\n\n requestFormData: RequestFormData | Record<string, never>\n\n constructor(\n reportData: {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n },\n requestFormData?: RequestFormData,\n ) {\n this.requestFormData = requestFormData || {}\n this.userStoreItem = this.addReportData(reportData)\n }\n\n build = () => {\n return this.userStoreItem as RequestedReport\n }\n\n addReportData = ({\n type,\n reportId,\n reportName,\n description,\n id,\n name,\n }: {\n type: ReportType\n reportId: string\n reportName: string\n description: string\n id: string\n name: string\n }) => {\n return {\n type: type as ReportType,\n reportId,\n reportName,\n description,\n id,\n name,\n timestamp: {},\n }\n }\n\n addExecutionData = (executionData: ExecutionData) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n ...executionData,\n }\n return this\n }\n\n addChildExecutionData = (childExecutionData: Array<ChildReportExecutionData>) => {\n this.userStoreItem = {\n ...(<UserReportData>this.userStoreItem),\n childExecutionData,\n }\n return this\n }\n\n addFilters = (filterData?: Record<string, string>) => {\n const filtersQueryString = new URLSearchParams(filterData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n filters: {\n data: filterData,\n queryString: filtersQueryString,\n },\n },\n }\n return this\n }\n\n addSortData = (sortData: Record<string, string>) => {\n const sortByQueryString = new URLSearchParams(sortData).toString()\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n sortBy: {\n data: sortData,\n queryString: sortByQueryString,\n },\n },\n }\n return this\n }\n\n addRequestUrls = (req: Request) => {\n const { origin, pathname, search, href } = this.requestFormData\n const { executionId, dataProductDefinitionsPath, dpdPathFromQuery } = this.userStoreItem\n\n // Polling path\n let pollingPath = req.baseUrl.replace('/filters', `/${executionId}/status`)\n if (dpdPathFromQuery) {\n pollingPath = `${pollingPath}?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n }\n const pollingFullUrl = `${origin}${pollingPath}`\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin,\n request: {\n fullUrl: href,\n pathname,\n search,\n },\n polling: {\n fullUrl: pollingFullUrl,\n pathname: pollingPath,\n },\n },\n },\n }\n\n return this\n }\n\n addAsyncUrls = (url: AsyncReportUrlData) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url,\n },\n }\n\n return this\n }\n\n addReportUrls = (req: Request) => {\n const origin = req.get('host')\n const fullUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`\n const urlData = parseUrl(req)\n\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n url: {\n origin: origin || this.userStoreItem.url?.origin || '',\n ...(this.userStoreItem.url?.request && { request: this.userStoreItem.url.request }),\n ...(this.userStoreItem.url?.polling && { polling: this.userStoreItem.url.polling }),\n report: {\n ...(this.userStoreItem.url?.report && this.userStoreItem.url.report),\n fullUrl,\n ...(urlData && urlData.search && { search: urlData.search }),\n },\n },\n },\n }\n\n return this\n }\n\n addLoadType = (loadType: LoadType) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n loadType,\n }\n\n return this\n }\n\n addQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...(queryData && {\n query: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n }),\n }\n return this\n }\n\n addInteractiveQuery = (queryData?: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> }) => {\n if (queryData) {\n this.userStoreItem = {\n ...this.userStoreItem,\n ...{\n interactiveQuery: {\n data: queryData.query,\n summary: queryData.querySummary,\n },\n },\n }\n }\n return this\n }\n\n addStatus = (status: RequestStatus) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n status,\n }\n return this\n }\n\n addMetrics = (metrics: components['schemas']['DashboardSectionDefinition'][]) => {\n this.userStoreItem = {\n ...this.userStoreItem,\n metrics: metrics.filter((metric) => metric.display).map((metric) => ({ name: metric.display || '' })),\n }\n return this\n }\n\n addTimestamp = () => {\n const { status } = this.userStoreItem\n const ts = new Date()\n switch (status) {\n case RequestStatus.FAILED:\n this.userStoreItem.timestamp.failed = ts\n break\n case RequestStatus.EXPIRED:\n this.userStoreItem.timestamp.expired = ts\n break\n case RequestStatus.ABORTED:\n this.userStoreItem.timestamp.aborted = ts\n break\n case RequestStatus.FINISHED:\n this.userStoreItem.timestamp.completed = ts\n break\n case RequestStatus.SUBMITTED:\n this.userStoreItem.timestamp.requested = ts\n break\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n break\n default:\n this.userStoreItem.timestamp.lastViewed = ts\n break\n }\n return this\n }\n\n addDefinitionsPath = (definitionsPath: string, dpdPathFromQuery: boolean) => {\n if (definitionsPath) {\n this.userStoreItem = {\n ...this.userStoreItem,\n dataProductDefinitionsPath: definitionsPath,\n dpdPathFromQuery,\n }\n }\n return this\n }\n}\n\nexport { UserStoreItemBuilder }\nexport default UserStoreItemBuilder\n"],
5
5
  "mappings": "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",
6
6
  "names": ["UserStoreItemBuilder_exports", "__export", "UserStoreItemBuilder", "UserStoreItemBuilder_default", "__toCommonJS", "import_parseurl", "import_UserReports", "reportData", "requestFormData", "type", "reportId", "reportName", "description", "id", "name", "executionData", "childExecutionData", "filterData", "filtersQueryString", "sortData", "sortByQueryString", "req", "origin", "pathname", "search", "href", "executionId", "dataProductDefinitionsPath", "dpdPathFromQuery", "pollingPath", "pollingFullUrl", "url", "fullUrl", "urlData", "parseUrl", "loadType", "queryData", "status", "metrics", "metric", "ts", "definitionsPath"]
7
7
  }
@@ -11,7 +11,7 @@ import {
11
11
  } from '../types/UserReports'
12
12
  import Dict = NodeJS.Dict
13
13
  import { ChildReportExecutionData, ExecutionData } from '../types/ExecutionData'
14
- import { DashboardSection } from '../components/_dashboards/dashboard/types'
14
+ import { components } from '../types/api'
15
15
 
16
16
  class UserStoreItemBuilder {
17
17
  userStoreItem: UserReportData
@@ -218,7 +218,7 @@ class UserStoreItemBuilder {
218
218
  return this
219
219
  }
220
220
 
221
- addMetrics = (metrics: DashboardSection[]) => {
221
+ addMetrics = (metrics: components['schemas']['DashboardSectionDefinition'][]) => {
222
222
  this.userStoreItem = {
223
223
  ...this.userStoreItem,
224
224
  metrics: metrics.filter((metric) => metric.display).map((metric) => ({ name: metric.display || '' })),
@@ -1,2 +1,2 @@
1
- var h=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var q=(e,s)=>{for(var n in s)h(e,n,{get:s[n],enumerable:!0})},T=(e,s,n,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let o of E(s))!O.call(e,o)&&o!==n&&h(e,o,{get:()=>s[o],enumerable:!(t=k(s,o))||t.enumerable});return e};var j=e=>T(h({},"__esModule",{value:!0}),e);var H={};q(H,{default:()=>B,filterKeys:()=>R,filterRowsByDisplayColumns:()=>I,getDatasetRows:()=>g,getEarliestDataset:()=>V,getGroupKey:()=>K,getKeyIds:()=>b,getKeyVariations:()=>y,getLastestDataset:()=>v,groupRowsByKey:()=>C,groupRowsByTimestamp:()=>x});module.exports=j(H);const g=(e,s)=>{const{keys:n,measures:t,filters:o,expectNulls:r}=e.columns,a=t.map(p=>p.id),i=n?.map(p=>p.id)||[],l=o?.map(p=>p.id)||[],u=n?.some(p=>p.optional);s.length&&s[0].ts&&i.unshift("ts");const m=s.filter(p=>{const w=[];return Object.keys(p).forEach(f=>{const c=p[f].raw;let d=!0;l.includes(f)?d=(o?o.filter(D=>D.id===f).map(D=>D.equals):[]).includes(c):i.includes(f)&&u?d=!0:i.includes(f)&&!u||a.includes(f)?d=c!==""&&c!==void 0&&c!==null:r&&(d=c===""||c===void 0||c===null),w.push(d)}),w.every(f=>f)});return u?R(m,n||[]):m},y=(e,s)=>{const n=[],t=s.map(a=>a.id),o=s.every(a=>a.optional),r=[...t];return t.reverse().forEach(a=>{const i=s.find(l=>l.id===a);n.push([...r]),i&&i.optional&&r.pop()}),o&&n.push([]),n},b=(e,s)=>{let n=[];return s.every(t=>{const o=[];return e.forEach(r=>{const a=[];Object.keys(r).forEach(i=>{const l=r[i].raw;let u=!0;t.includes(i)&&(u=l!==""&&l!==void 0&&l!==null),a.push(u)}),a.every(i=>i)&&o.push(r)}),o.length>0?(n=t,!1):(n=t,!0)}),n},R=(e,s)=>{const n=y(e,s),t=b(e,n);return e.filter(o=>{const r=[];return Object.keys(o).forEach(a=>{const i=o[a].raw;let l=!0;t.includes(a)&&(l=i!==""&&i!==void 0&&i!==null),r.push(l)}),r.every(a=>a)})},v=e=>{const s=e[e.length-1]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},V=e=>{const s=e[0]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},x=e=>[...new Set(e.map(n=>n.ts.raw))].map(n=>e.filter(t=>t.ts.raw===n)),C=(e,s)=>[...new Set(e.map(t=>t[s].raw))].map(t=>e.filter(o=>o[s].raw===t)),K=(e,s)=>{if(!e||!e.length||!s.length)return;const n=s[0];let t=e.length-1,o=!1;for(;!o;){const r=`${e[t]?.id}`;r&&t!==-1&&(!n[r]||!n[r].raw||n[r].raw===""||n[r].raw===null)?t-=1:o=!0}return t!==-1?e[t]:void 0},I=(e,s,n=!1)=>{const{keys:t,measures:o}=e.columns,r=t||[];let a=[...o];n&&(a=[...r,...o]);const i=a.map(l=>l.id);return s.map(l=>Object.keys(l).filter(u=>i.includes(u)).reduce((u,m)=>(u[m]=l[m],u),{}))};var B={getDatasetRows:g,getLastestDataset:v,getEarliestDataset:V,filterRowsByDisplayColumns:I,groupRowsByTimestamp:x,groupRowsByKey:C,getGroupKey:K,getKeyVariations:y,getKeyIds:b,filterKeys:R};0&&(module.exports={filterKeys,filterRowsByDisplayColumns,getDatasetRows,getEarliestDataset,getGroupKey,getKeyIds,getKeyVariations,getLastestDataset,groupRowsByKey,groupRowsByTimestamp});
1
+ var h=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var q=(e,s)=>{for(var n in s)h(e,n,{get:s[n],enumerable:!0})},T=(e,s,n,o)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of E(s))!O.call(e,t)&&t!==n&&h(e,t,{get:()=>s[t],enumerable:!(o=k(s,t))||o.enumerable});return e};var j=e=>T(h({},"__esModule",{value:!0}),e);var B={};q(B,{default:()=>A,filterKeys:()=>R,filterRowsByDisplayColumns:()=>K,getDatasetRows:()=>w,getEarliestDataset:()=>x,getGroupKey:()=>I,getKeyIds:()=>b,getKeyVariations:()=>y,getLastestDataset:()=>v,groupRowsByKey:()=>V,groupRowsByTimestamp:()=>C});module.exports=j(B);const w=(e,s)=>{const{measures:n,filters:o,expectNulls:t}=e.columns,a=e.columns.keys,r=n.map(p=>p.id),i=a?.map(p=>p.id)||[],l=o?.map(p=>p.id)||[],u=a?.some(p=>p.optional);s.length&&s[0].ts&&i.unshift("ts");const d=s.filter(p=>{const g=[];return Object.keys(p).forEach(f=>{const c=p[f].raw;let m=!0;l.includes(f)?m=(o?o.filter(D=>D.id===f).map(D=>D.equals):[]).includes(c):i.includes(f)&&u?m=!0:i.includes(f)&&!u||r.includes(f)?m=c!==""&&c!==void 0&&c!==null:t&&(m=c===""||c===void 0||c===null),g.push(m)}),g.every(f=>f)});return u?R(d,a||[]):d},y=(e,s)=>{const n=[],o=s.map(r=>r.id),t=s.every(r=>r.optional),a=[...o];return o.reverse().forEach(r=>{const i=s.find(l=>l.id===r);n.push([...a]),i&&i.optional&&a.pop()}),t&&n.push([]),n},b=(e,s)=>{let n=[];return s.every(o=>{const t=[];return e.forEach(a=>{const r=[];Object.keys(a).forEach(i=>{const l=a[i].raw;let u=!0;o.includes(i)&&(u=l!==""&&l!==void 0&&l!==null),r.push(u)}),r.every(i=>i)&&t.push(a)}),t.length>0?(n=o,!1):(n=o,!0)}),n},R=(e,s)=>{const n=y(e,s),o=b(e,n);return e.filter(t=>{const a=[];return Object.keys(t).forEach(r=>{const i=t[r].raw;let l=!0;o.includes(r)&&(l=i!==""&&i!==void 0&&i!==null),a.push(l)}),a.every(r=>r)})},v=e=>{const s=e[e.length-1]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},x=e=>{const s=e[0]?.ts?.raw;return s?e.filter(n=>n.ts.raw===s):e},C=e=>[...new Set(e.map(n=>n.ts.raw))].map(n=>e.filter(o=>o.ts.raw===n)),V=(e,s)=>[...new Set(e.map(o=>o[s].raw))].map(o=>e.filter(t=>t[s].raw===o)),I=(e,s)=>{if(!e||!e.length||!s.length)return;const n=s[0];let o=e.length-1,t=!1;for(;!t;){const a=`${e[o]?.id}`;a&&o!==-1&&(!n[a]||!n[a].raw||n[a].raw===""||n[a].raw===null)?o-=1:t=!0}return o!==-1?e[o]:void 0},K=(e,s,n=!1)=>{const{keys:o,measures:t}=e.columns,a=o||[];let r=[...t];n&&(r=[...a,...t]);const i=r.map(l=>l.id);return s.map(l=>Object.keys(l).filter(u=>i.includes(u)).reduce((u,d)=>(u[d]=l[d],u),{}))};var A={getDatasetRows:w,getLastestDataset:v,getEarliestDataset:x,filterRowsByDisplayColumns:K,groupRowsByTimestamp:C,groupRowsByKey:V,getGroupKey:I,getKeyVariations:y,getKeyIds:b,filterKeys:R};0&&(module.exports={filterKeys,filterRowsByDisplayColumns,getDatasetRows,getEarliestDataset,getGroupKey,getKeyIds,getKeyVariations,getLastestDataset,groupRowsByKey,groupRowsByTimestamp});
2
2
  //# sourceMappingURL=datasetHelper.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/utils/datasetHelper.ts"],
4
- "sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { DashboardVisualisation, DashboardVisualisationColumnKey } from '../components/_dashboards/dashboard/types'\n\nexport const getDatasetRows = (listDefinition: DashboardVisualisation, dashboardData: DashboardDataResponse[]) => {\n const { keys, measures, filters, expectNulls } = listDefinition.columns\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n const filterColIds = filters?.map((col) => col.id) || []\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0].ts) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(datasetField)) {\n const filterValues = filters ? filters.filter((f) => f.id === datasetField).map((f) => f.equals) : []\n valid = filterValues.includes(value)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {\n const colIdVariations = getKeyVariations(dashboardData, keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item.ts.raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d.ts.raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: DashboardDataResponse[]) => {\n if (!keys || !keys.length || !rawData.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: DashboardVisualisation,\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
5
- "mappings": "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",
6
- "names": ["datasetHelper_exports", "__export", "datasetHelper_default", "filterKeys", "filterRowsByDisplayColumns", "getDatasetRows", "getEarliestDataset", "getGroupKey", "getKeyIds", "getKeyVariations", "getLastestDataset", "groupRowsByKey", "groupRowsByTimestamp", "__toCommonJS", "listDefinition", "dashboardData", "keys", "measures", "filters", "expectNulls", "displayColumnsIds", "col", "keyColumnsIds", "filterColIds", "hasOptionalKeys", "key", "filtered", "datasetRow", "validRow", "datasetField", "value", "valid", "f", "val", "colIdVariations", "allOptional", "colIdCopy", "id", "k", "validHeadIds", "ids", "validRows", "latestTimestamp", "data", "item", "ts", "d", "keyValue", "rawData", "index", "keyFound", "includeKeys", "keyCols", "displayColumns", "acc"]
4
+ "sourcesContent": ["import { DashboardDataResponse } from '../types/Metrics'\nimport { components } from '../types/api'\n\nexport const getDatasetRows = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n) => {\n const { measures, filters, expectNulls } = listDefinition.columns\n const keys = <Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>>(\n listDefinition.columns.keys\n )\n\n const displayColumnsIds = measures.map((col) => col.id)\n const keyColumnsIds = keys?.map((col) => col.id) || []\n const filterColIds = filters?.map((col) => col.id) || []\n const hasOptionalKeys = keys?.some((key) => key.optional)\n\n if (dashboardData.length && dashboardData[0].ts) keyColumnsIds.unshift('ts')\n\n const filtered = dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n // All rows are valid until proven otherwise\n let valid = true\n\n // 1. check if the column value is equal to a defined column value\n if (filterColIds.includes(datasetField)) {\n const filterValues = filters ? filters.filter((f) => f.id === datasetField).map((f) => f.equals) : []\n valid = filterValues.includes(<string>value)\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && hasOptionalKeys) {\n valid = true\n\n // 3. check keys exist in the defined columns\n } else if (keyColumnsIds.includes(datasetField) && !hasOptionalKeys) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 2. check values exist in the defined columns\n } else if (displayColumnsIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n\n // 3. check that all remaining columns are null.\n } else if (expectNulls) {\n valid = value === '' || value === undefined || value === null\n }\n\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n\n if (hasOptionalKeys) {\n return filterKeys(filtered, keys || [])\n }\n\n return filtered\n}\n\nexport const getKeyVariations = (\n dashboardData: DashboardDataResponse[],\n keys: Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>,\n) => {\n const colIdVariations: string[][] = []\n const keyColumnsIds = keys.map((col) => col.id)\n const allOptional = keys.every((key) => key.optional)\n const colIdCopy = [...keyColumnsIds]\n\n keyColumnsIds.reverse().forEach((id) => {\n const key = keys.find((k) => k.id === id)\n colIdVariations.push([...colIdCopy])\n if (key && key.optional) {\n colIdCopy.pop()\n }\n })\n\n if (allOptional) colIdVariations.push([])\n return colIdVariations\n}\n\nexport const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariations: string[][]) => {\n let validHeadIds: string[] = []\n colIdVariations.every((ids: string[]) => {\n const validRows = []\n\n dashboardData.forEach((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (ids.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n if (validRow.every((val) => val)) {\n validRows.push(datasetRow)\n }\n })\n\n if (validRows.length > 0) {\n validHeadIds = ids\n return false\n }\n validHeadIds = ids\n return true\n })\n\n return validHeadIds\n}\n\nexport const filterKeys = (\n dashboardData: DashboardDataResponse[],\n keys: Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>,\n) => {\n const colIdVariations = getKeyVariations(dashboardData, keys)\n const validHeadIds = getKeyIds(dashboardData, colIdVariations)\n\n return dashboardData.filter((datasetRow: DashboardDataResponse) => {\n const validRow: boolean[] = []\n Object.keys(datasetRow).forEach((datasetField) => {\n const value = datasetRow[datasetField].raw\n let valid = true\n if (validHeadIds.includes(datasetField)) {\n valid = value !== '' && value !== undefined && value !== null\n }\n validRow.push(valid)\n })\n\n return validRow.every((val) => val)\n })\n}\n\nexport const getLastestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[dashboardData.length - 1]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const getEarliestDataset = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[] => {\n const latestTimestamp = dashboardData[0]?.ts?.raw\n if (latestTimestamp) {\n return dashboardData.filter((data) => data.ts.raw === latestTimestamp)\n }\n return dashboardData\n}\n\nexport const groupRowsByTimestamp = (dashboardData: DashboardDataResponse[]): DashboardDataResponse[][] => {\n const uniqueTimestamps = [...new Set(dashboardData.map((item) => item.ts.raw))]\n return uniqueTimestamps.map((ts) => {\n return dashboardData.filter((d) => d.ts.raw === ts)\n })\n}\n\nexport const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: string): DashboardDataResponse[][] => {\n const uniqueKeyValues = [...new Set(dashboardData.map((item) => item[key].raw))]\n return uniqueKeyValues.map((keyValue) => {\n return dashboardData.filter((d) => d[key].raw === keyValue)\n })\n}\n\nexport const getGroupKey = (\n keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,\n rawData: DashboardDataResponse[],\n) => {\n if (!keys || !keys.length || !rawData.length) {\n return undefined\n }\n\n const data = rawData[0]\n let index = keys.length - 1\n let keyFound = false\n while (!keyFound) {\n const k = `${keys[index]?.id}`\n if (k && index !== -1 && (!data[k] || !data[k].raw || data[k].raw === '' || data[k].raw === null)) {\n index -= 1\n } else {\n keyFound = true\n }\n }\n\n return index !== -1 ? keys[index] : undefined\n}\n\nexport const filterRowsByDisplayColumns = (\n listDefinition: components['schemas']['DashboardVisualisationDefinition'],\n dashboardData: DashboardDataResponse[],\n includeKeys = false,\n) => {\n const { keys: keyCols, measures } = listDefinition.columns\n const keys = keyCols || []\n let displayColumns = [...measures]\n if (includeKeys) {\n displayColumns = [...keys, ...measures]\n }\n const displayColumnsIds = displayColumns.map((col) => col.id)\n\n return dashboardData.map((datasetRow: DashboardDataResponse) => {\n return Object.keys(datasetRow)\n .filter((key) => displayColumnsIds.includes(key))\n .reduce((acc, key) => {\n acc[key] = datasetRow[key]\n return acc\n }, {} as unknown as DashboardDataResponse)\n })\n}\n\nexport default {\n getDatasetRows,\n getLastestDataset,\n getEarliestDataset,\n filterRowsByDisplayColumns,\n groupRowsByTimestamp,\n groupRowsByKey,\n getGroupKey,\n getKeyVariations,\n getKeyIds,\n filterKeys,\n}\n"],
5
+ "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,eAAAC,EAAA,+BAAAC,EAAA,mBAAAC,EAAA,uBAAAC,EAAA,gBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,sBAAAC,EAAA,mBAAAC,EAAA,yBAAAC,IAAA,eAAAC,EAAAb,GAGO,MAAMK,EAAiB,CAC5BS,EACAC,IACG,CACH,KAAM,CAAE,SAAAC,EAAU,QAAAC,EAAS,YAAAC,CAAY,EAAIJ,EAAe,QACpDK,EACJL,EAAe,QAAQ,KAGnBM,EAAoBJ,EAAS,IAAKK,GAAQA,EAAI,EAAE,EAChDC,EAAgBH,GAAM,IAAKE,GAAQA,EAAI,EAAE,GAAK,CAAC,EAC/CE,EAAeN,GAAS,IAAKI,GAAQA,EAAI,EAAE,GAAK,CAAC,EACjDG,EAAkBL,GAAM,KAAMM,GAAQA,EAAI,QAAQ,EAEpDV,EAAc,QAAUA,EAAc,CAAC,EAAE,IAAIO,EAAc,QAAQ,IAAI,EAE3E,MAAMI,EAAWX,EAAc,OAAQY,GAAsC,CAC3E,MAAMC,EAAsB,CAAC,EAE7B,cAAO,KAAKD,CAAU,EAAE,QAASE,GAAiB,CAChD,MAAMC,EAAQH,EAAWE,CAAY,EAAE,IAEvC,IAAIE,EAAQ,GAGRR,EAAa,SAASM,CAAY,EAEpCE,GADqBd,EAAUA,EAAQ,OAAQe,GAAMA,EAAE,KAAOH,CAAY,EAAE,IAAKG,GAAMA,EAAE,MAAM,EAAI,CAAC,GAC/E,SAAiBF,CAAK,EAGlCR,EAAc,SAASO,CAAY,GAAKL,EACjDO,EAAQ,GAGCT,EAAc,SAASO,CAAY,GAAK,CAACL,GAIzCJ,EAAkB,SAASS,CAAY,EAHhDE,EAAQD,IAAU,IAAMA,IAAU,QAAaA,IAAU,KAOhDZ,IACTa,EAAQD,IAAU,IAAMA,IAAU,QAAaA,IAAU,MAG3DF,EAAS,KAAKG,CAAK,CACrB,CAAC,EAEMH,EAAS,MAAOK,GAAQA,CAAG,CACpC,CAAC,EAED,OAAIT,EACKrB,EAAWuB,EAAUP,GAAQ,CAAC,CAAC,EAGjCO,CACT,EAEajB,EAAmB,CAC9BM,EACAI,IACG,CACH,MAAMe,EAA8B,CAAC,EAC/BZ,EAAgBH,EAAK,IAAKE,GAAQA,EAAI,EAAE,EACxCc,EAAchB,EAAK,MAAOM,GAAQA,EAAI,QAAQ,EAC9CW,EAAY,CAAC,GAAGd,CAAa,EAEnC,OAAAA,EAAc,QAAQ,EAAE,QAASe,GAAO,CACtC,MAAMZ,EAAMN,EAAK,KAAMmB,GAAMA,EAAE,KAAOD,CAAE,EACxCH,EAAgB,KAAK,CAAC,GAAGE,CAAS,CAAC,EAC/BX,GAAOA,EAAI,UACbW,EAAU,IAAI,CAElB,CAAC,EAEGD,GAAaD,EAAgB,KAAK,CAAC,CAAC,EACjCA,CACT,EAEa1B,EAAY,CAACO,EAAwCmB,IAAgC,CAChG,IAAIK,EAAyB,CAAC,EAC9B,OAAAL,EAAgB,MAAOM,GAAkB,CACvC,MAAMC,EAAY,CAAC,EAmBnB,OAjBA1B,EAAc,QAASY,GAAsC,CAC3D,MAAMC,EAAsB,CAAC,EAE7B,OAAO,KAAKD,CAAU,EAAE,QAASE,GAAiB,CAChD,MAAMC,EAAQH,EAAWE,CAAY,EAAE,IACvC,IAAIE,EAAQ,GACRS,EAAI,SAASX,CAAY,IAC3BE,EAAQD,IAAU,IAAMA,IAAU,QAAaA,IAAU,MAE3DF,EAAS,KAAKG,CAAK,CACrB,CAAC,EAEGH,EAAS,MAAOK,GAAQA,CAAG,GAC7BQ,EAAU,KAAKd,CAAU,CAE7B,CAAC,EAEGc,EAAU,OAAS,GACrBF,EAAeC,EACR,KAETD,EAAeC,EACR,GACT,CAAC,EAEMD,CACT,EAEapC,EAAa,CACxBY,EACAI,IACG,CACH,MAAMe,EAAkBzB,EAAiBM,EAAeI,CAAI,EACtDoB,EAAe/B,EAAUO,EAAemB,CAAe,EAE7D,OAAOnB,EAAc,OAAQY,GAAsC,CACjE,MAAMC,EAAsB,CAAC,EAC7B,cAAO,KAAKD,CAAU,EAAE,QAASE,GAAiB,CAChD,MAAMC,EAAQH,EAAWE,CAAY,EAAE,IACvC,IAAIE,EAAQ,GACRQ,EAAa,SAASV,CAAY,IACpCE,EAAQD,IAAU,IAAMA,IAAU,QAAaA,IAAU,MAE3DF,EAAS,KAAKG,CAAK,CACrB,CAAC,EAEMH,EAAS,MAAOK,GAAQA,CAAG,CACpC,CAAC,CACH,EAEavB,EAAqBK,GAAoE,CACpG,MAAM2B,EAAkB3B,EAAcA,EAAc,OAAS,CAAC,GAAG,IAAI,IACrE,OAAI2B,EACK3B,EAAc,OAAQ4B,GAASA,EAAK,GAAG,MAAQD,CAAe,EAEhE3B,CACT,EAEaT,EAAsBS,GAAoE,CACrG,MAAM2B,EAAkB3B,EAAc,CAAC,GAAG,IAAI,IAC9C,OAAI2B,EACK3B,EAAc,OAAQ4B,GAASA,EAAK,GAAG,MAAQD,CAAe,EAEhE3B,CACT,EAEaH,EAAwBG,GACV,CAAC,GAAG,IAAI,IAAIA,EAAc,IAAK6B,GAASA,EAAK,GAAG,GAAG,CAAC,CAAC,EACtD,IAAKC,GACpB9B,EAAc,OAAQ+B,GAAMA,EAAE,GAAG,MAAQD,CAAE,CACnD,EAGUlC,EAAiB,CAACI,EAAwCU,IAC7C,CAAC,GAAG,IAAI,IAAIV,EAAc,IAAK6B,GAASA,EAAKnB,CAAG,EAAE,GAAG,CAAC,CAAC,EACxD,IAAKsB,GACnBhC,EAAc,OAAQ+B,GAAMA,EAAErB,CAAG,EAAE,MAAQsB,CAAQ,CAC3D,EAGUxC,EAAc,CACzBY,EACA6B,IACG,CACH,GAAI,CAAC7B,GAAQ,CAACA,EAAK,QAAU,CAAC6B,EAAQ,OACpC,OAGF,MAAML,EAAOK,EAAQ,CAAC,EACtB,IAAIC,EAAQ9B,EAAK,OAAS,EACtB+B,EAAW,GACf,KAAO,CAACA,GAAU,CAChB,MAAMZ,EAAI,GAAGnB,EAAK8B,CAAK,GAAG,EAAE,GACxBX,GAAKW,IAAU,KAAO,CAACN,EAAKL,CAAC,GAAK,CAACK,EAAKL,CAAC,EAAE,KAAOK,EAAKL,CAAC,EAAE,MAAQ,IAAMK,EAAKL,CAAC,EAAE,MAAQ,MAC1FW,GAAS,EAETC,EAAW,EAEf,CAEA,OAAOD,IAAU,GAAK9B,EAAK8B,CAAK,EAAI,MACtC,EAEa7C,EAA6B,CACxCU,EACAC,EACAoC,EAAc,KACX,CACH,KAAM,CAAE,KAAMC,EAAS,SAAApC,CAAS,EAAIF,EAAe,QAC7CK,EAAOiC,GAAW,CAAC,EACzB,IAAIC,EAAiB,CAAC,GAAGrC,CAAQ,EAC7BmC,IACFE,EAAiB,CAAC,GAAGlC,EAAM,GAAGH,CAAQ,GAExC,MAAMI,EAAoBiC,EAAe,IAAKhC,GAAQA,EAAI,EAAE,EAE5D,OAAON,EAAc,IAAKY,GACjB,OAAO,KAAKA,CAAU,EAC1B,OAAQF,GAAQL,EAAkB,SAASK,CAAG,CAAC,EAC/C,OAAO,CAAC6B,EAAK7B,KACZ6B,EAAI7B,CAAG,EAAIE,EAAWF,CAAG,EAClB6B,GACN,CAAC,CAAqC,CAC5C,CACH,EAEA,IAAOpD,EAAQ,CACb,eAAAG,EACA,kBAAAK,EACA,mBAAAJ,EACA,2BAAAF,EACA,qBAAAQ,EACA,eAAAD,EACA,YAAAJ,EACA,iBAAAE,EACA,UAAAD,EACA,WAAAL,CACF",
6
+ "names": ["datasetHelper_exports", "__export", "datasetHelper_default", "filterKeys", "filterRowsByDisplayColumns", "getDatasetRows", "getEarliestDataset", "getGroupKey", "getKeyIds", "getKeyVariations", "getLastestDataset", "groupRowsByKey", "groupRowsByTimestamp", "__toCommonJS", "listDefinition", "dashboardData", "measures", "filters", "expectNulls", "keys", "displayColumnsIds", "col", "keyColumnsIds", "filterColIds", "hasOptionalKeys", "key", "filtered", "datasetRow", "validRow", "datasetField", "value", "valid", "f", "val", "colIdVariations", "allOptional", "colIdCopy", "id", "k", "validHeadIds", "ids", "validRows", "latestTimestamp", "data", "item", "ts", "d", "keyValue", "rawData", "index", "keyFound", "includeKeys", "keyCols", "displayColumns", "acc"]
7
7
  }
@@ -1,4 +1,4 @@
1
- import { DashboardVisualisation, DashboardVisualisationColumn } from '../components/_dashboards/dashboard/types'
1
+ import { components } from '../types/api'
2
2
  import { DashboardDataResponse } from '../types/Metrics'
3
3
  import DatasetHelper from './datasetHelper'
4
4
 
@@ -57,7 +57,7 @@ describe('DatasetHelper', () => {
57
57
  },
58
58
  ],
59
59
  },
60
- } as unknown as DashboardVisualisation
60
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
61
61
 
62
62
  const result = DatasetHelper.getDatasetRows(definition, dataset)
63
63
  expect(result).toEqual(expectedResult)
@@ -121,7 +121,7 @@ describe('DatasetHelper', () => {
121
121
  },
122
122
  ],
123
123
  },
124
- } as unknown as DashboardVisualisation
124
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
125
125
 
126
126
  const result = DatasetHelper.getDatasetRows(definition, dataset)
127
127
  expect(result).toEqual(expectedResult)
@@ -165,7 +165,7 @@ describe('DatasetHelper', () => {
165
165
  ],
166
166
  expectNulls: true,
167
167
  },
168
- } as unknown as DashboardVisualisation
168
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
169
169
 
170
170
  const result = DatasetHelper.getDatasetRows(definition, dataset)
171
171
  expect(result).toEqual(expectedResult)
@@ -274,7 +274,7 @@ describe('DatasetHelper', () => {
274
274
  },
275
275
  ],
276
276
  },
277
- } as unknown as DashboardVisualisation
277
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
278
278
 
279
279
  const result = DatasetHelper.getDatasetRows(definition, dataset)
280
280
  expect(result).toEqual(expectedResult)
@@ -396,7 +396,7 @@ describe('DatasetHelper', () => {
396
396
  },
397
397
  ],
398
398
  },
399
- } as unknown as DashboardVisualisation
399
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
400
400
 
401
401
  const result = DatasetHelper.getDatasetRows(definition, dataset)
402
402
  expect(result).toEqual(expectedResult)
@@ -475,7 +475,7 @@ describe('DatasetHelper', () => {
475
475
  },
476
476
  ],
477
477
  },
478
- } as unknown as DashboardVisualisation
478
+ } as unknown as components['schemas']['DashboardVisualisationDefinition']
479
479
 
480
480
  const data = [
481
481
  {
@@ -501,7 +501,7 @@ describe('DatasetHelper', () => {
501
501
  })
502
502
 
503
503
  describe('getChartGroupKey', () => {
504
- let keys: DashboardVisualisationColumn[]
504
+ let keys: components['schemas']['DashboardVisualisationColumnDefinition'][]
505
505
  beforeEach(() => {
506
506
  keys = [
507
507
  {
@@ -513,7 +513,7 @@ describe('DatasetHelper', () => {
513
513
  {
514
514
  id: 'key3',
515
515
  },
516
- ] as unknown as DashboardVisualisationColumn[]
516
+ ]
517
517
  })
518
518
 
519
519
  it('should set the correct key - value is empty string - key3', () => {
@@ -711,7 +711,7 @@ describe('DatasetHelper', () => {
711
711
 
712
712
  describe('getKeyVariations', () => {
713
713
  let data: DashboardDataResponse[]
714
- let keys: DashboardVisualisationColumn[]
714
+ let keys: components['schemas']['DashboardVisualisationColumnDefinition'][]
715
715
 
716
716
  beforeEach(() => {
717
717
  data = [
@@ -904,7 +904,7 @@ describe('DatasetHelper', () => {
904
904
 
905
905
  describe('filterKeys', () => {
906
906
  let data: DashboardDataResponse[]
907
- let keys: DashboardVisualisationColumn[]
907
+ let keys: components['schemas']['DashboardVisualisationColumnDefinition'][]
908
908
 
909
909
  it('should filter the data by the keys 1', () => {
910
910
  data = [
@@ -1,8 +1,14 @@
1
1
  import { DashboardDataResponse } from '../types/Metrics'
2
- import { DashboardVisualisation, DashboardVisualisationColumnKey } from '../components/_dashboards/dashboard/types'
2
+ import { components } from '../types/api'
3
3
 
4
- export const getDatasetRows = (listDefinition: DashboardVisualisation, dashboardData: DashboardDataResponse[]) => {
5
- const { keys, measures, filters, expectNulls } = listDefinition.columns
4
+ export const getDatasetRows = (
5
+ listDefinition: components['schemas']['DashboardVisualisationDefinition'],
6
+ dashboardData: DashboardDataResponse[],
7
+ ) => {
8
+ const { measures, filters, expectNulls } = listDefinition.columns
9
+ const keys = <Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>>(
10
+ listDefinition.columns.keys
11
+ )
6
12
 
7
13
  const displayColumnsIds = measures.map((col) => col.id)
8
14
  const keyColumnsIds = keys?.map((col) => col.id) || []
@@ -22,7 +28,7 @@ export const getDatasetRows = (listDefinition: DashboardVisualisation, dashboard
22
28
  // 1. check if the column value is equal to a defined column value
23
29
  if (filterColIds.includes(datasetField)) {
24
30
  const filterValues = filters ? filters.filter((f) => f.id === datasetField).map((f) => f.equals) : []
25
- valid = filterValues.includes(value)
31
+ valid = filterValues.includes(<string>value)
26
32
 
27
33
  // 3. check keys exist in the defined columns
28
34
  } else if (keyColumnsIds.includes(datasetField) && hasOptionalKeys) {
@@ -54,7 +60,10 @@ export const getDatasetRows = (listDefinition: DashboardVisualisation, dashboard
54
60
  return filtered
55
61
  }
56
62
 
57
- export const getKeyVariations = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {
63
+ export const getKeyVariations = (
64
+ dashboardData: DashboardDataResponse[],
65
+ keys: Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>,
66
+ ) => {
58
67
  const colIdVariations: string[][] = []
59
68
  const keyColumnsIds = keys.map((col) => col.id)
60
69
  const allOptional = keys.every((key) => key.optional)
@@ -105,7 +114,10 @@ export const getKeyIds = (dashboardData: DashboardDataResponse[], colIdVariation
105
114
  return validHeadIds
106
115
  }
107
116
 
108
- export const filterKeys = (dashboardData: DashboardDataResponse[], keys: DashboardVisualisationColumnKey[]) => {
117
+ export const filterKeys = (
118
+ dashboardData: DashboardDataResponse[],
119
+ keys: Array<components['schemas']['DashboardVisualisationColumnDefinition'] & { optional: boolean }>,
120
+ ) => {
109
121
  const colIdVariations = getKeyVariations(dashboardData, keys)
110
122
  const validHeadIds = getKeyIds(dashboardData, colIdVariations)
111
123
 
@@ -154,7 +166,10 @@ export const groupRowsByKey = (dashboardData: DashboardDataResponse[], key: stri
154
166
  })
155
167
  }
156
168
 
157
- export const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: DashboardDataResponse[]) => {
169
+ export const getGroupKey = (
170
+ keys: Array<components['schemas']['DashboardVisualisationColumnDefinition']>,
171
+ rawData: DashboardDataResponse[],
172
+ ) => {
158
173
  if (!keys || !keys.length || !rawData.length) {
159
174
  return undefined
160
175
  }
@@ -175,7 +190,7 @@ export const getGroupKey = (keys: DashboardVisualisationColumnKey[], rawData: Da
175
190
  }
176
191
 
177
192
  export const filterRowsByDisplayColumns = (
178
- listDefinition: DashboardVisualisation,
193
+ listDefinition: components['schemas']['DashboardVisualisationDefinition'],
179
194
  dashboardData: DashboardDataResponse[],
180
195
  includeKeys = false,
181
196
  ) => {
@@ -1,2 +1,2 @@
1
- var p=Object.create;var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var c=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var d=(o,t)=>{for(var r in t)a(o,r,{get:t[r],enumerable:!0})},m=(o,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of f(t))!b.call(o,e)&&e!==r&&a(o,e,{get:()=>t[e],enumerable:!(n=s(t,e))||n.enumerable});return o};var g=(o,t,r)=>(r=o!=null?p(c(o)):{},m(t||!o||!o.__esModule?a(r,"default",{value:o,enumerable:!0}):r,o)),x=o=>m(a({},"__esModule",{value:!0}),o);var v={};d(v,{default:()=>h,logger:()=>i});module.exports=x(v);var l=g(require("bunyan")),u=g(require("bunyan-format"));const y=(0,u.default)({outputMode:"short",color:!1}),i=l.default.createLogger({name:"Digital Prison Reporting:",stream:y,level:"debug"});var h=i;0&&(module.exports={logger});
1
+ var p=Object.create;var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var d=(o,e)=>{for(var t in e)a(o,t,{get:e[t],enumerable:!0})},g=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of c(e))!b.call(o,r)&&r!==t&&a(o,r,{get:()=>e[r],enumerable:!(s=u(e,r))||s.enumerable});return o};var l=(o,e,t)=>(t=o!=null?p(f(o)):{},g(e||!o||!o.__esModule?a(t,"default",{value:o,enumerable:!0}):t,o)),L=o=>g(a({},"__esModule",{value:!0}),o);var x={};d(x,{default:()=>v,logger:()=>i});module.exports=L(x);var n=l(require("bunyan")),m=l(require("bunyan-format"));const S=(0,m.default)({outputMode:"short",color:!1}),P=process.env.SUPPRESS_LOGS,i=n.default.createLogger({name:"Digital Prison Reporting:",stream:S,level:P?n.default.FATAL+1:"debug"});var v=i;0&&(module.exports={logger});
2
2
  //# sourceMappingURL=logger.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/utils/logger.ts"],
4
- "sourcesContent": ["import bunyan from 'bunyan'\nimport bunyanFormat from 'bunyan-format'\n\nconst formatOut = bunyanFormat({ outputMode: 'short', color: false })\n\nexport const logger = bunyan.createLogger({ name: 'Digital Prison Reporting:', stream: formatOut, level: 'debug' })\n\nexport default logger\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAmB,qBACnBC,EAAyB,4BAEzB,MAAMC,KAAY,EAAAC,SAAa,CAAE,WAAY,QAAS,MAAO,EAAM,CAAC,EAEvDL,EAAS,EAAAM,QAAO,aAAa,CAAE,KAAM,4BAA6B,OAAQF,EAAW,MAAO,OAAQ,CAAC,EAElH,IAAOL,EAAQC",
6
- "names": ["logger_exports", "__export", "logger_default", "logger", "__toCommonJS", "import_bunyan", "import_bunyan_format", "formatOut", "bunyanFormat", "bunyan"]
4
+ "sourcesContent": ["import bunyan from 'bunyan'\nimport bunyanFormat from 'bunyan-format'\n\nconst formatOut = bunyanFormat({ outputMode: 'short', color: false })\n\nconst disableLogs = process.env.SUPPRESS_LOGS\nexport const logger = bunyan.createLogger({\n name: 'Digital Prison Reporting:',\n stream: formatOut,\n level: disableLogs ? bunyan.FATAL + 1 : 'debug',\n})\n\nexport default logger\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAAmB,qBACnBC,EAAyB,4BAEzB,MAAMC,KAAY,EAAAC,SAAa,CAAE,WAAY,QAAS,MAAO,EAAM,CAAC,EAE9DC,EAAc,QAAQ,IAAI,cACnBN,EAAS,EAAAO,QAAO,aAAa,CACxC,KAAM,4BACN,OAAQH,EACR,MAAOE,EAAc,EAAAC,QAAO,MAAQ,EAAI,OAC1C,CAAC,EAED,IAAOR,EAAQC",
6
+ "names": ["logger_exports", "__export", "logger_default", "logger", "__toCommonJS", "import_bunyan", "import_bunyan_format", "formatOut", "bunyanFormat", "disableLogs", "bunyan"]
7
7
  }
@@ -3,6 +3,11 @@ import bunyanFormat from 'bunyan-format'
3
3
 
4
4
  const formatOut = bunyanFormat({ outputMode: 'short', color: false })
5
5
 
6
- export const logger = bunyan.createLogger({ name: 'Digital Prison Reporting:', stream: formatOut, level: 'debug' })
6
+ const disableLogs = process.env.SUPPRESS_LOGS
7
+ export const logger = bunyan.createLogger({
8
+ name: 'Digital Prison Reporting:',
9
+ stream: formatOut,
10
+ level: disableLogs ? bunyan.FATAL + 1 : 'debug',
11
+ })
7
12
 
8
13
  export default logger
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ministryofjustice/hmpps-digital-prison-reporting-frontend",
3
3
  "description": "The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.",
4
- "version": "4.17.0",
4
+ "version": "4.17.2",
5
5
  "main": "dpr/all.mjs",
6
6
  "sass": "dpr/all.scss",
7
7
  "engines": {
@@ -52,6 +52,7 @@
52
52
  "start-test-app": "npm run package && node $NODE_OPTIONS test-app/start-server.js",
53
53
  "start:dev": "USE_MOCK_CLIENTS=true concurrently -k -p \"[{name}]\" -n \"ESBuild,Node\" -c \"yellow.bold,cyan.bold\" \"node esbuild/esbuild.config.js --build --watch\" \"node esbuild/esbuild.config.js --dev-server\"",
54
54
  "start:dev:noMockClients": "concurrently -k -p \"[{name}]\" -n \"ESBuild,Node\" -c \"yellow.bold,cyan.bold\" \"node esbuild/esbuild.config.js --build --watch\" \"node esbuild/esbuild.config.js --dev-server\"",
55
+ "start:dev:noMockClients:noLogs": "SUPPRESS_LOGS=true concurrently -k -p \"[{name}]\" -n \"ESBuild,Node\" -c \"yellow.bold,cyan.bold\" \"node esbuild/esbuild.config.js --build --watch\" \"node esbuild/esbuild.config.js --dev-server\"",
55
56
  "start:server": "node esbuild/esbuild.config.js --dev-server",
56
57
  "security_audit": "npx audit-ci --config audit-ci.json",
57
58
  "int-test-cucumber": "cypress run --config-file cypress-tests/integration-tests/cypress.config.js",
@@ -1,2 +0,0 @@
1
- var o=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var l=(a,s)=>{for(var i in s)o(a,i,{get:s[i],enumerable:!0})},m=(a,s,i,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of r(s))!h.call(a,t)&&t!==i&&o(a,t,{get:()=>s[t],enumerable:!(e=u(s,t))||e.enumerable});return a};var p=a=>m(o({},"__esModule",{value:!0}),a);var D={};l(D,{DashboardVisualisationClass:()=>n,default:()=>d});module.exports=p(D);class n{constructor(s,i){this.initUnit=()=>{this.unit=this.columns.measures[0].unit?this.columns.measures[0].unit:void 0};this.definition=i,this.columns=i.columns,this.measures=this.columns.measures,this.keys=this.columns.keys,this.type=this.definition.type.split("-")[0],this.initUnit(),this.responseData=s}}var d=n;0&&(module.exports={DashboardVisualisationClass});
2
- //# sourceMappingURL=DashboardVisualisation.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/dpr/components/_charts/chart/DashboardVisualisation.ts"],
4
- "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { ChartType, UnitType } from '../../../types/Charts'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisation,\n DashboardVisualisationColumnKey,\n DashboardVisualisationColumnMeasure,\n DashboardVisualisationColumns,\n} from '../../_dashboards/dashboard/types'\n\nclass DashboardVisualisationClass {\n responseData: DashboardDataResponse[]\n\n definition: DashboardVisualisation\n\n columns: DashboardVisualisationColumns\n\n measures: DashboardVisualisationColumnMeasure[]\n\n keys: DashboardVisualisationColumnKey[]\n\n unit: UnitType\n\n type: ChartType\n\n constructor(responseData: DashboardDataResponse[], definition: DashboardVisualisation) {\n this.definition = definition\n this.columns = definition.columns\n this.measures = this.columns.measures\n this.keys = this.columns.keys\n this.type = this.definition.type.split('-')[0] as ChartType\n this.initUnit()\n this.responseData = responseData\n }\n\n initUnit = () => {\n // todo\n this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined\n }\n}\n\nexport { DashboardVisualisationClass }\nexport default DashboardVisualisationClass\n"],
5
- "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAUA,MAAME,CAA4B,CAehC,YAAYG,EAAuCC,EAAoC,CAUvF,cAAW,IAAM,CAEf,KAAK,KAAO,KAAK,QAAQ,SAAS,CAAC,EAAE,KAAO,KAAK,QAAQ,SAAS,CAAC,EAAE,KAAO,MAC9E,EAZE,KAAK,WAAaA,EAClB,KAAK,QAAUA,EAAW,QAC1B,KAAK,SAAW,KAAK,QAAQ,SAC7B,KAAK,KAAO,KAAK,QAAQ,KACzB,KAAK,KAAO,KAAK,WAAW,KAAK,MAAM,GAAG,EAAE,CAAC,EAC7C,KAAK,SAAS,EACd,KAAK,aAAeD,CACtB,CAMF,CAGA,IAAOF,EAAQD",
6
- "names": ["DashboardVisualisation_exports", "__export", "DashboardVisualisationClass", "DashboardVisualisation_default", "__toCommonJS", "responseData", "definition"]
7
- }
@@ -1,43 +0,0 @@
1
- /* eslint-disable prefer-destructuring */
2
- import { ChartType, UnitType } from '../../../types/Charts'
3
- import { DashboardDataResponse } from '../../../types/Metrics'
4
- import {
5
- DashboardVisualisation,
6
- DashboardVisualisationColumnKey,
7
- DashboardVisualisationColumnMeasure,
8
- DashboardVisualisationColumns,
9
- } from '../../_dashboards/dashboard/types'
10
-
11
- class DashboardVisualisationClass {
12
- responseData: DashboardDataResponse[]
13
-
14
- definition: DashboardVisualisation
15
-
16
- columns: DashboardVisualisationColumns
17
-
18
- measures: DashboardVisualisationColumnMeasure[]
19
-
20
- keys: DashboardVisualisationColumnKey[]
21
-
22
- unit: UnitType
23
-
24
- type: ChartType
25
-
26
- constructor(responseData: DashboardDataResponse[], definition: DashboardVisualisation) {
27
- this.definition = definition
28
- this.columns = definition.columns
29
- this.measures = this.columns.measures
30
- this.keys = this.columns.keys
31
- this.type = this.definition.type.split('-')[0] as ChartType
32
- this.initUnit()
33
- this.responseData = responseData
34
- }
35
-
36
- initUnit = () => {
37
- // todo
38
- this.unit = this.columns.measures[0].unit ? this.columns.measures[0].unit : undefined
39
- }
40
- }
41
-
42
- export { DashboardVisualisationClass }
43
- export default DashboardVisualisationClass
@@ -1,2 +0,0 @@
1
- var e=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var p=(s,a)=>{for(var t in a)e(s,t,{get:a[t],enumerable:!0})},b=(s,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of d(a))!c.call(s,o)&&o!==t&&e(s,o,{get:()=>a[o],enumerable:!(r=u(a,o))||r.enumerable});return s};var m=s=>b(e({},"__esModule",{value:!0}),s);var x={};p(x,{AggregateType:()=>l,DashboardVisualisationType:()=>n});module.exports=m(x);var n=(i=>(i.LIST="list",i.DONUT="doughnut",i.BAR="bar",i.LINE="line",i.MATRIX="matrix",i.MATRIX_TIMESERIES="matrix-timeseries",i.BAR_TIMESERIES="bar-timeseries",i.LINE_TIMESERIES="line-timeseries",i.SCORECARD="scorecard",i.SCORECARD_GROUP="scorecard-group",i))(n||{}),l=(t=>(t.SUM="sum",t.AVG="average",t))(l||{});0&&(module.exports={AggregateType,DashboardVisualisationType});
2
- //# sourceMappingURL=types.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/dpr/components/_dashboards/dashboard/types.ts"],
4
- "sourcesContent": ["import { components } from '../../../types/api'\nimport { ChartCardData, MoJTable, UnitType } from '../../../types/Charts'\nimport { Scorecard, ScorecardGroup } from '../scorecard/types'\n\nexport interface DashboardDefinition {\n id: string\n name: string\n description?: string\n sections: DashboardSection[]\n isMissing?: boolean\n filterFields: components['schemas']['FieldDefinition'][]\n}\n\nexport interface DashboardSection {\n id: string\n display?: string\n description?: string\n visualisations: DashboardVisualisation[]\n}\n\nexport interface DashboardUISection {\n id: string\n title?: string\n description?: string\n visualisations?: DashboardUIVisualisation[]\n}\n\nexport interface DashboardUIVisualisation {\n id: string\n type: DashboardVisualisationType\n title?: string\n description?: string\n data: Scorecard | Scorecard[] | ScorecardGroup[] | ChartCardData | { table: MoJTable; ts: string }\n}\n\nexport interface DashboardVisualisation {\n id: string\n type: DashboardVisualisationType\n display?: string\n description?: string\n columns: DashboardVisualisationColumns\n options: DashboardVisualisationOptions\n}\n\nexport type DashboardVisualisationOptions = ListDashboardVisualisationOptions | BucketDashboardVisualisationOptions\n\nexport interface ListDashboardVisualisationOptions {\n showLatest?: boolean\n columnsAsList?: boolean\n}\n\nexport interface BucketDashboardVisualisationOptions {\n useRagColours?: boolean\n buckets?: DashboardVisualisationBucket[]\n baseColour?: string\n}\n\nexport interface DashboardVisualisationBucket {\n min?: number\n max?: number\n hexColour?: string\n}\n\nexport interface ListVisualisation extends DashboardVisualisation {\n type: DashboardVisualisationType.LIST\n}\n\nexport enum DashboardVisualisationType {\n LIST = 'list',\n DONUT = 'doughnut',\n BAR = 'bar',\n LINE = 'line',\n MATRIX = 'matrix',\n MATRIX_TIMESERIES = 'matrix-timeseries',\n BAR_TIMESERIES = 'bar-timeseries',\n LINE_TIMESERIES = 'line-timeseries',\n SCORECARD = 'scorecard',\n SCORECARD_GROUP = 'scorecard-group',\n}\n\nexport interface DashboardVisualisationColumns {\n keys?: DashboardVisualisationColumnKey[]\n measures: DashboardVisualisationColumnMeasure[]\n filters?: DashboardVisualisationColumnFilter[]\n expectNulls: boolean\n}\n\nexport interface DashboardVisualisationColumn {\n id: string\n display?: string\n}\n\nexport interface DashboardVisualisationColumnKey extends DashboardVisualisationColumn {\n optional?: boolean\n}\n\nexport interface DashboardVisualisationColumnMeasure extends DashboardVisualisationColumn {\n aggregate?: AggregateType\n displayValue?: boolean\n unit?: UnitType\n axis?: 'x' | 'y'\n}\n\nexport interface DashboardVisualisationColumnFilter {\n id: string\n equals: string | number\n}\n\nexport interface BarChartVisualisationColumn extends DashboardVisualisationColumnMeasure {\n axis?: 'x' | 'y'\n}\n\nexport interface ScorecardVisualisationColumn extends DashboardVisualisationColumn {\n displayValue: boolean\n}\n\nexport enum AggregateType {\n SUM = 'sum',\n AVG = 'average',\n}\n"],
5
- "mappings": "4ZAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,EAAA,+BAAAC,IAAA,eAAAC,EAAAJ,GAmEO,IAAKG,OACVA,EAAA,KAAO,OACPA,EAAA,MAAQ,WACRA,EAAA,IAAM,MACNA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,kBAAoB,oBACpBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,UAAY,YACZA,EAAA,gBAAkB,kBAVRA,OAAA,IAiDAD,OACVA,EAAA,IAAM,MACNA,EAAA,IAAM,UAFIA,OAAA",
6
- "names": ["types_exports", "__export", "AggregateType", "DashboardVisualisationType", "__toCommonJS"]
7
- }