@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.16.1 → 4.17.1

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 (211) hide show
  1. package/dpr/components/_catalogue/catalogue/utils.js +1 -1
  2. package/dpr/components/_catalogue/catalogue/utils.js.map +3 -3
  3. package/dpr/components/_catalogue/catalogue/utils.test.ts +15 -1
  4. package/dpr/components/_catalogue/catalogue/utils.ts +22 -4
  5. package/dpr/components/_catalogue/catalogue/view.njk +2 -1
  6. package/dpr/components/_catalogue/catalogue-filters/view.njk +2 -2
  7. package/dpr/components/_catalogue/catalogue-list/utils.js +1 -1
  8. package/dpr/components/_catalogue/catalogue-list/utils.js.map +3 -3
  9. package/dpr/components/_catalogue/catalogue-list/utils.ts +4 -5
  10. package/dpr/components/_catalogue/catalogue-search/clientClass.mjs +14 -0
  11. package/dpr/components/_catalogue/catalogue-search/view.njk +24 -1
  12. package/dpr/components/_charts/chart/Buckets.js +1 -1
  13. package/dpr/components/_charts/chart/Buckets.js.map +3 -3
  14. package/dpr/components/_charts/chart/Buckets.ts +44 -36
  15. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js +1 -1
  16. package/dpr/components/_charts/chart/heatmap/HeatmapChart.js.map +2 -2
  17. package/dpr/components/_charts/chart/heatmap/HeatmapChart.ts +22 -14
  18. package/dpr/components/_charts/chart/heatmap/types.js +2 -0
  19. package/dpr/components/_charts/chart/heatmap/types.js.map +7 -0
  20. package/dpr/components/_charts/chart/heatmap/types.ts +6 -0
  21. package/dpr/components/_charts/utils.js +1 -1
  22. package/dpr/components/_charts/utils.js.map +3 -3
  23. package/dpr/components/_charts/utils.test.ts +10 -7
  24. package/dpr/components/_charts/utils.ts +57 -50
  25. package/dpr/components/_dashboards/dashboard/view.njk +1 -1
  26. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  27. package/dpr/components/_dashboards/dashboard-list/utils.js.map +2 -2
  28. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +3 -3
  29. package/dpr/components/_dashboards/dashboard-list/utils.ts +16 -12
  30. package/dpr/components/_dashboards/dashboard-section/view.njk +1 -1
  31. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js +2 -0
  32. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.js.map +7 -0
  33. package/dpr/components/_dashboards/dashboard-visualisation/DashboardVisualisation.ts +40 -0
  34. package/dpr/components/_dashboards/dashboard-visualisation/types.js +2 -0
  35. package/dpr/components/_dashboards/dashboard-visualisation/types.js.map +7 -0
  36. package/dpr/components/_dashboards/dashboard-visualisation/types.ts +102 -0
  37. package/dpr/components/_dashboards/dashboard-visualisation/view.njk +1 -1
  38. package/dpr/components/_dashboards/scorecard/Scorecard.js +1 -1
  39. package/dpr/components/_dashboards/scorecard/Scorecard.js.map +2 -2
  40. package/dpr/components/_dashboards/scorecard/Scorecard.ts +37 -29
  41. package/dpr/components/_dashboards/scorecard/types.js.map +1 -1
  42. package/dpr/components/_dashboards/scorecard/types.ts +1 -0
  43. package/dpr/components/_dashboards/scorecard/utils.js +1 -1
  44. package/dpr/components/_dashboards/scorecard/utils.js.map +2 -2
  45. package/dpr/components/_dashboards/scorecard/utils.test.ts +13 -4
  46. package/dpr/components/_dashboards/scorecard/utils.ts +6 -5
  47. package/dpr/components/_dashboards/scorecard/view.njk +6 -5
  48. package/dpr/components/_dashboards/scorecard-group/view.njk +4 -4
  49. package/dpr/components/_reports/report-actions/types.d.js.map +1 -1
  50. package/dpr/components/_reports/report-actions/types.d.ts +1 -1
  51. package/dpr/components/_reports/report-heading/view.njk +1 -1
  52. package/dpr/data/dashboardClient.js +1 -1
  53. package/dpr/data/dashboardClient.js.map +2 -2
  54. package/dpr/data/dashboardClient.ts +8 -7
  55. package/dpr/data/dprReportingClient.js +1 -1
  56. package/dpr/data/dprReportingClient.js.map +3 -3
  57. package/dpr/data/dprReportingClient.ts +2 -0
  58. package/dpr/data/reportingClient.js +1 -1
  59. package/dpr/data/reportingClient.js.map +1 -1
  60. package/dpr/data/reportingClient.ts +1 -1
  61. package/dpr/middleware/reportAuthoriser.js +1 -1
  62. package/dpr/middleware/reportAuthoriser.js.map +3 -3
  63. package/dpr/middleware/reportAuthoriser.ts +9 -20
  64. package/dpr/middleware/setUpDprResources.js +1 -1
  65. package/dpr/middleware/setUpDprResources.js.map +3 -3
  66. package/dpr/middleware/setUpDprResources.test.ts +7 -0
  67. package/dpr/middleware/setUpDprResources.ts +17 -2
  68. package/dpr/routes/journeys/download-report/controller.js +1 -1
  69. package/dpr/routes/journeys/download-report/controller.js.map +3 -3
  70. package/dpr/routes/journeys/download-report/controller.ts +4 -1
  71. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js +1 -1
  72. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.js.map +2 -2
  73. package/dpr/routes/journeys/download-report/request-download/form/submitted/tests.cy.ts +1 -0
  74. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js +1 -1
  75. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.js.map +2 -2
  76. package/dpr/routes/journeys/download-report/request-download/form/tests.cy.ts +1 -0
  77. package/dpr/routes/journeys/download-report/tests.cy.js +1 -1
  78. package/dpr/routes/journeys/download-report/tests.cy.js.map +2 -2
  79. package/dpr/routes/journeys/download-report/tests.cy.ts +2 -7
  80. package/dpr/routes/journeys/download-report/utils.js +1 -1
  81. package/dpr/routes/journeys/download-report/utils.js.map +3 -3
  82. package/dpr/routes/journeys/download-report/utils.ts +10 -7
  83. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js +1 -1
  84. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.js.map +2 -2
  85. package/dpr/routes/journeys/my-reports/bookmarks/list/tests.cy.ts +1 -0
  86. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js +1 -1
  87. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.js.map +3 -3
  88. package/dpr/routes/journeys/my-reports/bookmarks/tests.cy.ts +5 -12
  89. package/dpr/routes/journeys/my-reports/bookmarks/utils.js +1 -1
  90. package/dpr/routes/journeys/my-reports/bookmarks/utils.js.map +3 -3
  91. package/dpr/routes/journeys/my-reports/bookmarks/utils.ts +11 -5
  92. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js +1 -1
  93. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.js.map +3 -3
  94. package/dpr/routes/journeys/my-reports/recently-viewed/list/tests.cy.ts +4 -6
  95. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js +1 -1
  96. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.js.map +2 -2
  97. package/dpr/routes/journeys/my-reports/requested-reports/list/tests.cy.ts +1 -0
  98. package/dpr/routes/journeys/product-collection/routes.js +2 -0
  99. package/dpr/routes/journeys/product-collection/routes.js.map +7 -0
  100. package/dpr/routes/journeys/product-collection/routes.ts +28 -0
  101. package/dpr/routes/journeys/product-collection/selected/controller.js +2 -0
  102. package/dpr/routes/journeys/product-collection/selected/controller.js.map +7 -0
  103. package/dpr/routes/journeys/product-collection/selected/controller.ts +29 -0
  104. package/dpr/routes/journeys/product-collection/selected/routes.js +2 -0
  105. package/dpr/routes/journeys/product-collection/selected/routes.js.map +7 -0
  106. package/dpr/routes/journeys/product-collection/selected/routes.ts +15 -0
  107. package/dpr/routes/journeys/product-collection/selected/tests.cy.js +2 -0
  108. package/dpr/routes/journeys/product-collection/selected/tests.cy.js.map +7 -0
  109. package/dpr/routes/journeys/product-collection/selected/tests.cy.ts +54 -0
  110. package/dpr/routes/journeys/product-collection/selected/validation.js +2 -0
  111. package/dpr/routes/journeys/product-collection/selected/validation.js.map +7 -0
  112. package/dpr/routes/journeys/product-collection/selected/validation.ts +5 -0
  113. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js +1 -1
  114. package/dpr/routes/journeys/request-missing-report/form/tests.cy.js.map +2 -2
  115. package/dpr/routes/journeys/request-missing-report/form/tests.cy.ts +1 -0
  116. package/dpr/routes/journeys/request-missing-report/tests.cy.js +1 -1
  117. package/dpr/routes/journeys/request-missing-report/tests.cy.js.map +2 -2
  118. package/dpr/routes/journeys/request-missing-report/tests.cy.ts +3 -4
  119. package/dpr/routes/journeys/request-report/filters/tests.cy.js +1 -1
  120. package/dpr/routes/journeys/request-report/filters/tests.cy.js.map +3 -3
  121. package/dpr/routes/journeys/request-report/filters/tests.cy.ts +3 -6
  122. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  123. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  124. package/dpr/routes/journeys/request-report/filters/utils.ts +2 -3
  125. package/dpr/routes/journeys/request-report/status/tests.cy.js +1 -1
  126. package/dpr/routes/journeys/request-report/status/tests.cy.js.map +2 -2
  127. package/dpr/routes/journeys/request-report/status/tests.cy.ts +2 -6
  128. package/dpr/routes/journeys/request-report/tests.cy.js +1 -1
  129. package/dpr/routes/journeys/request-report/tests.cy.js.map +3 -3
  130. package/dpr/routes/journeys/request-report/tests.cy.ts +5 -32
  131. package/dpr/routes/journeys/routes.js +1 -1
  132. package/dpr/routes/journeys/routes.js.map +2 -2
  133. package/dpr/routes/journeys/routes.ts +2 -0
  134. package/dpr/routes/journeys/view-report/async/controller.js.map +2 -2
  135. package/dpr/routes/journeys/view-report/async/controller.ts +2 -2
  136. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js +1 -1
  137. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.js.map +2 -2
  138. package/dpr/routes/journeys/view-report/async/dashboard/tests.cy.ts +2 -9
  139. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  140. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  141. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +100 -95
  142. package/dpr/routes/journeys/view-report/async/report/controller.js +1 -1
  143. package/dpr/routes/journeys/view-report/async/report/controller.js.map +3 -3
  144. package/dpr/routes/journeys/view-report/async/report/controller.ts +4 -6
  145. package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
  146. package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
  147. package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +8 -17
  148. package/dpr/routes/journeys/view-report/async/report/types.js +2 -0
  149. package/dpr/routes/journeys/view-report/async/report/types.js.map +7 -0
  150. package/dpr/routes/journeys/view-report/async/report/types.ts +31 -0
  151. package/dpr/routes/journeys/view-report/async/report/utils.js +1 -1
  152. package/dpr/routes/journeys/view-report/async/report/utils.js.map +3 -3
  153. package/dpr/routes/journeys/view-report/async/report/utils.ts +173 -136
  154. package/dpr/routes/journeys/view-report/sync/tests.cy.js +1 -1
  155. package/dpr/routes/journeys/view-report/sync/tests.cy.js.map +3 -3
  156. package/dpr/routes/journeys/view-report/sync/tests.cy.ts +3 -4
  157. package/dpr/services/dashboardService.js +1 -1
  158. package/dpr/services/dashboardService.js.map +2 -2
  159. package/dpr/services/dashboardService.ts +7 -5
  160. package/dpr/services/productCollection/productCollectionService.js +2 -0
  161. package/dpr/services/productCollection/productCollectionService.js.map +7 -0
  162. package/dpr/services/productCollection/productCollectionService.ts +25 -0
  163. package/dpr/services/productCollection/productCollectionStoreService.js +2 -0
  164. package/dpr/services/productCollection/productCollectionStoreService.js.map +7 -0
  165. package/dpr/services/productCollection/productCollectionStoreService.ts +26 -0
  166. package/dpr/services/reportingService.js +1 -1
  167. package/dpr/services/reportingService.js.map +1 -1
  168. package/dpr/services/reportingService.ts +1 -1
  169. package/dpr/types/AsyncReportUtils.js.map +1 -1
  170. package/dpr/types/AsyncReportUtils.ts +3 -4
  171. package/dpr/types/Charts.js +1 -1
  172. package/dpr/types/Charts.js.map +3 -3
  173. package/dpr/types/Charts.ts +0 -82
  174. package/dpr/types/Metrics.js +1 -1
  175. package/dpr/types/Metrics.js.map +1 -1
  176. package/dpr/types/Metrics.ts +7 -0
  177. package/dpr/types/ReportQuery.js +1 -1
  178. package/dpr/types/ReportQuery.js.map +3 -3
  179. package/dpr/types/ReportQuery.ts +24 -15
  180. package/dpr/types/ReportStore.js +1 -1
  181. package/dpr/types/ReportStore.js.map +1 -1
  182. package/dpr/types/ReportStore.ts +1 -0
  183. package/dpr/types/Services.d.js +1 -1
  184. package/dpr/types/Services.d.js.map +1 -1
  185. package/dpr/types/Services.d.ts +15 -0
  186. package/dpr/types/api.d.js +1 -1
  187. package/dpr/types/api.d.js.map +1 -1
  188. package/dpr/types/api.d.ts +197 -6
  189. package/dpr/utils/Personalisation/personalisationUtils.js +1 -1
  190. package/dpr/utils/Personalisation/personalisationUtils.js.map +3 -3
  191. package/dpr/utils/Personalisation/personalisationUtils.ts +15 -6
  192. package/dpr/utils/ReportStoreServiceUtils.js +1 -1
  193. package/dpr/utils/ReportStoreServiceUtils.js.map +3 -3
  194. package/dpr/utils/ReportStoreServiceUtils.ts +7 -0
  195. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  196. package/dpr/utils/UserStoreItemBuilder.js.map +1 -1
  197. package/dpr/utils/UserStoreItemBuilder.ts +2 -2
  198. package/dpr/utils/datasetHelper.js +1 -1
  199. package/dpr/utils/datasetHelper.js.map +3 -3
  200. package/dpr/utils/datasetHelper.test.ts +11 -11
  201. package/dpr/utils/datasetHelper.ts +23 -8
  202. package/dpr/utils/logger.js +1 -1
  203. package/dpr/utils/logger.js.map +3 -3
  204. package/dpr/utils/logger.ts +6 -1
  205. package/package.json +2 -1
  206. package/dpr/components/_charts/chart/DashboardVisualisation.js +0 -2
  207. package/dpr/components/_charts/chart/DashboardVisualisation.js.map +0 -7
  208. package/dpr/components/_charts/chart/DashboardVisualisation.ts +0 -43
  209. package/dpr/components/_dashboards/dashboard/types.js +0 -2
  210. package/dpr/components/_dashboards/dashboard/types.js.map +0 -7
  211. package/dpr/components/_dashboards/dashboard/types.ts +0 -120
@@ -1,2 +1,2 @@
1
- var b=Object.create;var t=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var n in e)t(o,n,{get:e[n],enumerable:!0})},r=(o,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of m(e))!p.call(o,a)&&a!==n&&t(o,a,{get:()=>e[a],enumerable:!(i=u(e,a))||i.enumerable});return o};var l=(o,e,n)=>(n=o!=null?b(E(o)):{},r(e||!o||!o.__esModule?t(n,"default",{value:o,enumerable:!0}):n,o)),k=o=>r(t({},"__esModule",{value:!0}),o);var T={};c(T,{default:()=>h,init:()=>g});module.exports=k(T);var d=l(require("../catalogue-list/utils")),s=l(require("../../../utils/localsHelper"));const g=async({features:o,res:e,services:n})=>({data:await d.default.getReportsList(e,n,o),features:f(e,o)}),f=(o,e)=>{const{bookmarkingEnabled:n}=s.default.getValues(o);return{filteringEnabled:e?.filteringEnabled===void 0||e.filteringEnabled,unauthorisedToggleEnabled:e?.unauthorisedToggleEnabled===void 0||e.unauthorisedToggleEnabled,howToUseEnabled:e?.howToUseEnabled===void 0||e.howToUseEnabled,bookmarkingEnabled:e?.bookmarkingEnabled!==void 0?e.bookmarkingEnabled:n}};var h={init:g};0&&(module.exports={init});
1
+ var C=Object.create;var a=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var h=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var w=(o,e)=>{for(var t in e)a(o,t,{get:e[t],enumerable:!0})},s=(o,e,t,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of k(e))!S.call(o,n)&&n!==t&&a(o,n,{get:()=>e[n],enumerable:!(l=f(e,n))||l.enumerable});return o};var g=(o,e,t)=>(t=o!=null?C(h(o)):{},s(e||!o||!o.__esModule?a(t,"default",{value:o,enumerable:!0}):t,o)),T=o=>s(a({},"__esModule",{value:!0}),o);var P={};w(P,{default:()=>F,init:()=>m});module.exports=T(P);var b=g(require("../catalogue-list/utils")),p=g(require("../../../utils/localsHelper"));const m=async({features:o,res:e,services:t})=>{const l=await b.default.getReportsList(e,t,o),{token:n,bookmarkingEnabled:E,dprUser:d}=p.default.getValues(e),i=(await t.productCollectionService.getProductCollections(n))?.map(u=>({value:u.id,text:u.name}));i&&i.length>0&&i.unshift({value:"RESET",text:"Full catalogue"});const r=await t.productCollectionStoreService.getSelectedProductCollectionId(d.id),c=r&&await t.productCollectionService.getProductCollection(d.id,r);return{data:l,productCollectionInfo:{productCollections:i,...c&&{selectedProductCollection:c}},features:v(E,o)}},v=(o,e)=>({filteringEnabled:e?.filteringEnabled===void 0||e.filteringEnabled,unauthorisedToggleEnabled:e?.unauthorisedToggleEnabled===void 0||e.unauthorisedToggleEnabled,howToUseEnabled:e?.howToUseEnabled===void 0||e.howToUseEnabled,bookmarkingEnabled:e?.bookmarkingEnabled!==void 0?e.bookmarkingEnabled:o});var F={init:m};0&&(module.exports={init});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_catalogue/catalogue/utils.ts"],
4
- "sourcesContent": ["import { Response } from 'express'\nimport CatalogueListUtils from '../catalogue-list/utils'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { CatalogueFeatures } from './types'\n\nexport const init = async ({\n features,\n res,\n services,\n}: {\n features?: CatalogueFeatures\n res: Response\n services: Services\n}) => {\n const data = await CatalogueListUtils.getReportsList(res, services, features)\n return {\n data,\n features: setFeatures(res, features),\n }\n}\n\nconst setFeatures = (res: Response, features?: CatalogueFeatures) => {\n const { bookmarkingEnabled } = LocalsHelper.getValues(res)\n\n return {\n filteringEnabled: features?.filteringEnabled === undefined || features.filteringEnabled,\n unauthorisedToggleEnabled: features?.unauthorisedToggleEnabled === undefined || features.unauthorisedToggleEnabled,\n howToUseEnabled: features?.howToUseEnabled === undefined || features.howToUseEnabled,\n bookmarkingEnabled: features?.bookmarkingEnabled !== undefined ? features.bookmarkingEnabled : bookmarkingEnabled,\n }\n}\n\nexport default {\n init,\n}\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,SAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAA+B,sCAE/BC,EAAyB,0CAGlB,MAAMH,EAAO,MAAO,CACzB,SAAAI,EACA,IAAAC,EACA,SAAAC,CACF,KAMS,CACL,KAFW,MAAM,EAAAC,QAAmB,eAAeF,EAAKC,EAAUF,CAAQ,EAG1E,SAAUI,EAAYH,EAAKD,CAAQ,CACrC,GAGII,EAAc,CAACH,EAAeD,IAAiC,CACnE,KAAM,CAAE,mBAAAK,CAAmB,EAAI,EAAAC,QAAa,UAAUL,CAAG,EAEzD,MAAO,CACL,iBAAkBD,GAAU,mBAAqB,QAAaA,EAAS,iBACvE,0BAA2BA,GAAU,4BAA8B,QAAaA,EAAS,0BACzF,gBAAiBA,GAAU,kBAAoB,QAAaA,EAAS,gBACrE,mBAAoBA,GAAU,qBAAuB,OAAYA,EAAS,mBAAqBK,CACjG,CACF,EAEA,IAAOV,EAAQ,CACb,KAAAC,CACF",
6
- "names": ["utils_exports", "__export", "utils_default", "init", "__toCommonJS", "import_utils", "import_localsHelper", "features", "res", "services", "CatalogueListUtils", "setFeatures", "bookmarkingEnabled", "LocalsHelper"]
4
+ "sourcesContent": ["import { Response } from 'express'\nimport CatalogueListUtils from '../catalogue-list/utils'\nimport { Services } from '../../../types/Services'\nimport LocalsHelper from '../../../utils/localsHelper'\nimport { CatalogueFeatures } from './types'\n\nexport const init = async ({\n features,\n res,\n services,\n}: {\n features?: CatalogueFeatures\n res: Response\n services: Services\n}) => {\n const data = await CatalogueListUtils.getReportsList(res, services, features)\n const { token, bookmarkingEnabled, dprUser } = LocalsHelper.getValues(res)\n const productCollections = (await services.productCollectionService.getProductCollections(token))?.map(\n (collection) => ({\n value: collection.id,\n text: collection.name,\n }),\n )\n if (productCollections && productCollections.length > 0) {\n productCollections.unshift({ value: 'RESET', text: 'Full catalogue' })\n }\n const selectedProductCollectionId = await services.productCollectionStoreService.getSelectedProductCollectionId(\n dprUser.id,\n )\n const selectedProductCollection =\n selectedProductCollectionId &&\n (await services.productCollectionService.getProductCollection(dprUser.id, selectedProductCollectionId))\n return {\n data,\n productCollectionInfo: {\n productCollections,\n ...(selectedProductCollection && { selectedProductCollection }),\n },\n features: setFeatures(bookmarkingEnabled, features),\n }\n}\n\nconst setFeatures = (bookmarkingEnabled: boolean, features?: CatalogueFeatures) => {\n return {\n filteringEnabled: features?.filteringEnabled === undefined || features.filteringEnabled,\n unauthorisedToggleEnabled: features?.unauthorisedToggleEnabled === undefined || features.unauthorisedToggleEnabled,\n howToUseEnabled: features?.howToUseEnabled === undefined || features.howToUseEnabled,\n bookmarkingEnabled: features?.bookmarkingEnabled !== undefined ? features.bookmarkingEnabled : bookmarkingEnabled,\n }\n}\n\nexport default {\n init,\n}\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,SAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAA+B,sCAE/BC,EAAyB,0CAGlB,MAAMH,EAAO,MAAO,CACzB,SAAAI,EACA,IAAAC,EACA,SAAAC,CACF,IAIM,CACJ,MAAMC,EAAO,MAAM,EAAAC,QAAmB,eAAeH,EAAKC,EAAUF,CAAQ,EACtE,CAAE,MAAAK,EAAO,mBAAAC,EAAoB,QAAAC,CAAQ,EAAI,EAAAC,QAAa,UAAUP,CAAG,EACnEQ,GAAsB,MAAMP,EAAS,yBAAyB,sBAAsBG,CAAK,IAAI,IAChGK,IAAgB,CACf,MAAOA,EAAW,GAClB,KAAMA,EAAW,IACnB,EACF,EACID,GAAsBA,EAAmB,OAAS,GACpDA,EAAmB,QAAQ,CAAE,MAAO,QAAS,KAAM,gBAAiB,CAAC,EAEvE,MAAME,EAA8B,MAAMT,EAAS,8BAA8B,+BAC/EK,EAAQ,EACV,EACMK,EACJD,GACC,MAAMT,EAAS,yBAAyB,qBAAqBK,EAAQ,GAAII,CAA2B,EACvG,MAAO,CACL,KAAAR,EACA,sBAAuB,CACrB,mBAAAM,EACA,GAAIG,GAA6B,CAAE,0BAAAA,CAA0B,CAC/D,EACA,SAAUC,EAAYP,EAAoBN,CAAQ,CACpD,CACF,EAEMa,EAAc,CAACP,EAA6BN,KACzC,CACL,iBAAkBA,GAAU,mBAAqB,QAAaA,EAAS,iBACvE,0BAA2BA,GAAU,4BAA8B,QAAaA,EAAS,0BACzF,gBAAiBA,GAAU,kBAAoB,QAAaA,EAAS,gBACrE,mBAAoBA,GAAU,qBAAuB,OAAYA,EAAS,mBAAqBM,CACjG,GAGF,IAAOX,EAAQ,CACb,KAAAC,CACF",
6
+ "names": ["utils_exports", "__export", "utils_default", "init", "__toCommonJS", "import_utils", "import_localsHelper", "features", "res", "services", "data", "CatalogueListUtils", "token", "bookmarkingEnabled", "dprUser", "LocalsHelper", "productCollections", "collection", "selectedProductCollectionId", "selectedProductCollection", "setFeatures"]
7
7
  }
@@ -22,7 +22,15 @@ describe('CatalogueUtils', () => {
22
22
  },
23
23
  } as unknown as Response
24
24
 
25
- services = {} as unknown as Services
25
+ services = {
26
+ productCollectionService: {
27
+ getProductCollections: jest.fn(() => []),
28
+ getProductCollection: jest.fn(),
29
+ },
30
+ productCollectionStoreService: {
31
+ getSelectedProductCollectionId: jest.fn(),
32
+ },
33
+ } as unknown as Services
26
34
  })
27
35
 
28
36
  it('should init the catalogue with defaults', async () => {
@@ -36,6 +44,9 @@ describe('CatalogueUtils', () => {
36
44
  howToUseEnabled: true,
37
45
  unauthorisedToggleEnabled: true,
38
46
  },
47
+ productCollectionInfo: {
48
+ productCollections: [],
49
+ },
39
50
  })
40
51
  })
41
52
 
@@ -58,6 +69,9 @@ describe('CatalogueUtils', () => {
58
69
  howToUseEnabled: true,
59
70
  unauthorisedToggleEnabled: false,
60
71
  },
72
+ productCollectionInfo: {
73
+ productCollections: [],
74
+ },
61
75
  })
62
76
  })
63
77
  })
@@ -14,15 +14,33 @@ export const init = async ({
14
14
  services: Services
15
15
  }) => {
16
16
  const data = await CatalogueListUtils.getReportsList(res, services, features)
17
+ const { token, bookmarkingEnabled, dprUser } = LocalsHelper.getValues(res)
18
+ const productCollections = (await services.productCollectionService.getProductCollections(token))?.map(
19
+ (collection) => ({
20
+ value: collection.id,
21
+ text: collection.name,
22
+ }),
23
+ )
24
+ if (productCollections && productCollections.length > 0) {
25
+ productCollections.unshift({ value: 'RESET', text: 'Full catalogue' })
26
+ }
27
+ const selectedProductCollectionId = await services.productCollectionStoreService.getSelectedProductCollectionId(
28
+ dprUser.id,
29
+ )
30
+ const selectedProductCollection =
31
+ selectedProductCollectionId &&
32
+ (await services.productCollectionService.getProductCollection(dprUser.id, selectedProductCollectionId))
17
33
  return {
18
34
  data,
19
- features: setFeatures(res, features),
35
+ productCollectionInfo: {
36
+ productCollections,
37
+ ...(selectedProductCollection && { selectedProductCollection }),
38
+ },
39
+ features: setFeatures(bookmarkingEnabled, features),
20
40
  }
21
41
  }
22
42
 
23
- const setFeatures = (res: Response, features?: CatalogueFeatures) => {
24
- const { bookmarkingEnabled } = LocalsHelper.getValues(res)
25
-
43
+ const setFeatures = (bookmarkingEnabled: boolean, features?: CatalogueFeatures) => {
26
44
  return {
27
45
  filteringEnabled: features?.filteringEnabled === undefined || features.filteringEnabled,
28
46
  unauthorisedToggleEnabled: features?.unauthorisedToggleEnabled === undefined || features.unauthorisedToggleEnabled,
@@ -5,6 +5,7 @@
5
5
  {% macro dprCatalogue(args) %}
6
6
  {% set data = args.data %}
7
7
  {% set features = args.features %}
8
+ {% set productCollectionInfo = args.productCollectionInfo %}
8
9
 
9
10
  {% set head = data.head %}
10
11
  {% set rows = data.rows %}
@@ -16,7 +17,7 @@
16
17
  {{ dprCatalogueHowToUse(features) }}
17
18
  {% endif %}
18
19
 
19
- {{ dprCatalogueFilters(id, features) }}
20
+ {{ dprCatalogueFilters(id, features, productCollectionInfo) }}
20
21
  {{ dprCatalogueList(head, rows, id) }}
21
22
  <div>
22
23
  {% endmacro %}
@@ -3,14 +3,14 @@
3
3
  {% from "../catalogue-search/view.njk" import dprCatalogueSearch %}
4
4
  {% from "../catalogue-unauthorised-toggle/view.njk" import dprUnauthorisedToggle %}
5
5
 
6
- {% macro dprCatalogueFilters(id, features) %}
6
+ {% macro dprCatalogueFilters(id, features, productCollectionInfo) %}
7
7
  {% set filteringEnabled = features.filteringEnabled %}
8
8
  {% set unauthorisedToggleEnabled = features.unauthorisedToggleEnabled %}
9
9
 
10
10
  <div class='dpr-catalogue-filters' data-dpr-module='dpr-catalogue-filters'>
11
11
  <div class='dpr-catalogue-filters--heading'>
12
12
  <div class="dpr-catalogue-filters__search">
13
- {{ dprCatalogueSearch(id) }}
13
+ {{ dprCatalogueSearch(id, productCollectionInfo) }}
14
14
  </div>
15
15
  </div>
16
16
  <div class='dpr-catalogue-filters--content'>
@@ -1,2 +1,2 @@
1
- var P=Object.create;var S=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var O=(e,t)=>{for(var o in t)S(e,o,{get:t[o],enumerable:!0})},R=(e,t,o,D)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of E(t))!F.call(e,a)&&a!==o&&S(e,a,{get:()=>t[a],enumerable:!(D=B(t,a))||D.enumerable});return e};var M=(e,t,o)=>(o=e!=null?P(V(e)):{},R(t||!e||!e.__esModule?S(o,"default",{value:e,enumerable:!0}):o,e)),U=e=>R(S({},"__esModule",{value:!0}),e);var $={};O($,{default:()=>Y,getReportsList:()=>A});module.exports=U($);var c=require("../../../types/UserReports"),w=M(require("../../show-more/utils")),l=require("../../../utils/reportListsHelper"),x=M(require("../../../utils/localsHelper"));const A=async(e,t,o)=>{const{definitions:D,csrfToken:a,bookmarkingEnabled:H,dprUser:v}=x.default.getValues(e),C=D.sort((s,i)=>s.name<i.name?-1:s.name>i.name?1:0).flatMap(s=>{const{id:i,name:g,description:m,variants:T,dashboards:f,authorised:k}=s,p=T.map(r=>{const{id:n,name:u,description:d,isMissing:b}=r,N=r.loadType||c.LoadType.ASYNC;return{reportName:g,reportId:i,id:n,name:u,description:d,type:c.ReportType.REPORT,loadType:N,authorised:k,isMissing:b,...m&&m.length&&{reportDescription:m}}});let h=[];f&&(h=f.map(r=>{const{id:n,name:u,description:d,isMissing:b}=r;return{reportName:g,reportId:i,id:n,name:u,description:d,type:c.ReportType.DASHBOARD,reportDescription:m,authorised:k,isMissing:b,loadType:c.LoadType.ASYNC}}));const y=[...h,...p];return y.sort((r,n)=>r.name<n.name?-1:r.name>n.name?1:0),y}),I=await t.bookmarkService.getState(v.id),L=await Promise.all(C.map(async s=>{const{id:i,name:g,description:m,reportName:T,reportId:f,reportDescription:k,type:p,loadType:h,authorised:y,isMissing:r}=s,n=m||k||"",u=(0,l.setInitialHref)(h,p,f,i,e,r);let d;return(o?.bookmarkingEnabled!==void 0?o?.bookmarkingEnabled:H)&&(d=await t.bookmarkService.createBookMarkToggleHtml({userConfig:I,reportId:f,id:i,csrfToken:a,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(n)},{html:(0,l.createListActions)(u,p,h,d,y,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:L,id:"dpr-reports-catalogue"}};var Y={getReportsList:A};0&&(module.exports={getReportsList});
1
+ var P=Object.create;var b=Object.defineProperty;var B=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})},R=(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=B(t,n))||D.enumerable});return e};var M=(e,t,o)=>(o=e!=null?P(V(e)):{},R(t||!e||!e.__esModule?b(o,"default",{value:e,enumerable:!0}):o,e)),U=e=>R(b({},"__esModule",{value:!0}),e);var $={};O($,{default:()=>Y,getReportsList:()=>A});module.exports=U($);var d=require("../../../types/UserReports"),w=M(require("../../show-more/utils")),l=require("../../../utils/reportListsHelper"),x=M(require("../../../utils/localsHelper"));const A=async(e,t,o)=>{const{definitions:D,csrfToken:n,bookmarkingEnabled:H,dprUser:v}=x.default.getValues(e),C=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:S,dashboards:f,authorised:k}=a,p=S.map(r=>{const{id:s,name:u,description:c,isMissing:T}=r,N=r.loadType||d.LoadType.ASYNC;return{reportName:g,reportId:i,id:s,name:u,description:c,type:d.ReportType.REPORT,loadType:N,authorised:k,isMissing:T,...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:k,isMissing:!1,loadType:d.LoadType.ASYNC}}));const y=[...h,...p];return y.sort((r,s)=>r.name<s.name?-1:r.name>s.name?1:0),y}),I=await t.bookmarkService.getState(v.id),L=await Promise.all(C.map(async a=>{const{id:i,name:g,description:m,reportName:S,reportId:f,reportDescription:k,type:p,loadType:h,authorised:y,isMissing:r}=a,s=m||k||"",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:I,reportId:f,id:i,csrfToken:n,ctxId:"reports-list",reportType:p,isMissing:r})),[{html:`<p class="govuk-body-s">${S}</p>`},{html:(0,l.createListItemProductMin)(g,p)},{html:w.default.createShowMoreHtml(s)},{html:(0,l.createListActions)(u,p,h,c,y,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:L,id:"dpr-reports-catalogue"}};var Y={getReportsList:A};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 { DashboardDefinition } from '../../_dashboards/dashboard/types'\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: 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,\n type: ReportType.REPORT,\n 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: DashboardDefinition) => {\n const { id, name, description, isMissing } = dashboard\n return {\n reportName,\n reportId,\n id,\n name,\n description,\n type: ReportType.DASHBOARD,\n reportDescription,\n authorised,\n isMissing,\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,\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", "variantsArray", "variant", "id", "name", "description", "isMissing", "loadType", "dashboardsArray", "dashboard", "mergedArray", "userConfig", "rows", "v", "type", "desc", "href", "bookmarkHtml", "ShowMoreUtils"]
4
+ "sourcesContent": ["import { Response } from 'express'\nimport { components } from '../../../types/api'\nimport { Services } from '../../../types/Services'\nimport { DefinitionData, LoadType, ReportType } from '../../../types/UserReports'\nimport ShowMoreUtils from '../../show-more/utils'\nimport { createListItemProductMin, createListActions, setInitialHref } from '../../../utils/reportListsHelper'\nimport { CatalogueFeatures } from '../catalogue/types'\nimport LocalsHelper from '../../../utils/localsHelper'\n\nexport const getReportsList = async (\n res: Response,\n services: Services,\n features?: CatalogueFeatures,\n): Promise<{ head: { text: string }[]; rows: { text?: string; html?: string }[]; id: string }> => {\n const { definitions, csrfToken, bookmarkingEnabled, dprUser } = 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,\n type: ReportType.REPORT,\n 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,\n type: ReportType.DASHBOARD,\n 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,\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"]
7
7
  }
@@ -1,7 +1,6 @@
1
1
  import { Response } from 'express'
2
2
  import { components } from '../../../types/api'
3
3
  import { Services } from '../../../types/Services'
4
- import { DashboardDefinition } from '../../_dashboards/dashboard/types'
5
4
  import { DefinitionData, LoadType, ReportType } from '../../../types/UserReports'
6
5
  import ShowMoreUtils from '../../show-more/utils'
7
6
  import { createListItemProductMin, createListActions, setInitialHref } from '../../../utils/reportListsHelper'
@@ -28,7 +27,7 @@ export const getReportsList = async (
28
27
  const sortedVariants = sortedDefinitions.flatMap(
29
28
  (
30
29
  def: components['schemas']['ReportDefinitionSummary'] & {
31
- dashboards: DashboardDefinition[]
30
+ dashboards: components['schemas']['DashboardDefinition'][]
32
31
  authorised: boolean
33
32
  },
34
33
  ) => {
@@ -58,8 +57,8 @@ export const getReportsList = async (
58
57
 
59
58
  let dashboardsArray: DefinitionData[] = []
60
59
  if (dashboards) {
61
- dashboardsArray = dashboards.map((dashboard: DashboardDefinition) => {
62
- const { id, name, description, isMissing } = dashboard
60
+ dashboardsArray = dashboards.map((dashboard: components['schemas']['DashboardDefinition']) => {
61
+ const { id, name, description } = dashboard
63
62
  return {
64
63
  reportName,
65
64
  reportId,
@@ -69,7 +68,7 @@ export const getReportsList = async (
69
68
  type: ReportType.DASHBOARD,
70
69
  reportDescription,
71
70
  authorised,
72
- isMissing,
71
+ isMissing: false,
73
72
  loadType: LoadType.ASYNC,
74
73
  }
75
74
  })
@@ -17,9 +17,23 @@ class DprCatalogueSearch extends DprCatalogueFilters {
17
17
  this.initSeachBoxEvents()
18
18
  this.updateTableRows()
19
19
  this.initSearchInputFromQueryParams()
20
+ this.initProductCollectionSelect()
20
21
  }
21
22
  }
22
23
 
24
+ initProductCollectionSelect() {
25
+ /**
26
+ * @type {HTMLSelectElement | undefined}
27
+ */
28
+ const productCollections = this.getElement().querySelector('#productCollection')
29
+ if (productCollections) {
30
+ productCollections.addEventListener('change', (e) => {
31
+ e.preventDefault()
32
+ productCollections.closest('form').submit()
33
+ })
34
+ }
35
+ }
36
+
23
37
  initSeachBoxEvents() {
24
38
  this.searchBox.addEventListener('keyup', (e) => {
25
39
  this.updateTableRows(e.target.value)
@@ -1,6 +1,10 @@
1
1
  {% from "govuk/components/input/macro.njk" import govukInput %}
2
+ {% from "govuk/components/select/macro.njk" import govukSelect %}
3
+
4
+ {% macro dprCatalogueSearch(id, productCollectionInfo, type = 'catalogue') %}
5
+ {% set productCollections = productCollectionInfo.productCollections %}
6
+ {% set selectedProductCollection = productCollectionInfo.selectedProductCollection %}
2
7
 
3
- {% macro dprCatalogueSearch(id, type = 'catalogue') %}
4
8
  <div class="dpr-search" data-dpr-module="dpr-catalogue-search">
5
9
  <div class="dpr-search-inputs">
6
10
  {{ govukInput({
@@ -17,6 +21,25 @@
17
21
  "data-table-id": id
18
22
  }
19
23
  }) }}
24
+ {% if productCollections.length > 0 %}
25
+ <form method="post" action="dpr/product-collection/selected">
26
+ {{ govukSelect({
27
+ id: 'productCollection',
28
+ name: 'productCollection',
29
+ value: selectedProductCollection.id,
30
+ formGroup: {
31
+ attributes: {
32
+ style: "justify-self: end;"
33
+ }
34
+ },
35
+ items: productCollections,
36
+ label: {
37
+ text: 'Your collections',
38
+ classes: "govuk-label govuk-!-font-weight-bold govuk-!-margin-bottom-2"
39
+ }
40
+ }) }}
41
+ </form>
42
+ {% endif %}
20
43
  </div>
21
44
  </div>
22
45
  {% endmacro %}
@@ -1,2 +1,2 @@
1
- var h=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var m=(a,t)=>{for(var s in t)h(a,s,{get:t[s],enumerable:!0})},C=(a,t,s,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of k(t))!b.call(a,i)&&i!==s&&h(a,i,{get:()=>t[i],enumerable:!(e=p(t,i))||e.enumerable});return a};var d=a=>C(h({},"__esModule",{value:!0}),a);var g={};m(g,{Buckets:()=>c,default:()=>f});module.exports=d(g);var l=require("with-alpha-hex");class c{constructor(t,s,e,i,o){this.baseColour="#1d70b8";this.ragColours=["#00703c","#ffdd00","#d4351c"];this.buckets=[];this.hasRagScore=!1;this.initFromOptions=t=>{this.options=t.options||{},this.baseColour=this.options?.baseColour||this.baseColour,this.useRagColours=this.options?.useRagColours||!1,this.onlyBucketColoursDefined=this.options?.buckets?.every(s=>!s.max&&!s.min&&s.hexColour!==void 0)};this.initBuckets=()=>{const{buckets:t}=this.options;this.setBucketCount(),this.initBucketColours(),t?this.hasRagScore?this.onlyBucketColoursDefined&&(this.buckets=t):!this.hasRagScore&&this.onlyBucketColoursDefined&&this.autoBucketing?this.initAutomaticThresholdBucket():this.initCustomThresholdBuckets():!t&&!this.hasRagScore&&this.autoBucketing&&this.initAutomaticThresholdBucket()};this.initCustomThresholdBuckets=()=>{this.buckets=this.options.buckets.map((t,s)=>({...this.buckets[s],...t}))};this.initAutomaticThresholdBucket=()=>{const{min:t,max:s,bucketSize:e}=this.setAutomaticThresholdSize();let i=0;this.buckets=this.buckets.map((o,u)=>{let r=t;return u!==0&&(r=i+1),i=e*(u+1)+t,u===this.buckets.length-1&&(i=s),{hexColour:this.options?.buckets?this.options.buckets[u]?.hexColour:o.hexColour,min:r,max:i}})};this.initBucketColours=()=>{if(this.useRagColours&&this.bucketCount===3)this.buckets=Array.from(new Array(this.bucketCount)).map((t,s)=>({hexColour:this.ragColours[s]}));else{const t=1/this.bucketCount;this.buckets=Array.from(new Array(this.bucketCount)).map((s,e)=>{const i=t*(e+1);return{hexColour:(0,l.withAlphaHex)(this.baseColour,i)}})}};this.setAutomaticThresholdSize=()=>{const t=this.responseData.map(o=>Number(o[this.valueKey].raw)),s=Math.min(...t),e=Math.max(...t),i=Math.ceil((e-s)/this.bucketCount);return{min:s,max:e,bucketSize:i}};this.setBucketCount=()=>{const{buckets:t}=this.options;this.hasRagScore?this.useRagColours?this.bucketCount=3:this.bucketCount=Math.max(...this.responseData.map(s=>s[this.valueKey].rag))+1:t?this.bucketCount=t.length:this.bucketCount=3};this.getBucketForValue=(t,s)=>{let e,i;return s!==void 0?{colour:this.buckets[s].hexColour,score:s}:(this.buckets.forEach((o,u)=>{const{min:r,max:n}=o;!r&&n&&t<=n&&(e=o.hexColour,i=u.toString()),r&&t>=o.min&&n&&t<=o.max&&(e=o.hexColour,i=u.toString()),r&&!n&&t>=r&&(e=o.hexColour,i=u.toString())}),{colour:e,score:i})};this.getBuckets=()=>this.buckets;this.responseData=t,this.initFromOptions(s),this.valueKey=e,this.hasRagScore=t[0][this.valueKey].rag!==void 0,this.autoBucketing=i,o&&(this.ragColours=o),this.initBuckets()}}var f=c;0&&(module.exports={Buckets});
1
+ var h=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var m=(u,t)=>{for(var s in t)h(u,s,{get:t[s],enumerable:!0})},f=(u,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of k(t))!b.call(u,e)&&e!==s&&h(u,e,{get:()=>t[e],enumerable:!(i=p(t,e))||i.enumerable});return u};var C=u=>f(h({},"__esModule",{value:!0}),u);var g={};m(g,{Buckets:()=>c,default:()=>d});module.exports=C(g);var l=require("with-alpha-hex");class c{constructor(t,s,i,e,o){this.baseColour="#1d70b8";this.ragColours=["#00703c","#ffdd00","#d4351c"];this.buckets=[];this.useRagColour=!1;this.bucketCount=0;this.onlyBucketColoursDefined=!1;this.autoBucketing=!1;this.hasRagScore=!1;this.options={};this.initFromOptions=t=>{this.options=t.options||{},this.baseColour=this.options?.baseColour||this.baseColour,this.useRagColour=this.options?.useRagColour||!1,this.onlyBucketColoursDefined=this.options&&this.options.buckets?this.options?.buckets?.every(s=>!s.max&&!s.min&&s.hexColour!==void 0):!1};this.initBuckets=()=>{const{buckets:t}=this.options;this.setBucketCount(),this.initBucketColours(),t?this.hasRagScore?this.onlyBucketColoursDefined&&(this.buckets=t):!this.hasRagScore&&this.onlyBucketColoursDefined&&this.autoBucketing?this.initAutomaticThresholdBucket():this.initCustomThresholdBuckets():!t&&!this.hasRagScore&&this.autoBucketing&&this.initAutomaticThresholdBucket()};this.initCustomThresholdBuckets=()=>{this.buckets=this.options.buckets?this.options.buckets.map((t,s)=>({...this.buckets[s],...t})):[]};this.initAutomaticThresholdBucket=()=>{const{min:t,max:s,bucketSize:i}=this.setAutomaticThresholdSize();let e=0;this.buckets=this.buckets.map((o,a)=>{let r=t;return a!==0&&(r=e+1),e=i*(a+1)+t,a===this.buckets.length-1&&(e=s),{hexColour:this.options?.buckets?this.options.buckets[a]?.hexColour:o.hexColour,min:r,max:e}})};this.initBucketColours=()=>{if(this.useRagColour&&this.bucketCount===3)this.buckets=Array.from(new Array(this.bucketCount)).map((t,s)=>({hexColour:this.ragColours[s]}));else{const t=1/this.bucketCount;this.buckets=Array.from(new Array(this.bucketCount)).map((s,i)=>{const e=t*(i+1);return{hexColour:(0,l.withAlphaHex)(this.baseColour,e)}})}};this.setAutomaticThresholdSize=()=>{const t=this.responseData.map(o=>Number(o[this.valueKey].raw)),s=Math.min(...t),i=Math.max(...t),e=Math.ceil((i-s)/this.bucketCount);return{min:s,max:i,bucketSize:e}};this.setBucketCount=()=>{const{buckets:t}=this.options;if(this.hasRagScore)if(this.useRagColour)this.bucketCount=3;else{const s=this.responseData.reduce((i,e)=>(e[this.valueKey].rag!==void 0&&i.push(e[this.valueKey].rag),i),[]);this.bucketCount=Math.max(...s)+1}else t?this.bucketCount=t.length:this.bucketCount=3};this.getBucketForValue=(t,s)=>{let i="",e=0;return s!==void 0?{colour:this.buckets[s].hexColour||i,score:s}:(this.buckets.forEach((o,a)=>{const{min:r,max:n}=o;!r&&n&&t<=n&&(i=o.hexColour||i,e=a),r&&t>=r&&n&&t<=n&&(i=o.hexColour||i,e=a),r&&!n&&t>=r&&(i=o.hexColour||i,e=a)}),{colour:i,score:e})};this.getBuckets=()=>this.buckets;this.responseData=t,this.initFromOptions(s),this.valueKey=i,this.hasRagScore=t[0][this.valueKey].rag!==void 0,this.autoBucketing=!!e,o&&(this.ragColours=o),this.initBuckets()}}var d=c;0&&(module.exports={Buckets});
2
2
  //# sourceMappingURL=Buckets.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dpr/components/_charts/chart/Buckets.ts"],
4
- "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { withAlphaHex } from 'with-alpha-hex'\nimport { DashboardDataResponse } from '../../../types/Metrics'\nimport {\n DashboardVisualisation,\n DashboardVisualisationBucket,\n BucketDashboardVisualisationOptions,\n} from '../../_dashboards/dashboard/types'\n\nclass Buckets {\n private baseColour = '#1d70b8'\n\n private ragColours: string[] = ['#00703c', '#ffdd00', '#d4351c']\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private useRagColours: boolean\n\n private bucketCount: number\n\n private onlyBucketColoursDefined: boolean\n\n private autoBucketing: boolean\n\n private hasRagScore = false\n\n private valueKey: string\n\n private options: BucketDashboardVisualisationOptions\n\n responseData: DashboardDataResponse[]\n\n constructor(\n responseData: DashboardDataResponse[],\n definition: DashboardVisualisation,\n valueKey: string,\n autoBucketing?: boolean,\n ragColours?: string[],\n ) {\n this.responseData = responseData\n this.initFromOptions(definition)\n this.valueKey = valueKey\n this.hasRagScore = responseData[0][this.valueKey].rag !== undefined\n this.autoBucketing = autoBucketing\n if (ragColours) this.ragColours = ragColours\n this.initBuckets()\n }\n\n private initFromOptions = (definition: DashboardVisualisation) => {\n this.options = <BucketDashboardVisualisationOptions>definition.options || {}\n this.baseColour = this.options?.baseColour || this.baseColour\n this.useRagColours = this.options?.useRagColours || false\n this.onlyBucketColoursDefined = this.options?.buckets?.every(\n (bucket) => !bucket.max && !bucket.min && bucket.hexColour !== undefined,\n )\n }\n\n private initBuckets = () => {\n const { buckets } = this.options\n\n this.setBucketCount()\n this.initBucketColours()\n\n if (buckets) {\n if (this.hasRagScore) {\n if (this.onlyBucketColoursDefined) {\n this.buckets = buckets\n }\n } else if (!this.hasRagScore && this.onlyBucketColoursDefined && this.autoBucketing) {\n this.initAutomaticThresholdBucket()\n } else {\n this.initCustomThresholdBuckets()\n }\n } else if (!buckets && !this.hasRagScore && this.autoBucketing) {\n this.initAutomaticThresholdBucket()\n }\n }\n\n private initCustomThresholdBuckets = () => {\n this.buckets = this.options.buckets.map((bucket, i) => {\n return {\n ...this.buckets[i],\n ...bucket,\n }\n })\n }\n\n /**\n * Initialises the bucket thresholds by defining the range between the min and max\n * and dividing into 3 equal parts\n */\n private initAutomaticThresholdBucket = () => {\n const { min, max, bucketSize } = this.setAutomaticThresholdSize()\n let maxValue = 0\n this.buckets = this.buckets.map((bucket, i) => {\n let minValue = min\n if (i !== 0) minValue = maxValue + 1\n maxValue = bucketSize * (i + 1) + min\n if (i === this.buckets.length - 1) maxValue = max\n\n return {\n hexColour: this.options?.buckets ? this.options.buckets[i]?.hexColour : bucket.hexColour,\n min: minValue,\n max: maxValue,\n }\n })\n }\n\n private initBucketColours = () => {\n if (this.useRagColours && this.bucketCount === 3) {\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n return {\n hexColour: this.ragColours[i],\n }\n })\n } else {\n const alphaDivision = 1 / this.bucketCount\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n const division = alphaDivision * (i + 1)\n return {\n hexColour: withAlphaHex(this.baseColour, division),\n }\n })\n }\n }\n\n private setAutomaticThresholdSize = () => {\n const values = this.responseData.map((resData) => Number(resData[this.valueKey].raw))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const bucketSize = Math.ceil((max - min) / this.bucketCount)\n\n return {\n min,\n max,\n bucketSize,\n }\n }\n\n private setBucketCount = () => {\n const { buckets } = this.options\n if (this.hasRagScore) {\n if (this.useRagColours) {\n this.bucketCount = 3\n } else {\n this.bucketCount =\n Math.max(...this.responseData.map((resData: DashboardDataResponse) => resData[this.valueKey].rag)) + 1\n }\n } else if (buckets) {\n this.bucketCount = buckets.length\n } else {\n this.bucketCount = 3\n }\n }\n\n getBucketForValue = (value: number, ragScore?: number) => {\n let colour\n let score\n\n if (ragScore !== undefined) {\n return {\n colour: this.buckets[ragScore].hexColour,\n score: ragScore,\n }\n }\n\n this.buckets.forEach((bucket, index) => {\n const { min, max } = bucket\n // First bucket\n if (!min && max && value <= max) {\n colour = bucket.hexColour\n score = index.toString()\n }\n // middle buckets\n if (min && value >= bucket.min && max && value <= bucket.max) {\n colour = bucket.hexColour\n score = index.toString()\n }\n // last bucket\n if (min && !max && value >= min) {\n colour = bucket.hexColour\n score = index.toString()\n }\n })\n\n return {\n colour,\n score,\n }\n }\n\n getBuckets = () => {\n return this.buckets\n }\n}\n\nexport { Buckets }\nexport default Buckets\n"],
5
- "mappings": "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",
6
- "names": ["Buckets_exports", "__export", "Buckets", "Buckets_default", "__toCommonJS", "import_with_alpha_hex", "responseData", "definition", "valueKey", "autoBucketing", "ragColours", "bucket", "buckets", "i", "min", "max", "bucketSize", "maxValue", "minValue", "d", "alphaDivision", "division", "values", "resData", "value", "ragScore", "colour", "score", "index"]
4
+ "sourcesContent": ["/* eslint-disable prefer-destructuring */\nimport { withAlphaHex } from 'with-alpha-hex'\nimport { DashboardDataResponse, DashboardDataResponseWithRag } from '../../../types/Metrics'\nimport {\n DashboardVisualisationBucket,\n BucketDashboardVisualisationOptions,\n} from '../../_dashboards/dashboard-visualisation/types'\nimport { components } from '../../../types/api'\n\nclass Buckets {\n private baseColour = '#1d70b8'\n\n private ragColours: string[] = ['#00703c', '#ffdd00', '#d4351c']\n\n private buckets: DashboardVisualisationBucket[] = []\n\n private useRagColour = false\n\n private bucketCount = 0\n\n private onlyBucketColoursDefined = false\n\n private autoBucketing = false\n\n private hasRagScore = false\n\n private valueKey: string\n\n private options: BucketDashboardVisualisationOptions = {}\n\n responseData: DashboardDataResponse[]\n\n constructor(\n responseData: DashboardDataResponse[],\n definition: components['schemas']['DashboardVisualisationDefinition'],\n valueKey: string,\n autoBucketing?: boolean,\n ragColours?: string[],\n ) {\n this.responseData = responseData\n this.initFromOptions(definition)\n this.valueKey = valueKey\n this.hasRagScore = responseData[0][this.valueKey].rag !== undefined\n this.autoBucketing = Boolean(autoBucketing)\n if (ragColours) this.ragColours = ragColours\n this.initBuckets()\n }\n\n private initFromOptions = (definition: components['schemas']['DashboardVisualisationDefinition']) => {\n this.options = <BucketDashboardVisualisationOptions>definition.options || {}\n this.baseColour = this.options?.baseColour || this.baseColour\n this.useRagColour = this.options?.useRagColour || false\n this.onlyBucketColoursDefined =\n this.options && this.options.buckets\n ? this.options?.buckets?.every((bucket) => !bucket.max && !bucket.min && bucket.hexColour !== undefined)\n : false\n }\n\n private initBuckets = () => {\n const { buckets } = this.options\n\n this.setBucketCount()\n this.initBucketColours()\n\n if (buckets) {\n if (this.hasRagScore) {\n if (this.onlyBucketColoursDefined) {\n this.buckets = buckets\n }\n } else if (!this.hasRagScore && this.onlyBucketColoursDefined && this.autoBucketing) {\n this.initAutomaticThresholdBucket()\n } else {\n this.initCustomThresholdBuckets()\n }\n } else if (!buckets && !this.hasRagScore && this.autoBucketing) {\n this.initAutomaticThresholdBucket()\n }\n }\n\n private initCustomThresholdBuckets = () => {\n this.buckets = this.options.buckets\n ? this.options.buckets.map((bucket, i) => {\n return {\n ...this.buckets[i],\n ...bucket,\n }\n })\n : []\n }\n\n /**\n * Initialises the bucket thresholds by defining the range between the min and max\n * and dividing into 3 equal parts\n */\n private initAutomaticThresholdBucket = () => {\n const { min, max, bucketSize } = this.setAutomaticThresholdSize()\n let maxValue = 0\n this.buckets = this.buckets.map((bucket, i) => {\n let minValue = min\n if (i !== 0) minValue = maxValue + 1\n maxValue = bucketSize * (i + 1) + min\n if (i === this.buckets.length - 1) maxValue = max\n\n return {\n hexColour: this.options?.buckets ? this.options.buckets[i]?.hexColour : bucket.hexColour,\n min: minValue,\n max: maxValue,\n }\n })\n }\n\n private initBucketColours = () => {\n if (this.useRagColour && this.bucketCount === 3) {\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n return {\n hexColour: this.ragColours[i],\n }\n })\n } else {\n const alphaDivision = 1 / this.bucketCount\n this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {\n const division = alphaDivision * (i + 1)\n return {\n hexColour: withAlphaHex(this.baseColour, division),\n }\n })\n }\n }\n\n private setAutomaticThresholdSize = () => {\n const values = this.responseData.map((resData) => Number(resData[this.valueKey].raw))\n const min = Math.min(...values)\n const max = Math.max(...values)\n const bucketSize = Math.ceil((max - min) / this.bucketCount)\n\n return {\n min,\n max,\n bucketSize,\n }\n }\n\n private setBucketCount = () => {\n const { buckets } = this.options\n if (this.hasRagScore) {\n if (this.useRagColour) {\n this.bucketCount = 3\n } else {\n const allRags: number[] = this.responseData.reduce((acc: number[], resData: DashboardDataResponse) => {\n if (resData[this.valueKey].rag !== undefined) {\n acc.push(<number>resData[this.valueKey].rag)\n }\n return acc\n }, [])\n this.bucketCount = Math.max(...allRags) + 1\n }\n } else if (buckets) {\n this.bucketCount = buckets.length\n } else {\n this.bucketCount = 3\n }\n }\n\n getBucketForValue = (value: number, ragScore?: number): { colour: string; score: number } => {\n let colour = ''\n let score = 0\n\n if (ragScore !== undefined) {\n return {\n colour: this.buckets[ragScore].hexColour || colour,\n score: ragScore,\n }\n }\n\n this.buckets.forEach((bucket, index) => {\n const { min, max } = bucket\n // First bucket\n if (!min && max && value <= max) {\n colour = bucket.hexColour || colour\n score = index\n }\n // middle buckets\n if (min && value >= min && max && value <= max) {\n colour = bucket.hexColour || colour\n score = index\n }\n // last bucket\n if (min && !max && value >= min) {\n colour = bucket.hexColour || colour\n score = index\n }\n })\n\n return {\n colour,\n score,\n }\n }\n\n getBuckets = () => {\n return this.buckets\n }\n}\n\nexport { Buckets }\nexport default Buckets\n"],
5
+ "mappings": "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",
6
+ "names": ["Buckets_exports", "__export", "Buckets", "Buckets_default", "__toCommonJS", "import_with_alpha_hex", "responseData", "definition", "valueKey", "autoBucketing", "ragColours", "bucket", "buckets", "i", "min", "max", "bucketSize", "maxValue", "minValue", "d", "alphaDivision", "division", "values", "resData", "allRags", "acc", "value", "ragScore", "colour", "score", "index"]
7
7
  }
@@ -1,11 +1,11 @@
1
1
  /* eslint-disable prefer-destructuring */
2
2
  import { withAlphaHex } from 'with-alpha-hex'
3
- import { DashboardDataResponse } from '../../../types/Metrics'
3
+ import { DashboardDataResponse, DashboardDataResponseWithRag } from '../../../types/Metrics'
4
4
  import {
5
- DashboardVisualisation,
6
5
  DashboardVisualisationBucket,
7
6
  BucketDashboardVisualisationOptions,
8
- } from '../../_dashboards/dashboard/types'
7
+ } from '../../_dashboards/dashboard-visualisation/types'
8
+ import { components } from '../../../types/api'
9
9
 
10
10
  class Buckets {
11
11
  private baseColour = '#1d70b8'
@@ -14,25 +14,25 @@ class Buckets {
14
14
 
15
15
  private buckets: DashboardVisualisationBucket[] = []
16
16
 
17
- private useRagColours: boolean
17
+ private useRagColour = false
18
18
 
19
- private bucketCount: number
19
+ private bucketCount = 0
20
20
 
21
- private onlyBucketColoursDefined: boolean
21
+ private onlyBucketColoursDefined = false
22
22
 
23
- private autoBucketing: boolean
23
+ private autoBucketing = false
24
24
 
25
25
  private hasRagScore = false
26
26
 
27
27
  private valueKey: string
28
28
 
29
- private options: BucketDashboardVisualisationOptions
29
+ private options: BucketDashboardVisualisationOptions = {}
30
30
 
31
31
  responseData: DashboardDataResponse[]
32
32
 
33
33
  constructor(
34
34
  responseData: DashboardDataResponse[],
35
- definition: DashboardVisualisation,
35
+ definition: components['schemas']['DashboardVisualisationDefinition'],
36
36
  valueKey: string,
37
37
  autoBucketing?: boolean,
38
38
  ragColours?: string[],
@@ -41,18 +41,19 @@ class Buckets {
41
41
  this.initFromOptions(definition)
42
42
  this.valueKey = valueKey
43
43
  this.hasRagScore = responseData[0][this.valueKey].rag !== undefined
44
- this.autoBucketing = autoBucketing
44
+ this.autoBucketing = Boolean(autoBucketing)
45
45
  if (ragColours) this.ragColours = ragColours
46
46
  this.initBuckets()
47
47
  }
48
48
 
49
- private initFromOptions = (definition: DashboardVisualisation) => {
49
+ private initFromOptions = (definition: components['schemas']['DashboardVisualisationDefinition']) => {
50
50
  this.options = <BucketDashboardVisualisationOptions>definition.options || {}
51
51
  this.baseColour = this.options?.baseColour || this.baseColour
52
- this.useRagColours = this.options?.useRagColours || false
53
- this.onlyBucketColoursDefined = this.options?.buckets?.every(
54
- (bucket) => !bucket.max && !bucket.min && bucket.hexColour !== undefined,
55
- )
52
+ this.useRagColour = this.options?.useRagColour || false
53
+ this.onlyBucketColoursDefined =
54
+ this.options && this.options.buckets
55
+ ? this.options?.buckets?.every((bucket) => !bucket.max && !bucket.min && bucket.hexColour !== undefined)
56
+ : false
56
57
  }
57
58
 
58
59
  private initBuckets = () => {
@@ -77,12 +78,14 @@ class Buckets {
77
78
  }
78
79
 
79
80
  private initCustomThresholdBuckets = () => {
80
- this.buckets = this.options.buckets.map((bucket, i) => {
81
- return {
82
- ...this.buckets[i],
83
- ...bucket,
84
- }
85
- })
81
+ this.buckets = this.options.buckets
82
+ ? this.options.buckets.map((bucket, i) => {
83
+ return {
84
+ ...this.buckets[i],
85
+ ...bucket,
86
+ }
87
+ })
88
+ : []
86
89
  }
87
90
 
88
91
  /**
@@ -107,7 +110,7 @@ class Buckets {
107
110
  }
108
111
 
109
112
  private initBucketColours = () => {
110
- if (this.useRagColours && this.bucketCount === 3) {
113
+ if (this.useRagColour && this.bucketCount === 3) {
111
114
  this.buckets = Array.from(new Array(this.bucketCount)).map((d, i) => {
112
115
  return {
113
116
  hexColour: this.ragColours[i],
@@ -140,11 +143,16 @@ class Buckets {
140
143
  private setBucketCount = () => {
141
144
  const { buckets } = this.options
142
145
  if (this.hasRagScore) {
143
- if (this.useRagColours) {
146
+ if (this.useRagColour) {
144
147
  this.bucketCount = 3
145
148
  } else {
146
- this.bucketCount =
147
- Math.max(...this.responseData.map((resData: DashboardDataResponse) => resData[this.valueKey].rag)) + 1
149
+ const allRags: number[] = this.responseData.reduce((acc: number[], resData: DashboardDataResponse) => {
150
+ if (resData[this.valueKey].rag !== undefined) {
151
+ acc.push(<number>resData[this.valueKey].rag)
152
+ }
153
+ return acc
154
+ }, [])
155
+ this.bucketCount = Math.max(...allRags) + 1
148
156
  }
149
157
  } else if (buckets) {
150
158
  this.bucketCount = buckets.length
@@ -153,13 +161,13 @@ class Buckets {
153
161
  }
154
162
  }
155
163
 
156
- getBucketForValue = (value: number, ragScore?: number) => {
157
- let colour
158
- let score
164
+ getBucketForValue = (value: number, ragScore?: number): { colour: string; score: number } => {
165
+ let colour = ''
166
+ let score = 0
159
167
 
160
168
  if (ragScore !== undefined) {
161
169
  return {
162
- colour: this.buckets[ragScore].hexColour,
170
+ colour: this.buckets[ragScore].hexColour || colour,
163
171
  score: ragScore,
164
172
  }
165
173
  }
@@ -168,18 +176,18 @@ class Buckets {
168
176
  const { min, max } = bucket
169
177
  // First bucket
170
178
  if (!min && max && value <= max) {
171
- colour = bucket.hexColour
172
- score = index.toString()
179
+ colour = bucket.hexColour || colour
180
+ score = index
173
181
  }
174
182
  // middle buckets
175
- if (min && value >= bucket.min && max && value <= bucket.max) {
176
- colour = bucket.hexColour
177
- score = index.toString()
183
+ if (min && value >= min && max && value <= max) {
184
+ colour = bucket.hexColour || colour
185
+ score = index
178
186
  }
179
187
  // last bucket
180
188
  if (min && !max && value >= min) {
181
- colour = bucket.hexColour
182
- score = index.toString()
189
+ colour = bucket.hexColour || colour
190
+ score = index
183
191
  }
184
192
  })
185
193
 
@@ -1,2 +1,2 @@
1
- var g=Object.create;var h=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var x=(e,i)=>{for(var t in i)h(e,t,{get:i[t],enumerable:!0})},p=(e,i,t,a)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of w(i))!V.call(e,s)&&s!==t&&h(e,s,{get:()=>i[s],enumerable:!(a=M(i,s))||a.enumerable});return e};var d=(e,i,t)=>(t=e!=null?g(F(e)):{},p(i||!e||!e.__esModule?h(t,"default",{value:e,enumerable:!0}):t,e)),B=e=>p(h({},"__esModule",{value:!0}),e);var C={};x(C,{HeatmapChart:()=>m,default:()=>Y});module.exports=B(C);var n=d(require("dayjs")),y=require("../../../_dashboards/dashboard/types"),D=d(require("../../../../utils/datasetHelper")),b=d(require("../DashboardVisualisation")),f=d(require("../Buckets"));class m extends b.default{constructor(t,a,s){super(t,s);this.data=[];this.dayDateFormat="DD/MM/YYYY";this.buckets=[];this.initUnit=()=>{this.unit=this.columns.measures[0].unit?this.columns.measures[0].unit:void 0};this.setLabel=()=>{const{id:t,display:a}=this.columns.measures[1];this.valueKey=t,this.label=a};this.validateDefinition=()=>{const{id:t,columns:a,type:s}=this.definition,o=[];if(a.measures.length!==2?o.push(`Measures should only have 2 columns defined. Only found ${a.measures.length}`):s===y.DashboardVisualisationType.MATRIX_TIMESERIES&&a.measures[0].id!=="ts"&&o.push(`measure at index 0 has incorrect ID. Expected ID to be "ts". Found "${a.measures[0].id}"`),o.length){const r=`Validation: Visualisaton definition: ID: ${t}, type: ${s}, errors: ${o.join(",")}`;throw new Error(r)}};this.initTimeseriesData=()=>{const t=D.default.groupRowsByTimestamp(this.responseData);this.data=t.map(a=>{const{raw:s,rag:o}=a[0][this.valueKey],r=a[0].ts.raw,k=Number(s),v=o!==void 0?Number(a[0][this.valueKey].rag):void 0;let u,l;switch(this.granularity){case"hourly":break;case"weekly":u=(0,n.default)(r,this.dayDateFormat).format("ddd"),l=(0,n.default)(r,this.dayDateFormat).week();break;case"daily":u=(0,n.default)(r,this.dayDateFormat).format("MMM YY"),l=(0,n.default)(r,this.dayDateFormat).format("D");break;case"monthly":{const c=r.split(" ");u=c[1],l=c[0]}break;case"annually":u="year",l=r;break;default:u=(0,n.default)(r,this.dayDateFormat).format("MMM YY"),l=(0,n.default)(r,this.dayDateFormat).format("D");break}return{y:l,x:u,v:k,r:v}})};this.bucketData=()=>{this.data=this.data.map(t=>{const{v:a,r:s}=t,o=this.bucketsHelper.getBucketForValue(a,s);return{...t,c:o.colour}})};this.build=()=>(this.validateDefinition(),this.initTimeseriesData(),this.bucketData(),{type:this.type,unit:this.unit,timeseries:!0,data:{datasets:[{label:this.label,data:this.data}]}});this.granularity=a,this.setLabel(),this.initUnit(),this.bucketsHelper=new f.default(t,this.definition,this.valueKey,!0),this.buckets=this.bucketsHelper.getBuckets()}}var Y=m;0&&(module.exports={HeatmapChart});
1
+ var M=Object.create;var l=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var w=(e,s)=>{for(var t in s)l(e,t,{get:s[t],enumerable:!0})},D=(e,s,t,a)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of x(s))!T.call(e,i)&&i!==t&&l(e,i,{get:()=>s[i],enumerable:!(a=g(s,i))||a.enumerable});return e};var m=(e,s,t)=>(t=e!=null?M(V(e)):{},D(s||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e)),C=e=>D(l({},"__esModule",{value:!0}),e);var F={};w(F,{HeatmapChart:()=>p,default:()=>E});module.exports=C(F);var n=m(require("dayjs")),d=require("../../../_dashboards/dashboard-visualisation/types"),y=m(require("../../../../utils/datasetHelper")),b=m(require("../../../_dashboards/dashboard-visualisation/DashboardVisualisation")),f=m(require("../Buckets"));class p extends b.default{constructor(t,a,i){super(t,i);this.data=[];this.dayDateFormat="DD/MM/YYYY";this.valueKey="";this.label="";this.buckets=[];this.initUnit=()=>{this.unit=this.columns.measures[0].unit?this.columns.measures[0].unit:void 0};this.setLabel=()=>{const{id:t,display:a}=this.columns.measures[1];this.valueKey=t,this.label=a||""};this.validateDefinition=()=>{const{id:t,columns:a,type:i}=this.definition,o=[];if(a.measures.length!==2?o.push(`Measures should only have 2 columns defined. Only found ${a.measures.length}`):i===d.DashboardVisualisationType.MATRIX_TIMESERIES&&a.measures[0].id!=="ts"&&o.push(`measure at index 0 has incorrect ID. Expected ID to be "ts". Found "${a.measures[0].id}"`),o.length){const r=`Validation: Visualisaton definition: ID: ${t}, type: ${i}, errors: ${o.join(",")}`;throw new Error(r)}};this.initTimeseriesData=()=>{const t=y.default.groupRowsByTimestamp(this.responseData);this.data=t.map(a=>{const{raw:i,rag:o}=a[0][this.valueKey],r=a[0].ts.raw,k=Number(i),v=o!==void 0?Number(a[0][this.valueKey].rag):void 0;let u=0,h=0;switch(this.granularity){case"hourly":break;case"weekly":u=(0,n.default)(r,this.dayDateFormat).format("ddd"),h=(0,n.default)(r,this.dayDateFormat).week();break;case"daily":u=(0,n.default)(r,this.dayDateFormat).format("MMM YY"),h=(0,n.default)(r,this.dayDateFormat).format("D");break;case"monthly":{const c=r.split(" ");u=c[1],h=c[0]}break;case"annually":u="year",h=r;break;default:u=(0,n.default)(r,this.dayDateFormat).format("MMM YY"),h=(0,n.default)(r,this.dayDateFormat).format("D");break}return{y:h,x:u,v:k,r:v}})};this.bucketData=()=>{this.data=this.data.map(t=>{const{v:a,r:i}=t,o=this.bucketsHelper.getBucketForValue(a,i);return{...t,c:o.colour}})};this.build=()=>(this.validateDefinition(),this.initTimeseriesData(),this.bucketData(),{type:this.type,unit:this.unit,timeseries:!0,data:{datasets:[{label:this.label,data:this.data}]}});this.granularity=a,this.isTimeseriesChart=this.type===d.DashboardVisualisationType.LINE_TIMESERIES,this.setLabel(),this.initUnit(),this.bucketsHelper=new f.default(t,this.definition,this.valueKey,!0),this.buckets=this.bucketsHelper.getBuckets()}}var E=p;0&&(module.exports={HeatmapChart});
2
2
  //# sourceMappingURL=HeatmapChart.js.map