@ministryofjustice/hmpps-digital-prison-reporting-frontend 4.14.2 → 4.15.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 (68) hide show
  1. package/dpr/all.mjs +2 -0
  2. package/dpr/all.scss +4 -0
  3. package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
  4. package/dpr/components/_charts/chart/clientClass.mjs +4 -3
  5. package/dpr/components/_charts/chart/heatmap/Heatmap.js +2 -0
  6. package/dpr/components/_charts/chart/heatmap/Heatmap.js.map +7 -0
  7. package/dpr/components/_charts/chart/heatmap/Heatmap.ts +278 -0
  8. package/dpr/components/_charts/chart/heatmap/clientClass.mjs +175 -0
  9. package/dpr/components/_charts/chart/styles.scss +4 -0
  10. package/dpr/components/_charts/utils.js +1 -1
  11. package/dpr/components/_charts/utils.js.map +3 -3
  12. package/dpr/components/_charts/utils.test.ts +4 -1
  13. package/dpr/components/_charts/utils.ts +73 -27
  14. package/dpr/components/_dashboards/dashboard/types.js +1 -1
  15. package/dpr/components/_dashboards/dashboard/types.js.map +2 -2
  16. package/dpr/components/_dashboards/dashboard/types.ts +21 -1
  17. package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
  18. package/dpr/components/_dashboards/dashboard-list/utils.js.map +3 -3
  19. package/dpr/components/_dashboards/dashboard-list/utils.test.ts +1 -0
  20. package/dpr/components/_dashboards/dashboard-list/utils.ts +5 -1
  21. package/dpr/components/_filters/types.d.js.map +1 -1
  22. package/dpr/components/_filters/types.d.ts +12 -8
  23. package/dpr/components/_filters/utils.js +1 -1
  24. package/dpr/components/_filters/utils.js.map +3 -3
  25. package/dpr/components/_filters/utils.ts +24 -2
  26. package/dpr/components/user-reports/utils.js +1 -1
  27. package/dpr/components/user-reports/utils.js.map +3 -3
  28. package/dpr/components/user-reports/utils.ts +13 -3
  29. package/dpr/data/dashboardClient.js +1 -1
  30. package/dpr/data/dashboardClient.js.map +2 -2
  31. package/dpr/data/dashboardClient.ts +1 -1
  32. package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
  33. package/dpr/routes/journeys/request-report/filters/controller.js.map +3 -3
  34. package/dpr/routes/journeys/request-report/filters/controller.ts +6 -2
  35. package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
  36. package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
  37. package/dpr/routes/journeys/request-report/filters/utils.ts +9 -3
  38. package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
  39. package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
  40. package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -3
  41. package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
  42. package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
  43. package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +44 -8
  44. package/dpr/routes/journeys/view-report/utils.js +1 -1
  45. package/dpr/routes/journeys/view-report/utils.js.map +3 -3
  46. package/dpr/routes/journeys/view-report/utils.ts +6 -1
  47. package/dpr/services/dashboardService.js +1 -1
  48. package/dpr/services/dashboardService.js.map +2 -2
  49. package/dpr/services/dashboardService.ts +1 -1
  50. package/dpr/types/Charts.js +1 -1
  51. package/dpr/types/Charts.js.map +1 -1
  52. package/dpr/types/Charts.ts +10 -3
  53. package/dpr/types/ExecutionData.d.js +1 -1
  54. package/dpr/types/ExecutionData.d.js.map +1 -1
  55. package/dpr/types/ExecutionData.d.ts +1 -0
  56. package/dpr/utils/DataTableBuilder/DataTableBuilder.js +1 -1
  57. package/dpr/utils/DataTableBuilder/DataTableBuilder.js.map +2 -2
  58. package/dpr/utils/DataTableBuilder/DataTableBuilder.ts +37 -19
  59. package/dpr/utils/DateMapper/DateMapper.js +1 -1
  60. package/dpr/utils/DateMapper/DateMapper.js.map +2 -2
  61. package/dpr/utils/DateMapper/DateMapper.ts +4 -0
  62. package/dpr/utils/UserStoreItemBuilder.js +1 -1
  63. package/dpr/utils/UserStoreItemBuilder.js.map +3 -3
  64. package/dpr/utils/UserStoreItemBuilder.ts +6 -4
  65. package/dpr/utils/requestStatusHelper.js +1 -1
  66. package/dpr/utils/requestStatusHelper.js.map +2 -2
  67. package/dpr/utils/requestStatusHelper.ts +1 -1
  68. package/package.json +5 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/_filters/utils.ts"],
4
- "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response } from 'express'\nimport { FilterType } from './filter-input/enum'\nimport type { components } from '../../types/api'\nimport type { FilterOption } from './filter-input/types'\nimport type {\n DateFilterValue,\n FilterValueType,\n DateRangeFilterValue,\n FilterValue,\n MultiselectFilterValue,\n GranularDateRangeFilterValue,\n} from './types'\nimport ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'\n\nimport SelectedFiltersUtils from './filters-selected/utils'\nimport DateRangeInputUtils from '../_inputs/date-range/utils'\nimport DateInputUtils from '../_inputs/date-input/utils'\nimport GranularDateRangeInputUtils from '../_inputs/granular-date-range/utils'\nimport MultiSelectUtils from '../_inputs/multi-select/utils'\nimport { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport PersonalistionUtils from '../../utils/Personalisation/personalisationUtils'\nimport createUrlForParameters from '../../utils/urlHelper'\nimport { Services } from '../../types/Services'\nimport { FiltersType } from './filtersTypeEnum'\nimport LocalsHelper from '../../utils/localsHelper'\nimport { defaultFilterValue } from '../../utils/Personalisation/types'\n\n/**\n * Given a FilterValue[], will update the values to match the req.query values if present\n *\n * @param {FilterValue[]} filters\n * @param {Request} req\n * @param {string} [prefix='filters.']\n * @return {*} {FilterValue[]}\n */\nexport const setFilterValuesFromRequest = (\n filters: FilterValue[],\n req: Request,\n prefix = 'filters.',\n): FilterValue[] => {\n const { preventDefault } = req.query\n\n if (Object.keys(req.query).every((key) => !key.includes(prefix)) && !preventDefault) {\n return filters\n }\n\n return filters.map((filter: FilterValue) => {\n let requestfilterValue: FilterValueType\n let requestfilterValues: string[] | undefined\n\n const type = filter.type.toLowerCase()\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n requestfilterValue = DateRangeInputUtils.setValueFromRequest(<DateRangeFilterValue>filter, req, prefix)\n break\n case FilterType.granularDateRange.toLowerCase():\n requestfilterValue = GranularDateRangeInputUtils.setValueFromRequest(\n <GranularDateRangeFilterValue>filter,\n req,\n prefix,\n )\n break\n case FilterType.date.toLowerCase():\n requestfilterValue = DateInputUtils.setValueFromRequest(<DateFilterValue>filter, req, prefix)\n break\n case FilterType.multiselect.toLowerCase():\n ;({ requestfilterValue, requestfilterValues } = MultiSelectUtils.setValueFromRequest(\n <MultiselectFilterValue>filter,\n req,\n prefix,\n ))\n break\n default:\n requestfilterValue = <string>req.query[`${prefix}${filter.name}`]\n break\n }\n\n let value: FilterValueType = null\n if (requestfilterValue) {\n value = requestfilterValue\n } else if (preventDefault) {\n value = ''\n }\n\n return {\n ...filter,\n value,\n ...(requestfilterValues && { values: requestfilterValues }),\n }\n })\n}\n\nexport const setFilterQueryFromFilterDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n) => {\n let filterFields: components['schemas']['FieldDefinition'][] = fields.filter((f) => f.filter)\n if (interactive) {\n filterFields = filterFields.filter(\n (f) => (<components['schemas']['FilterDefinition'] & { interactive?: boolean }>f.filter).interactive,\n )\n }\n\n return filterFields\n .filter((field) => field.filter !== undefined)\n .filter((field) => (<components['schemas']['FilterDefinition']>field.filter).defaultValue !== undefined)\n .map((field) => {\n const filter = <components['schemas']['FilterDefinition']>field.filter\n const type = filter.type.toLocaleLowerCase()\n\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n return DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.multiselect.toLowerCase():\n return MultiSelectUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.granularDateRange.toLowerCase(): {\n const startEndParams = DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n return GranularDateRangeInputUtils.getQueryFromDefinition(\n filter as unknown as components['schemas']['FilterDefinition'] & {\n defaultGranularity: Granularity\n defaultQuickFilterValue: QuickFilters\n },\n field.name,\n DEFAULT_FILTERS_PREFIX,\n startEndParams,\n )\n }\n\n default:\n return `${DEFAULT_FILTERS_PREFIX}${field.name}=${filter.defaultValue}`\n }\n })\n .join('&')\n}\n\nexport const getFiltersFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n return fields\n .filter((f) => f.filter)\n .filter((f) => {\n if (interactive !== undefined) {\n const interactiveFilterValue = (<\n components['schemas']['FieldDefinition'] & {\n interactive?: boolean\n }\n >f.filter).interactive\n\n // NOTE: Uncomment if filters are meant to be both interactive and non interactive.\n if (interactiveFilterValue === undefined) {\n return !interactive\n }\n\n return interactive === interactiveFilterValue\n }\n return true\n })\n .map((f) => {\n const { display: text, name } = f\n const filter = <components['schemas']['FilterDefinition']>f.filter\n const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern } = filter\n\n const options: FilterOption[] = staticOptions\n ? staticOptions.map((opt) => {\n return { value: opt.name, text: opt.display }\n })\n : []\n\n let filterData: FilterValue = {\n text,\n name,\n type: type as FilterType,\n value: defaultValue || null,\n minimumLength: dynamicOptions?.minimumLength,\n mandatory: mandatory || false,\n pattern,\n }\n\n const noFilterOption = {\n value: 'no-filter',\n text: 'None',\n disabled: false,\n }\n\n switch (type) {\n case FilterType.autocomplete.toLowerCase():\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.radio:\n if (!mandatory) options.unshift(noFilterOption)\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.select: {\n if (!mandatory) options.unshift(noFilterOption)\n options.unshift({\n value: '',\n text: 'Select your option',\n disabled: true,\n selected: true,\n })\n\n filterData = {\n ...filterData,\n options,\n }\n break\n }\n\n case FilterType.multiselect.toLowerCase():\n filterData = {\n ...filterData,\n options,\n values: defaultValue ? defaultValue.split(',') : [],\n }\n break\n\n case FilterType.dateRange.toLowerCase():\n filterData = DateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.date.toLowerCase():\n filterData = DateInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.granularDateRange.toLocaleLowerCase(): {\n const granularDateRangeFilter = filter as components['schemas']['FilterDefinition']\n filterData = GranularDateRangeInputUtils.getFilterFromDefinition(granularDateRangeFilter, filterData)\n break\n }\n\n default:\n break\n }\n\n return filterData\n })\n}\n\nexport const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) => {\n const requestQuery = filterValues\n .filter((fv) => fv.value)\n .reduce((acc, curr) => {\n const { value, name } = curr\n const filterPrefix = `filters.${name}`\n switch (curr.type) {\n case FilterType.granularDateRange.toLowerCase():\n case FilterType.dateRange.toLowerCase():\n Object.keys(value).forEach((key) => {\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: value[key as keyof FilterValueType],\n }\n })\n break\n case FilterType.multiselect.toLowerCase():\n acc = {\n ...acc,\n [`${filterPrefix}`]: (<string>value).split(','),\n }\n break\n default:\n acc = {\n ...acc,\n [`${filterPrefix}`]: value,\n }\n break\n }\n return acc\n }, {})\n\n return requestQuery\n}\n\nexport const redirectWithDefaultFilters = (\n reportQuery: ReportQuery,\n variantDefinition: components['schemas']['VariantDefinition'],\n response: Response,\n request: Request,\n) => {\n const defaultFilters: Record<string, string> = {}\n const { specification } = variantDefinition\n const fields = specification ? specification.fields : []\n const { preventDefault } = request.query\n const hasNoQueryFilters = Object.keys(reportQuery.filters).length === 0 && !preventDefault\n if (hasNoQueryFilters) {\n fields\n .filter((f) => f.filter && f.filter.defaultValue)\n .forEach((f) => {\n const { filter } = f\n if (filter) {\n if (filter.type.toLowerCase() === FilterType.dateRange.toLowerCase()) {\n const { defaultValue } = <components['schemas']['FilterDefinition']>filter\n const dates = defaultValue ? defaultValue.split(' - ') : ''\n\n if (dates.length >= 1) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.start`] = dates[0]\n\n if (dates.length >= 2) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.end`] = dates[1]\n }\n }\n } else {\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}`] = filter.defaultValue || ''\n }\n }\n })\n }\n\n if (Object.keys(defaultFilters).length > 0) {\n const querystring = createUrlForParameters(reportQuery.toRecordWithFilterPrefix(), defaultFilters, fields)\n response.redirect(`${request.baseUrl}${request.path}${querystring}`)\n return true\n }\n\n return false\n}\n\nexport const getPersonalisedFilters = async (\n filters: FilterValue[],\n req: Request,\n res: Response,\n services: Services,\n filtersType: FiltersType,\n) => {\n const { reportId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n const defaultFilterValues: defaultFilterValue[] = await services.defaultFilterValuesService.get(\n dprUser.id,\n reportId,\n id,\n filtersType,\n )\n let defaultFilters = filters\n if (defaultFilterValues) {\n const personalisedFilters = PersonalistionUtils.setFilterValuesFromSavedDefaults(filters, [], defaultFilterValues)\n defaultFilters = personalisedFilters.filters\n }\n\n return { filters: defaultFilters, defaultFilterValues }\n}\n\nexport const getFilters = async ({\n fields,\n req,\n res,\n prefix = 'filters.',\n services,\n filtersType,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n req: Request\n res?: Response\n prefix?: string\n services?: Services\n filtersType: FiltersType\n}) => {\n // 1. Set the filters from the product definition\n let filters = await getFiltersFromDefinition(fields, filtersType === FiltersType.INTERACTIVE)\n\n let hasDefaults\n let canSaveDefaults = false\n if (services) {\n // 2. If there are personalised filters, overwrite fiters with the personalised filter values.\n const { filters: personalisedFilterValues, defaultFilterValues } = await getPersonalisedFilters(\n filters,\n req,\n res,\n services,\n filtersType,\n )\n filters = personalisedFilterValues\n hasDefaults = defaultFilterValues?.length > 0\n canSaveDefaults = true\n }\n\n // If there is a request query, overwrite the filters with the query params\n if (req.query) {\n filters = setFilterValuesFromRequest(filters, req)\n }\n\n // Set the selected filters\n const selectedFilters = SelectedFiltersUtils.getSelectedFilters(filters, prefix)\n\n return {\n filters,\n selectedFilters,\n hasDefaults,\n canSaveDefaults,\n }\n}\n\nexport default {\n getFiltersFromDefinition,\n setFilterValuesFromRequest,\n getFilters,\n setFilterQueryFromFilterDefinition,\n redirectWithDefaultFilters,\n setRequestQueryFromFilterValues,\n getPersonalisedFilters,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "getFilters", "getFiltersFromDefinition", "getPersonalisedFilters", "redirectWithDefaultFilters", "setFilterQueryFromFilterDefinition", "setFilterValuesFromRequest", "setRequestQueryFromFilterValues", "__toCommonJS", "import_enum", "import_ReportQuery", "import_utils", "import_personalisationUtils", "import_urlHelper", "import_filtersTypeEnum", "import_localsHelper", "filters", "req", "prefix", "preventDefault", "key", "filter", "requestfilterValue", "requestfilterValues", "DateRangeInputUtils", "GranularDateRangeInputUtils", "DateInputUtils", "MultiSelectUtils", "value", "fields", "interactive", "filterFields", "f", "field", "startEndParams", "interactiveFilterValue", "text", "name", "type", "staticOptions", "dynamicOptions", "defaultValue", "mandatory", "pattern", "options", "opt", "filterData", "noFilterOption", "granularDateRangeFilter", "filterValues", "fv", "acc", "curr", "filterPrefix", "reportQuery", "variantDefinition", "response", "request", "defaultFilters", "specification", "dates", "querystring", "createUrlForParameters", "res", "services", "filtersType", "reportId", "id", "dprUser", "LocalsHelper", "defaultFilterValues", "PersonalistionUtils", "hasDefaults", "canSaveDefaults", "personalisedFilterValues", "selectedFilters", "SelectedFiltersUtils"]
4
+ "sourcesContent": ["/* eslint-disable no-param-reassign */\nimport { Request, Response } from 'express'\nimport { GranularDateRangeQuickFilterValue } from './types'\nimport { FilterType } from './filter-input/enum'\nimport type { components } from '../../types/api'\nimport type { FilterOption } from './filter-input/types'\nimport type {\n DateFilterValue,\n FilterValueType,\n DateRangeFilterValue,\n FilterValue,\n MultiselectFilterValue,\n GranularDateRangeFilterValue,\n GranularDateRange,\n GranularDateRangeGranularityValue,\n} from './types'\nimport ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'\n\nimport SelectedFiltersUtils from './filters-selected/utils'\nimport DateRangeInputUtils from '../_inputs/date-range/utils'\nimport DateInputUtils from '../_inputs/date-input/utils'\nimport GranularDateRangeInputUtils from '../_inputs/granular-date-range/utils'\nimport MultiSelectUtils from '../_inputs/multi-select/utils'\nimport { Granularity, QuickFilters } from '../_inputs/granular-date-range/types'\nimport PersonalistionUtils from '../../utils/Personalisation/personalisationUtils'\nimport createUrlForParameters from '../../utils/urlHelper'\nimport { Services } from '../../types/Services'\nimport { FiltersType } from './filtersTypeEnum'\nimport LocalsHelper from '../../utils/localsHelper'\nimport { defaultFilterValue } from '../../utils/Personalisation/types'\n\n/**\n * Given a FilterValue[], will update the values to match the req.query values if present\n *\n * @param {FilterValue[]} filters\n * @param {Request} req\n * @param {string} [prefix='filters.']\n * @return {*} {FilterValue[]}\n */\nexport const setFilterValuesFromRequest = (\n filters: FilterValue[],\n req: Request,\n prefix = 'filters.',\n): FilterValue[] => {\n const { preventDefault } = req.query\n\n if (Object.keys(req.query).every((key) => !key.includes(prefix)) && !preventDefault) {\n return filters\n }\n\n return filters.map((filter: FilterValue) => {\n let requestfilterValue: FilterValueType\n let requestfilterValues: string[] | undefined\n\n const type = filter.type.toLowerCase()\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n requestfilterValue = DateRangeInputUtils.setValueFromRequest(<DateRangeFilterValue>filter, req, prefix)\n break\n case FilterType.granularDateRange.toLowerCase():\n requestfilterValue = GranularDateRangeInputUtils.setValueFromRequest(\n <GranularDateRangeFilterValue>filter,\n req,\n prefix,\n )\n break\n case FilterType.date.toLowerCase():\n requestfilterValue = DateInputUtils.setValueFromRequest(<DateFilterValue>filter, req, prefix)\n break\n case FilterType.multiselect.toLowerCase():\n ;({ requestfilterValue, requestfilterValues } = MultiSelectUtils.setValueFromRequest(\n <MultiselectFilterValue>filter,\n req,\n prefix,\n ))\n break\n default:\n requestfilterValue = <string>req.query[`${prefix}${filter.name}`]\n break\n }\n\n let value: FilterValueType = null\n if (requestfilterValue) {\n value = requestfilterValue\n } else if (preventDefault) {\n value = ''\n }\n\n return {\n ...filter,\n value,\n ...(requestfilterValues && { values: requestfilterValues }),\n }\n })\n}\n\nexport const setFilterQueryFromFilterDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n) => {\n let filterFields: components['schemas']['FieldDefinition'][] = fields.filter((f) => f.filter)\n if (interactive) {\n filterFields = filterFields.filter(\n (f) => (<components['schemas']['FilterDefinition'] & { interactive?: boolean }>f.filter).interactive,\n )\n }\n\n return filterFields\n .filter((field) => field.filter !== undefined)\n .filter((field) => (<components['schemas']['FilterDefinition']>field.filter).defaultValue !== undefined)\n .map((field) => {\n const filter = <components['schemas']['FilterDefinition']>field.filter\n const type = filter.type.toLocaleLowerCase()\n\n switch (type) {\n case FilterType.dateRange.toLowerCase():\n return DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.multiselect.toLowerCase():\n return MultiSelectUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n\n case FilterType.granularDateRange.toLowerCase(): {\n const startEndParams = DateRangeInputUtils.getQueryFromDefinition(filter, field.name, DEFAULT_FILTERS_PREFIX)\n return GranularDateRangeInputUtils.getQueryFromDefinition(\n filter as unknown as components['schemas']['FilterDefinition'] & {\n defaultGranularity: Granularity\n defaultQuickFilterValue: QuickFilters\n },\n field.name,\n DEFAULT_FILTERS_PREFIX,\n startEndParams,\n )\n }\n\n default:\n return `${DEFAULT_FILTERS_PREFIX}${field.name}=${filter.defaultValue}`\n }\n })\n .join('&')\n}\n\nexport const getFiltersFromDefinition = (\n fields: components['schemas']['FieldDefinition'][],\n interactive?: boolean,\n): FilterValue[] => {\n return fields\n .filter((f) => f.filter)\n .filter((f) => {\n if (interactive !== undefined) {\n const interactiveFilterValue = (<\n components['schemas']['FieldDefinition'] & {\n interactive?: boolean\n }\n >f.filter).interactive\n\n // NOTE: Uncomment if filters are meant to be both interactive and non interactive.\n if (interactiveFilterValue === undefined) {\n return !interactive\n }\n\n return interactive === interactiveFilterValue\n }\n return true\n })\n .map((f) => {\n const { display: text, name } = f\n const filter = <components['schemas']['FilterDefinition']>f.filter\n const { type, staticOptions, dynamicOptions, defaultValue, mandatory, pattern } = filter\n\n const options: FilterOption[] = staticOptions\n ? staticOptions.map((opt) => {\n return { value: opt.name, text: opt.display }\n })\n : []\n\n let filterData: FilterValue = {\n text,\n name,\n type: type as FilterType,\n value: defaultValue || null,\n minimumLength: dynamicOptions?.minimumLength,\n mandatory: mandatory || false,\n pattern,\n }\n\n const noFilterOption = {\n value: 'no-filter',\n text: 'None',\n disabled: false,\n }\n\n switch (type) {\n case FilterType.autocomplete.toLowerCase():\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.radio:\n if (!mandatory) options.unshift(noFilterOption)\n filterData = {\n ...filterData,\n options,\n }\n break\n\n case FilterType.select: {\n if (!mandatory) options.unshift(noFilterOption)\n options.unshift({\n value: '',\n text: 'Select your option',\n disabled: true,\n selected: true,\n })\n\n filterData = {\n ...filterData,\n options,\n }\n break\n }\n\n case FilterType.multiselect.toLowerCase():\n filterData = {\n ...filterData,\n options,\n values: defaultValue ? defaultValue.split(',') : [],\n }\n break\n\n case FilterType.dateRange.toLowerCase():\n filterData = DateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.date.toLowerCase():\n filterData = DateInputUtils.getFilterFromDefinition(filter, filterData)\n break\n\n case FilterType.granularDateRange.toLocaleLowerCase(): {\n filterData = GranularDateRangeInputUtils.getFilterFromDefinition(filter, filterData)\n break\n }\n\n default:\n break\n }\n\n return filterData\n })\n}\n\nexport const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) => {\n const requestQuery = filterValues\n .filter((fv) => fv.value)\n .reduce((acc, curr) => {\n const { value, name } = curr\n const filterPrefix = `filters.${name}`\n switch (curr.type) {\n case FilterType.granularDateRange.toLowerCase():\n {\n const granularDateRangeValue = <GranularDateRange>value\n Object.keys(granularDateRangeValue).forEach((key) => {\n let v = granularDateRangeValue[key as keyof GranularDateRange]\n if (key.includes('partialDate')) {\n acc = {\n ...acc,\n }\n } else {\n if (key.includes('granularity') || key.includes('quickFilter')) {\n v = (<GranularDateRangeGranularityValue | GranularDateRangeQuickFilterValue>v).value\n }\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: v,\n }\n }\n })\n }\n break\n case FilterType.dateRange.toLowerCase():\n Object.keys(value).forEach((key) => {\n acc = {\n ...acc,\n [`${filterPrefix}.${key}`]: value[key as keyof FilterValueType],\n }\n })\n break\n case FilterType.multiselect.toLowerCase():\n acc = {\n ...acc,\n [`${filterPrefix}`]: (<string>value).split(','),\n }\n break\n default:\n acc = {\n ...acc,\n [`${filterPrefix}`]: value,\n }\n break\n }\n return acc\n }, {})\n\n return requestQuery\n}\n\nexport const redirectWithDefaultFilters = (\n reportQuery: ReportQuery,\n variantDefinition: components['schemas']['VariantDefinition'],\n response: Response,\n request: Request,\n) => {\n const defaultFilters: Record<string, string> = {}\n const { specification } = variantDefinition\n const fields = specification ? specification.fields : []\n const { preventDefault } = request.query\n const hasNoQueryFilters = Object.keys(reportQuery.filters).length === 0 && !preventDefault\n if (hasNoQueryFilters) {\n fields\n .filter((f) => f.filter && f.filter.defaultValue)\n .forEach((f) => {\n const { filter } = f\n if (filter) {\n if (filter.type.toLowerCase() === FilterType.dateRange.toLowerCase()) {\n const { defaultValue } = <components['schemas']['FilterDefinition']>filter\n const dates = defaultValue ? defaultValue.split(' - ') : ''\n\n if (dates.length >= 1) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.start`] = dates[0]\n\n if (dates.length >= 2) {\n // eslint-disable-next-line prefer-destructuring\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}.end`] = dates[1]\n }\n }\n } else {\n defaultFilters[`${DEFAULT_FILTERS_PREFIX}${f.name}`] = filter.defaultValue || ''\n }\n }\n })\n }\n\n if (Object.keys(defaultFilters).length > 0) {\n const querystring = createUrlForParameters(reportQuery.toRecordWithFilterPrefix(), defaultFilters, fields)\n response.redirect(`${request.baseUrl}${request.path}${querystring}`)\n return true\n }\n\n return false\n}\n\nexport const getPersonalisedFilters = async (\n filters: FilterValue[],\n req: Request,\n res: Response,\n services: Services,\n filtersType: FiltersType,\n) => {\n const { reportId, id } = req.params\n const { dprUser } = LocalsHelper.getValues(res)\n const defaultFilterValues: defaultFilterValue[] = await services.defaultFilterValuesService.get(\n dprUser.id,\n reportId,\n id,\n filtersType,\n )\n let defaultFilters = filters\n if (defaultFilterValues) {\n const personalisedFilters = PersonalistionUtils.setFilterValuesFromSavedDefaults(filters, [], defaultFilterValues)\n defaultFilters = personalisedFilters.filters\n }\n\n return { filters: defaultFilters, defaultFilterValues }\n}\n\nexport const getFilters = async ({\n fields,\n req,\n res,\n prefix = 'filters.',\n services,\n filtersType,\n}: {\n fields: components['schemas']['FieldDefinition'][]\n req: Request\n res?: Response\n prefix?: string\n services?: Services\n filtersType: FiltersType\n}) => {\n // 1. Set the filters from the product definition\n let filters = await getFiltersFromDefinition(fields, filtersType === FiltersType.INTERACTIVE)\n\n let hasDefaults\n let canSaveDefaults = false\n if (services) {\n // 2. If there are personalised filters, overwrite fiters with the personalised filter values.\n const { filters: personalisedFilterValues, defaultFilterValues } = await getPersonalisedFilters(\n filters,\n req,\n res,\n services,\n filtersType,\n )\n filters = personalisedFilterValues\n hasDefaults = defaultFilterValues?.length > 0\n canSaveDefaults = true\n }\n\n // If there is a request query, overwrite the filters with the query params\n if (req.query) {\n filters = setFilterValuesFromRequest(filters, req)\n }\n\n // Set the selected filters\n const selectedFilters = SelectedFiltersUtils.getSelectedFilters(filters, prefix)\n\n return {\n filters,\n selectedFilters,\n hasDefaults,\n canSaveDefaults,\n }\n}\n\nexport default {\n getFiltersFromDefinition,\n setFilterValuesFromRequest,\n getFilters,\n setFilterQueryFromFilterDefinition,\n redirectWithDefaultFilters,\n setRequestQueryFromFilterValues,\n getPersonalisedFilters,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "getFilters", "getFiltersFromDefinition", "getPersonalisedFilters", "redirectWithDefaultFilters", "setFilterQueryFromFilterDefinition", "setFilterValuesFromRequest", "setRequestQueryFromFilterValues", "__toCommonJS", "import_enum", "import_ReportQuery", "import_utils", "import_personalisationUtils", "import_urlHelper", "import_filtersTypeEnum", "import_localsHelper", "filters", "req", "prefix", "preventDefault", "key", "filter", "requestfilterValue", "requestfilterValues", "DateRangeInputUtils", "GranularDateRangeInputUtils", "DateInputUtils", "MultiSelectUtils", "value", "fields", "interactive", "filterFields", "f", "field", "startEndParams", "interactiveFilterValue", "text", "name", "type", "staticOptions", "dynamicOptions", "defaultValue", "mandatory", "pattern", "options", "opt", "filterData", "noFilterOption", "filterValues", "fv", "acc", "curr", "filterPrefix", "granularDateRangeValue", "v", "reportQuery", "variantDefinition", "response", "request", "defaultFilters", "specification", "dates", "querystring", "createUrlForParameters", "res", "services", "filtersType", "reportId", "id", "dprUser", "LocalsHelper", "defaultFilterValues", "PersonalistionUtils", "hasDefaults", "canSaveDefaults", "personalisedFilterValues", "selectedFilters", "SelectedFiltersUtils"]
7
7
  }
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  import { Request, Response } from 'express'
3
+ import { GranularDateRangeQuickFilterValue } from './types'
3
4
  import { FilterType } from './filter-input/enum'
4
5
  import type { components } from '../../types/api'
5
6
  import type { FilterOption } from './filter-input/types'
@@ -10,6 +11,8 @@ import type {
10
11
  FilterValue,
11
12
  MultiselectFilterValue,
12
13
  GranularDateRangeFilterValue,
14
+ GranularDateRange,
15
+ GranularDateRangeGranularityValue,
13
16
  } from './types'
14
17
  import ReportQuery, { DEFAULT_FILTERS_PREFIX } from '../../types/ReportQuery'
15
18
 
@@ -235,8 +238,7 @@ export const getFiltersFromDefinition = (
235
238
  break
236
239
 
237
240
  case FilterType.granularDateRange.toLocaleLowerCase(): {
238
- const granularDateRangeFilter = filter as components['schemas']['FilterDefinition']
239
- filterData = GranularDateRangeInputUtils.getFilterFromDefinition(granularDateRangeFilter, filterData)
241
+ filterData = GranularDateRangeInputUtils.getFilterFromDefinition(filter, filterData)
240
242
  break
241
243
  }
242
244
 
@@ -256,6 +258,26 @@ export const setRequestQueryFromFilterValues = (filterValues: FilterValue[]) =>
256
258
  const filterPrefix = `filters.${name}`
257
259
  switch (curr.type) {
258
260
  case FilterType.granularDateRange.toLowerCase():
261
+ {
262
+ const granularDateRangeValue = <GranularDateRange>value
263
+ Object.keys(granularDateRangeValue).forEach((key) => {
264
+ let v = granularDateRangeValue[key as keyof GranularDateRange]
265
+ if (key.includes('partialDate')) {
266
+ acc = {
267
+ ...acc,
268
+ }
269
+ } else {
270
+ if (key.includes('granularity') || key.includes('quickFilter')) {
271
+ v = (<GranularDateRangeGranularityValue | GranularDateRangeQuickFilterValue>v).value
272
+ }
273
+ acc = {
274
+ ...acc,
275
+ [`${filterPrefix}.${key}`]: v,
276
+ }
277
+ }
278
+ })
279
+ }
280
+ break
259
281
  case FilterType.dateRange.toLowerCase():
260
282
  Object.keys(value).forEach((key) => {
261
283
  acc = {
@@ -1,2 +1,2 @@
1
- var Y=Object.create;var S=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var j=(a,s)=>{for(var t in s)S(a,t,{get:s[t],enumerable:!0})},h=(a,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of Q(s))!C.call(a,r)&&r!==t&&S(a,r,{get:()=>s[r],enumerable:!(e=H(s,r))||e.enumerable});return a};var d=(a,s,t)=>(t=a!=null?Y(O(a)):{},h(s||!a||!a.__esModule?S(t,"default",{value:a,enumerable:!0}):t,a)),G=a=>h(S({},"__esModule",{value:!0}),a);var te={};j(te,{default:()=>ee,init:()=>N,renderList:()=>U,setDataFromStatus:()=>_,updateExpiredStatus:()=>M,updateLastViewed:()=>B});module.exports=G(te);var E=d(require("dayjs")),i=require("../../types/UserReports"),$=require("../../utils/requestStatusHelper"),x=d(require("../_filters/filters-selected/utils")),F=d(require("../_filters/utils")),g=require("../../utils/reportListsHelper"),T=d(require("./requested/utils")),A=d(require("./viewed/utils")),V=d(require("./bookmarks/utils")),R=d(require("../../utils/localsHelper")),P=d(require("../../utils/DateMapper/DateMapper")),L=d(require("../../utils/UserStoreItemBuilder"));const J=a=>{const s=JSON.parse(JSON.stringify(a)),{executionId:t,tableId:e,variantName:r,name:n,reportId:o,variantId:l,id:m,description:u,query:p,interactiveQuery:c,status:y,timestamp:D,reportName:w,dataProductDefinitionsPath:b,type:I,url:q}=s;let f=[];p&&(f=p.summary);let v=[];c&&(v=c.summary);const k=I||i.ReportType.REPORT;return{id:t,text:n||r,reportName:w,description:u,tag:"MIS",summary:f,interactiveSummary:v,timestamp:D,status:y,type:k,..._(y,s),meta:{reportId:o,id:l||m,executionId:t,tableId:e,status:y,type:k,dataProductDefinitionsPath:b,pollingUrl:q.polling?.pathname,reportUrl:q.report?.pathname}}},K=(a,s)=>({rows:a.map(e=>X(e,s)),head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Filters",classes:"dpr-req-filters-head"},{text:"Status",classes:"dpr-req-status-head"},{text:"Actions",classes:"dpr-req-actions-head"}]}),X=(a,s)=>{let t,e="";const{href:r,id:n,reportName:o,text:l,timestamp:m,type:u,status:p}=a;switch(p){case i.RequestStatus.FAILED:t="govuk-tag--red",e=(0,g.itemActionsHtml)(r,n,s,p);break;case i.RequestStatus.EXPIRED:t="govuk-tag--grey",e=(0,g.itemActionsHtml)(r,n,s,p);break;case i.RequestStatus.ABORTED:t="govuk-tag--orange",e=(0,g.itemActionsHtml)(r,n,s,p);break;case i.RequestStatus.READY:case i.RequestStatus.FINISHED:e=`<a class=govuk-link govuk-link--no-visited-state dpr-type__${u}' href="${r}">Go to ${u}</a>`,t="govuk-tag--green";break;case i.RequestStatus.PICKED:case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:e=`<a class='govuk-link govuk-link--no-visited-state dpr-type__${u}' href="${r}">Go to status</a>`;break;default:break}let c="";return(a.summary||a.interactiveSummary)&&(c=W(a)),[{html:(0,g.createListItemProduct)(o,l,u,m)},{html:c},{html:`<strong class="govuk-tag dpr-request-status-tag ${t}">${p}</strong>`,classes:"dpr-req-cell dpr-req-cell__status"},{html:`${e}`,classes:"dpr-req-cell dpr-req-cell__status"}]},z=(a,s)=>({amount:a,shown:a>s?s:a,max:s}),W=a=>{const s=a.summary?.map(e=>`<li class="govuk-body-s dpr-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join(""),t=a.interactiveSummary?.map(e=>`<li class="govuk-body-s dpr-interactive-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join("");return`<ul class="dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0">${s}${t}</ul>`},Z=(a,s)=>{const{nestedBaseUrl:t}=R.default.getValues(s);return a.map(e=>({reportId:e.meta.reportId,id:e.meta.id,executionId:e.meta.executionId,tableId:e.meta.tableId,status:e.meta.status,requestedAt:e.meta.requestedAt,type:e.meta.type,dataProductDefinitionsPath:e.meta.dataProductDefinitionsPath,pollingUrl:e.meta.pollingUrl,reportUrl:e.meta.reportUrl,nestedBaseUrl:t}))},_=(a,s)=>{let t,e,r;const{url:n,timestamp:o}=s,l=new P.default;switch(a){case i.RequestStatus.FAILED:{r=o.failed?l.toDateString(o.failed,"local-date"):(0,E.default)().format("DD/MM/YYYY"),e=`${n.polling.fullUrl}`,t=`Failed at: ${r}`;break}case i.RequestStatus.ABORTED:{e=`${n.request.fullUrl}`,r=l.toDateString(o.aborted,"local-date"),t=`Aborted at: ${r}`;break}case i.RequestStatus.FINISHED:e=n.report.fullUrl,r=l.toDateString(o.completed,"local-date"),t=`Ready at: ${r}`;break;case i.RequestStatus.EXPIRED:{e=`${n.request.fullUrl}`,r=l.toDateString(o.expired,"local-date"),t=`Expired at: ${r}`;break}case i.RequestStatus.READY:{e=`${n.report.fullUrl}`,r=l.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${r}`;break}case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:case i.RequestStatus.PICKED:e=n.polling.fullUrl,r=l.toDateString(o.requested,"local-date"),t=`Requested at: ${r}`;break;default:r=l.toDateString(o.lastViewed,"local-date"),t=`Last viewed: ${r}`;break}return{timestamp:t,href:e}},U=async({res:a,reportsData:s,maxRows:t,filterFunction:e,type:r})=>{const{csrfToken:n}=R.default.getValues(a);let o=s.filter(e).map(J);const l=o.length;t&&(o=o.slice(0,t));const m=K(o,r),u=r==="requested"?"requested-reports":"recently-viewed";return{head:{...o.length&&{href:`dpr/my-reports/${u}/list`},...!o.length&&{emptyMessage:`You have 0 ${r} reports`}},tableData:m,total:z(l,t),meta:Z(o,a),csrfToken:n,maxRows:t}},M=async({req:a,res:s,services:t})=>{const{dprUser:e}=R.default.getValues(s),r=await(0,$.getExpiredStatus)({req:a,res:s,services:t});return r&&r.isExpired&&(await t.recentlyViewedService.setToExpired(r.executionId,e.id),await t.requestedReportService.setToExpired(r.executionId,e.id)),r?r.isExpired:!1},N=async({services:a,res:s,req:t,maxRows:e=6})=>{const{requestedReports:r,recentlyViewedReports:n,bookmarkingEnabled:o}=R.default.getValues(s),l=await U({res:s,reportsData:r,filterFunction:T.default.filterReports,maxRows:e,type:"requested"}),m=await U({res:s,reportsData:n,filterFunction:A.default.filterReports,maxRows:e,type:"viewed"});let u;return o&&(u=await V.default.renderBookmarkList({res:s,req:t,services:a,maxRows:e})),{requestedReports:l,viewedReports:m,bookmarks:u}},B=async({req:a,services:s,reportStateData:t,userId:e,filters:r})=>{const{type:n,reportId:o,reportName:l,description:m,id:u,name:p,executionId:c,tableId:y,query:D,url:w}=t,b={type:n,reportId:o,reportName:l,description:m,id:u,name:p},I={executionId:c,tableId:y},q=D?{query:D.data,querySummary:D.summary}:{query:{},querySummary:[]},f=F.default.setRequestQueryFromFilterValues(r),v={query:f,querySummary:x.default.getQuerySummary(f,r)},k=new L.default(b).addExecutionData(I).addQuery(q).addInteractiveQuery(v).addStatus(i.RequestStatus.READY).addTimestamp().addAsyncUrls(w).addReportUrls(a).build();await s.requestedReportService.updateLastViewed(t.executionId,e),await s.recentlyViewedService.setRecentlyViewed(k,e)};var ee={renderList:U,updateExpiredStatus:M,init:N,updateLastViewed:B};0&&(module.exports={init,renderList,setDataFromStatus,updateExpiredStatus,updateLastViewed});
1
+ var j=Object.create;var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var z=(t,s)=>{for(var r in s)k(t,r,{get:s[r],enumerable:!0})},x=(t,s,r,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let a of J(s))!X.call(t,a)&&a!==r&&k(t,a,{get:()=>s[a],enumerable:!(e=G(s,a))||e.enumerable});return t};var d=(t,s,r)=>(r=t!=null?j(K(t)):{},x(s||!t||!t.__esModule?k(r,"default",{value:t,enumerable:!0}):r,t)),W=t=>x(k({},"__esModule",{value:!0}),t);var ie={};z(ie,{default:()=>oe,init:()=>Y,renderList:()=>U,setDataFromStatus:()=>Q,updateExpiredStatus:()=>B,updateLastViewed:()=>H});module.exports=W(ie);var F=d(require("dayjs")),i=require("../../types/UserReports"),T=require("../../utils/requestStatusHelper"),A=d(require("../_filters/filters-selected/utils")),P=d(require("../_filters/utils")),g=require("../../utils/reportListsHelper"),V=d(require("./requested/utils")),L=d(require("./viewed/utils")),_=d(require("./bookmarks/utils")),v=d(require("../../utils/localsHelper")),M=d(require("../../utils/DateMapper/DateMapper")),N=d(require("../../utils/UserStoreItemBuilder"));const Z=t=>{const s=JSON.parse(JSON.stringify(t)),{executionId:r,tableId:e,variantName:a,name:n,reportId:o,variantId:l,id:p,description:u,query:m,interactiveQuery:c,status:y,timestamp:D,reportName:w,dataProductDefinitionsPath:b,type:I,url:S}=s;let f=[];m&&(f=m.summary);let R=[];c&&(R=c.summary);const q=I||i.ReportType.REPORT;return{id:r,text:n||a,reportName:w,description:u,tag:"MIS",summary:f,interactiveSummary:R,timestamp:D,status:y,type:q,...Q(y,s),meta:{reportId:o,id:l||p,executionId:r,tableId:e,status:y,type:q,dataProductDefinitionsPath:b,pollingUrl:S.polling?.pathname,reportUrl:S.report?.pathname}}},ee=(t,s)=>({rows:t.map(e=>te(e,s)),head:[{text:"Product",classes:"dpr-req-product-head"},{text:"Filters",classes:"dpr-req-filters-head"},{text:"Status",classes:"dpr-req-status-head"},{text:"Actions",classes:"dpr-req-actions-head"}]}),te=(t,s)=>{let r,e="";const{href:a,id:n,reportName:o,text:l,timestamp:p,type:u,status:m}=t;switch(m){case i.RequestStatus.FAILED:r="govuk-tag--red",e=(0,g.itemActionsHtml)(a,n,s,m);break;case i.RequestStatus.EXPIRED:r="govuk-tag--grey",e=(0,g.itemActionsHtml)(a,n,s,m);break;case i.RequestStatus.ABORTED:r="govuk-tag--orange",e=(0,g.itemActionsHtml)(a,n,s,m);break;case i.RequestStatus.READY:case i.RequestStatus.FINISHED:e=`<a class=govuk-link govuk-link--no-visited-state dpr-type__${u}' href="${a}">Go to ${u}</a>`,r="govuk-tag--green";break;case i.RequestStatus.PICKED:case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:e=`<a class='govuk-link govuk-link--no-visited-state dpr-type__${u}' href="${a}">Go to status</a>`;break;default:break}let c="";return(t.summary||t.interactiveSummary)&&(c=ae(t)),[{html:(0,g.createListItemProduct)(o,l,u,p)},{html:c},{html:`<strong class="govuk-tag dpr-request-status-tag ${r}">${m}</strong>`,classes:"dpr-req-cell dpr-req-cell__status"},{html:`${e}`,classes:"dpr-req-cell dpr-req-cell__status"}]},re=(t,s)=>({amount:t,shown:t>s?s:t,max:s}),ae=t=>{const s=t.summary?.map(e=>`<li class="govuk-body-s dpr-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join(""),r=t.interactiveSummary?.map(e=>`<li class="govuk-body-s dpr-interactive-query-summary"><strong>${e.name}</strong>: ${e.value}</li>`).join("");return`<ul class="dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0">${s}${r}</ul>`},se=(t,s)=>{const{nestedBaseUrl:r}=v.default.getValues(s);return t.map(e=>({reportId:e.meta.reportId,id:e.meta.id,executionId:e.meta.executionId,tableId:e.meta.tableId,status:e.meta.status,requestedAt:e.meta.requestedAt,type:e.meta.type,dataProductDefinitionsPath:e.meta.dataProductDefinitionsPath,pollingUrl:e.meta.pollingUrl,reportUrl:e.meta.reportUrl,nestedBaseUrl:r}))},Q=(t,s)=>{let r,e,a;const{url:n,timestamp:o}=s,l=new M.default;switch(t){case i.RequestStatus.FAILED:{a=o.failed?l.toDateString(o.failed,"local-date"):(0,F.default)().format("DD/MM/YYYY"),e=`${n.polling.fullUrl}`,r=`Failed at: ${a}`;break}case i.RequestStatus.ABORTED:{e=`${n.request.fullUrl}`,a=l.toDateString(o.aborted,"local-date"),r=`Aborted at: ${a}`;break}case i.RequestStatus.FINISHED:e=n.report.fullUrl,a=l.toDateString(o.completed,"local-date"),r=`Ready at: ${a}`;break;case i.RequestStatus.EXPIRED:{e=`${n.request.fullUrl}`,a=l.toDateString(o.expired,"local-date"),r=`Expired at: ${a}`;break}case i.RequestStatus.READY:{e=`${n.report.fullUrl}`,a=l.toDateString(o.lastViewed,"local-date"),r=`Last viewed: ${a}`;break}case i.RequestStatus.SUBMITTED:case i.RequestStatus.STARTED:case i.RequestStatus.PICKED:e=n.polling.fullUrl,a=l.toDateString(o.requested,"local-date"),r=`Requested at: ${a}`;break;default:a=l.toDateString(o.lastViewed,"local-date"),r=`Last viewed: ${a}`;break}return{timestamp:r,href:e}},U=async({res:t,reportsData:s,maxRows:r,filterFunction:e,type:a})=>{const{csrfToken:n}=v.default.getValues(t);let o=s.filter(e).map(Z);const l=o.length;r&&(o=o.slice(0,r));const p=ee(o,a),u=a==="requested"?"requested-reports":"recently-viewed";return{head:{...o.length&&{href:`dpr/my-reports/${u}/list`},...!o.length&&{emptyMessage:`You have 0 ${a} reports`}},tableData:p,total:re(l,r),meta:se(o,t),csrfToken:n,maxRows:r}},B=async({req:t,res:s,services:r})=>{const{dprUser:e}=v.default.getValues(s),a=await(0,T.getExpiredStatus)({req:t,res:s,services:r});return a&&a.isExpired&&(await r.recentlyViewedService.setToExpired(a.executionId,e.id),await r.requestedReportService.setToExpired(a.executionId,e.id)),a?a.isExpired:!1},Y=async({services:t,res:s,req:r,maxRows:e=6})=>{const{requestedReports:a,recentlyViewedReports:n,bookmarkingEnabled:o}=v.default.getValues(s),l=await U({res:s,reportsData:a,filterFunction:V.default.filterReports,maxRows:e,type:"requested"}),p=await U({res:s,reportsData:n,filterFunction:L.default.filterReports,maxRows:e,type:"viewed"});let u;return o&&(u=await _.default.renderBookmarkList({res:s,req:r,services:t,maxRows:e})),{requestedReports:l,viewedReports:p,bookmarks:u}},H=async({req:t,services:s,reportStateData:r,userId:e,filters:a})=>{const{type:n,reportId:o,reportName:l,description:p,id:u,name:m,executionId:c,tableId:y,query:D,url:w}=r,b={type:n,reportId:o,reportName:l,description:p,id:u,name:m},I={executionId:c,tableId:y},S=D?{query:D.data,querySummary:D.summary}:{query:{},querySummary:[]},f=t.query?.columns,{selectedPage:R,pageSize:q,sortColumn:h,sortedAsc:E}=t.query,$=P.default.setRequestQueryFromFilterValues(a),C={query:{...$,...f&&{columns:f},...R&&{selectedPage:R},...q&&{pageSize:q},...h&&{sortColumn:h},...E&&{sortedAsc:E}},querySummary:A.default.getQuerySummary($,a)},O=new N.default(b).addExecutionData(I).addQuery(S).addInteractiveQuery(C).addStatus(i.RequestStatus.READY).addTimestamp().addAsyncUrls(w).addReportUrls(t).build();await s.requestedReportService.updateLastViewed(r.executionId,e),await s.recentlyViewedService.setRecentlyViewed(O,e)};var oe={renderList:U,updateExpiredStatus:B,init:Y,updateLastViewed:H};0&&(module.exports={init,renderList,setDataFromStatus,updateExpiredStatus,updateLastViewed});
2
2
  //# sourceMappingURL=utils.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/dpr/components/user-reports/utils.ts"],
4
- "sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n timestamp,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName,\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n timestamp,\n status,\n type,\n ...setDataFromStatus(status, reportDataCopy),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url.polling?.pathname,\n reportUrl: url.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows: number) => {\n return {\n amount: formattedCount,\n shown: formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = `${url.polling.fullUrl}`\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = `${url.request.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = url.report.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = `${url.request.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = `${url.report.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = url.polling.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n maxRows,\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({\n services,\n res,\n req,\n maxRows = 6,\n}: {\n services: Services\n res: Response\n req: Request\n maxRows?: number\n}) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n req,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const reqQuery = FiltersUtils.setRequestQueryFromFilterValues(filters)\n const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(reqQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n await services.requestedReportService.updateLastViewed(reportStateData.executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
5
- "mappings": "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",
6
- "names": ["utils_exports", "__export", "utils_default", "init", "renderList", "setDataFromStatus", "updateExpiredStatus", "updateLastViewed", "__toCommonJS", "import_dayjs", "import_UserReports", "import_requestStatusHelper", "import_utils", "import_reportListsHelper", "import_localsHelper", "import_DateMapper", "import_UserStoreItemBuilder", "formatData", "reportData", "reportDataCopy", "executionId", "tableId", "variantName", "name", "reportId", "variantId", "id", "description", "query", "interactiveQuery", "status", "timestamp", "reportName", "dataProductDefinitionsPath", "reportType", "url", "summary", "interactiveSummary", "type", "formatTable", "data", "card", "formatTableRow", "statusClass", "itemActions", "href", "text", "filtersSummary", "createSummaryHtml", "getTotals", "formattedCount", "maxRows", "summaryHtml", "item", "interactiveSummaryHtml", "getMeta", "formattedData", "res", "nestedBaseUrl", "LocalsHelper", "d", "reportsData", "formattedDate", "time", "dateMapper", "DateMapper", "dayjs", "filterFunction", "csrfToken", "formatted", "tableData", "path", "req", "services", "dprUser", "report", "requestedReports", "recentlyViewedReports", "bookmarkingEnabled", "requestedReportsList", "RequestedReportUtils", "viewedReportsList", "RecentlyViewedCardGroupUtils", "bookmarks", "BookmarklistUtils", "reportStateData", "userId", "filters", "executionData", "queryData", "reqQuery", "FiltersUtils", "interactiveQueryData", "SelectedFiltersUtils", "recentlyViewedData", "UserStoreItemBuilder"]
4
+ "sourcesContent": ["import { Response, Request } from 'express'\nimport dayjs from 'dayjs'\nimport { RenderTableListResponse } from './types'\nimport Dict = NodeJS.Dict\nimport {\n FormattedUserReportData,\n UserReportData,\n RequestStatus,\n ReportType,\n RequestedReport,\n StoredReportData,\n} from '../../types/UserReports'\nimport { FilterValue } from '../_filters/types'\nimport { Services } from '../../types/Services'\n\nimport { AsyncReportUtilsParams } from '../../types/AsyncReportUtils'\nimport { getExpiredStatus } from '../../utils/requestStatusHelper'\nimport SelectedFiltersUtils from '../_filters/filters-selected/utils'\nimport FiltersUtils from '../_filters/utils'\nimport { itemActionsHtml, createListItemProduct } from '../../utils/reportListsHelper'\nimport RequestedReportUtils from './requested/utils'\nimport RecentlyViewedCardGroupUtils from './viewed/utils'\nimport BookmarklistUtils from './bookmarks/utils'\nimport LocalsHelper from '../../utils/localsHelper'\nimport DateMapper from '../../utils/DateMapper/DateMapper'\nimport UserStoreItemBuilder from '../../utils/UserStoreItemBuilder'\n\nconst formatData = (reportData: UserReportData): FormattedUserReportData => {\n const reportDataCopy: UserReportData = JSON.parse(JSON.stringify(reportData))\n\n const {\n executionId,\n tableId,\n variantName,\n name,\n reportId,\n variantId,\n id,\n description,\n query,\n interactiveQuery,\n status,\n timestamp,\n reportName,\n dataProductDefinitionsPath,\n type: reportType,\n url,\n } = reportDataCopy\n\n let summary: { name: string; value: string }[] = []\n if (query) {\n summary = query.summary as { name: string; value: string }[]\n }\n let interactiveSummary: { name: string; value: string }[] = []\n if (interactiveQuery) {\n interactiveSummary = interactiveQuery.summary as { name: string; value: string }[]\n }\n\n const type = reportType || ReportType.REPORT\n\n return {\n id: executionId,\n text: name || variantName,\n reportName,\n description,\n tag: 'MIS',\n summary,\n interactiveSummary,\n timestamp,\n status,\n type,\n ...setDataFromStatus(status, reportDataCopy),\n meta: {\n reportId,\n id: variantId || id,\n executionId,\n tableId,\n status,\n type,\n dataProductDefinitionsPath,\n pollingUrl: url.polling?.pathname,\n reportUrl: url.report?.pathname,\n },\n }\n}\n\nconst formatTable = (data: FormattedUserReportData[], type: 'requested' | 'viewed') => {\n const rows = data.map((card: FormattedUserReportData) => {\n return formatTableRow(card, type)\n })\n\n return {\n rows,\n head: [\n { text: 'Product', classes: 'dpr-req-product-head' },\n { text: 'Filters', classes: 'dpr-req-filters-head' },\n { text: 'Status', classes: 'dpr-req-status-head' },\n { text: 'Actions', classes: 'dpr-req-actions-head' },\n ],\n }\n}\n\nconst formatTableRow = (data: FormattedUserReportData, type: 'requested' | 'viewed') => {\n let statusClass\n let itemActions = ''\n\n const { href, id, reportName, text, timestamp, type: reportType, status } = data\n switch (status) {\n case RequestStatus.FAILED:\n statusClass = 'govuk-tag--red'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.EXPIRED:\n statusClass = 'govuk-tag--grey'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.ABORTED:\n statusClass = 'govuk-tag--orange'\n itemActions = itemActionsHtml(href, id, type, status)\n break\n case RequestStatus.READY:\n case RequestStatus.FINISHED:\n itemActions = `<a class=govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to ${reportType}</a>`\n statusClass = 'govuk-tag--green'\n break\n case RequestStatus.PICKED:\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n itemActions = `<a class='govuk-link govuk-link--no-visited-state dpr-type__${reportType}' href=\"${href}\">Go to status</a>`\n break\n default:\n break\n }\n\n let filtersSummary = ''\n if (data.summary || data.interactiveSummary) {\n filtersSummary = createSummaryHtml(data)\n }\n\n return [\n {\n html: createListItemProduct(reportName, text, reportType, timestamp),\n },\n { html: filtersSummary },\n {\n html: `<strong class=\"govuk-tag dpr-request-status-tag ${statusClass}\">${status}</strong>`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n {\n html: `${itemActions}`,\n classes: 'dpr-req-cell dpr-req-cell__status',\n },\n ]\n}\n\nconst getTotals = (formattedCount: number, maxRows: number) => {\n return {\n amount: formattedCount,\n shown: formattedCount > maxRows ? maxRows : formattedCount,\n max: maxRows,\n }\n}\n\nconst createSummaryHtml = (data: FormattedUserReportData) => {\n const summaryHtml = data.summary\n ?.map((item) => `<li class=\"govuk-body-s dpr-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`)\n .join('')\n\n const interactiveSummaryHtml = data.interactiveSummary\n ?.map(\n (item) =>\n `<li class=\"govuk-body-s dpr-interactive-query-summary\"><strong>${item.name}</strong>: ${item.value}</li>`,\n )\n .join('')\n\n return `<ul class=\"dpr-card-group__item__filters-list govuk-!-margin-top-0 govuk-!-margin-bottom-0\">${summaryHtml}${interactiveSummaryHtml}</ul>`\n}\n\nconst getMeta = (formattedData: FormattedUserReportData[], res: Response) => {\n const { nestedBaseUrl } = LocalsHelper.getValues(res)\n\n return formattedData.map((d) => {\n return {\n reportId: d.meta.reportId,\n id: d.meta.id,\n executionId: d.meta.executionId,\n tableId: d.meta.tableId,\n status: d.meta.status,\n requestedAt: d.meta.requestedAt,\n type: d.meta.type,\n dataProductDefinitionsPath: d.meta.dataProductDefinitionsPath,\n pollingUrl: d.meta.pollingUrl,\n reportUrl: d.meta.reportUrl,\n nestedBaseUrl,\n }\n })\n}\n\nexport const setDataFromStatus = (status: RequestStatus, reportsData: UserReportData) => {\n let timestamp\n let href\n let formattedDate\n const { url, timestamp: time } = reportsData\n const dateMapper = new DateMapper()\n switch (status) {\n case RequestStatus.FAILED: {\n formattedDate = time.failed\n ? dateMapper.toDateString(<string>(<unknown>time.failed), 'local-date')\n : dayjs().format('DD/MM/YYYY')\n href = `${url.polling.fullUrl}`\n timestamp = `Failed at: ${formattedDate}`\n break\n }\n case RequestStatus.ABORTED: {\n href = `${url.request.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.aborted), 'local-date')\n timestamp = `Aborted at: ${formattedDate}`\n break\n }\n case RequestStatus.FINISHED:\n href = url.report.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.completed), 'local-date')\n timestamp = `Ready at: ${formattedDate}`\n break\n case RequestStatus.EXPIRED: {\n href = `${url.request.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.expired), 'local-date')\n timestamp = `Expired at: ${formattedDate}`\n break\n }\n case RequestStatus.READY: {\n href = `${url.report.fullUrl}`\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n case RequestStatus.SUBMITTED:\n case RequestStatus.STARTED:\n case RequestStatus.PICKED:\n href = url.polling.fullUrl\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.requested), 'local-date')\n timestamp = `Requested at: ${formattedDate}`\n break\n default:\n formattedDate = dateMapper.toDateString(<string>(<unknown>time.lastViewed), 'local-date')\n timestamp = `Last viewed: ${formattedDate}`\n break\n }\n\n return {\n timestamp,\n href,\n }\n}\n\nexport const renderList = async ({\n res,\n reportsData,\n maxRows,\n filterFunction,\n type,\n}: {\n res: Response\n reportsData: StoredReportData[]\n maxRows?: number\n filterFunction: (report: UserReportData) => boolean\n type: 'requested' | 'viewed'\n}): Promise<RenderTableListResponse> => {\n const { csrfToken } = LocalsHelper.getValues(res)\n\n let formatted = reportsData.filter(filterFunction).map(formatData)\n const formattedCount = formatted.length\n\n if (maxRows) formatted = formatted.slice(0, maxRows)\n const tableData = formatTable(formatted, type)\n\n const path = type === 'requested' ? 'requested-reports' : 'recently-viewed'\n const head = {\n ...(formatted.length && { href: `dpr/my-reports/${path}/list` }),\n ...(!formatted.length && { emptyMessage: `You have 0 ${type} reports` }),\n }\n\n const result = {\n head,\n tableData,\n total: getTotals(formattedCount, maxRows),\n meta: getMeta(formatted, res),\n csrfToken,\n maxRows,\n }\n\n return result\n}\n\nexport const updateExpiredStatus = async ({ req, res, services }: AsyncReportUtilsParams) => {\n const { dprUser } = LocalsHelper.getValues(res)\n const report = await getExpiredStatus({ req, res, services })\n\n if (report && report.isExpired) {\n await services.recentlyViewedService.setToExpired(report.executionId, dprUser.id)\n await services.requestedReportService.setToExpired(report.executionId, dprUser.id)\n }\n\n return report ? report.isExpired : false\n}\n\nexport const init = async ({\n services,\n res,\n req,\n maxRows = 6,\n}: {\n services: Services\n res: Response\n req: Request\n maxRows?: number\n}) => {\n const { requestedReports, recentlyViewedReports, bookmarkingEnabled } = LocalsHelper.getValues(res)\n const requestedReportsList = await renderList({\n res,\n reportsData: requestedReports,\n filterFunction: RequestedReportUtils.filterReports,\n maxRows,\n type: 'requested',\n })\n const viewedReportsList = await renderList({\n res,\n reportsData: recentlyViewedReports,\n filterFunction: RecentlyViewedCardGroupUtils.filterReports,\n maxRows,\n type: 'viewed',\n })\n\n let bookmarks\n if (bookmarkingEnabled) {\n bookmarks = await BookmarklistUtils.renderBookmarkList({\n res,\n req,\n services,\n maxRows,\n })\n }\n\n return {\n requestedReports: requestedReportsList,\n viewedReports: viewedReportsList,\n bookmarks,\n }\n}\n\nexport const updateLastViewed = async ({\n req,\n services,\n reportStateData,\n userId,\n filters,\n}: {\n req: Request\n services: Services\n reportStateData: RequestedReport\n userId: string\n filters: FilterValue[]\n}) => {\n const { type, reportId, reportName, description, id, name, executionId, tableId, query, url } = reportStateData\n const reportData = { type, reportId, reportName, description, id, name }\n const executionData = { executionId, tableId }\n const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }\n\n const columns = <string[]>req.query?.columns\n const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query\n const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters)\n const reqQuery = {\n ...filtersQuery,\n ...(columns && { columns }),\n ...(selectedPage && { selectedPage }),\n ...(pageSize && { pageSize }),\n ...(sortColumn && { sortColumn }),\n ...(sortedAsc && { sortedAsc }),\n }\n const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {\n query: reqQuery,\n querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),\n }\n\n const recentlyViewedData = new UserStoreItemBuilder(reportData)\n .addExecutionData(executionData)\n .addQuery(queryData)\n .addInteractiveQuery(interactiveQueryData)\n .addStatus(RequestStatus.READY)\n .addTimestamp()\n .addAsyncUrls(url)\n .addReportUrls(req)\n .build()\n\n await services.requestedReportService.updateLastViewed(reportStateData.executionId, userId)\n await services.recentlyViewedService.setRecentlyViewed(recentlyViewedData, userId)\n}\n\nexport default {\n renderList,\n updateExpiredStatus,\n init,\n updateLastViewed,\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["utils_exports", "__export", "utils_default", "init", "renderList", "setDataFromStatus", "updateExpiredStatus", "updateLastViewed", "__toCommonJS", "import_dayjs", "import_UserReports", "import_requestStatusHelper", "import_utils", "import_reportListsHelper", "import_localsHelper", "import_DateMapper", "import_UserStoreItemBuilder", "formatData", "reportData", "reportDataCopy", "executionId", "tableId", "variantName", "name", "reportId", "variantId", "id", "description", "query", "interactiveQuery", "status", "timestamp", "reportName", "dataProductDefinitionsPath", "reportType", "url", "summary", "interactiveSummary", "type", "formatTable", "data", "card", "formatTableRow", "statusClass", "itemActions", "href", "text", "filtersSummary", "createSummaryHtml", "getTotals", "formattedCount", "maxRows", "summaryHtml", "item", "interactiveSummaryHtml", "getMeta", "formattedData", "res", "nestedBaseUrl", "LocalsHelper", "d", "reportsData", "formattedDate", "time", "dateMapper", "DateMapper", "dayjs", "filterFunction", "csrfToken", "formatted", "tableData", "path", "req", "services", "dprUser", "report", "requestedReports", "recentlyViewedReports", "bookmarkingEnabled", "requestedReportsList", "RequestedReportUtils", "viewedReportsList", "RecentlyViewedCardGroupUtils", "bookmarks", "BookmarklistUtils", "reportStateData", "userId", "filters", "executionData", "queryData", "columns", "selectedPage", "pageSize", "sortColumn", "sortedAsc", "filtersQuery", "FiltersUtils", "interactiveQueryData", "SelectedFiltersUtils", "recentlyViewedData", "UserStoreItemBuilder"]
7
7
  }
@@ -366,10 +366,20 @@ export const updateLastViewed = async ({
366
366
  const executionData = { executionId, tableId }
367
367
  const queryData = query ? { query: query.data, querySummary: query.summary } : { query: {}, querySummary: [] }
368
368
 
369
- const reqQuery = FiltersUtils.setRequestQueryFromFilterValues(filters)
370
- const interactiveQueryData: { query: Dict<string>; querySummary: Array<Dict<string>> } = {
369
+ const columns = <string[]>req.query?.columns
370
+ const { selectedPage, pageSize, sortColumn, sortedAsc } = <Dict<string>>req.query
371
+ const filtersQuery = FiltersUtils.setRequestQueryFromFilterValues(filters)
372
+ const reqQuery = {
373
+ ...filtersQuery,
374
+ ...(columns && { columns }),
375
+ ...(selectedPage && { selectedPage }),
376
+ ...(pageSize && { pageSize }),
377
+ ...(sortColumn && { sortColumn }),
378
+ ...(sortedAsc && { sortedAsc }),
379
+ }
380
+ const interactiveQueryData: { query: Dict<string | string[]>; querySummary: Array<Dict<string>> } = {
371
381
  query: reqQuery,
372
- querySummary: SelectedFiltersUtils.getQuerySummary(reqQuery, filters),
382
+ querySummary: SelectedFiltersUtils.getQuerySummary(filtersQuery, filters),
373
383
  }
374
384
 
375
385
  const recentlyViewedData = new UserStoreItemBuilder(reportData)
@@ -1,2 +1,2 @@
1
- var u=Object.create;var g=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var p=(r,i)=>{for(var t in i)g(r,t,{get:i[t],enumerable:!0})},l=(r,i,t,n)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of C(i))!b.call(r,s)&&s!==t&&g(r,s,{get:()=>i[s],enumerable:!(n=m(i,s))||n.enumerable});return r};var c=(r,i,t)=>(t=r!=null?u($(r)):{},l(i||!r||!r.__esModule?g(t,"default",{value:r,enumerable:!0}):t,r)),y=r=>l(g({},"__esModule",{value:!0}),r);var P={};p(P,{DashboardClient:()=>h,default:()=>A});module.exports=y(P);var a=c(require("../utils/logger")),D=c(require("./restClient"));class h{constructor(i){this.restClient=new D.default("Dashboard API Client",i)}getDefinition(i,t,n,s){this.logInfo("Get definition:",{dpdId:n,dashboardId:t});const e={dataProductDefinitionsPath:s};return this.restClient.get({path:`/definitions/${n}/dashboards/${t}`,query:e,token:i}).then(o=>o)}requestAsyncDashboard(i,t,n,s){return this.logInfo("Request dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/async/dashboards/${t}/${n}`,token:i,query:s}).then(e=>e)}getAsyncDashboard(i,t,n,s,e){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n,tableId:s}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/tables/${s}/result`,token:i,query:e}).then(o=>o)}getAsyncStatus(i,t,n,s,e,o){return this.logInfo("Get status:",{reportId:t,dashboardId:n,executionId:s,tableId:o}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/statements/${s}/status`,token:i,query:{dataProductDefinitionsPath:e,tableId:o}}).then(f=>f)}cancelAsyncRequest(i,t,n,s,e){return this.logInfo("Cancel request:",{reportId:t,dashboardId:n,executionId:s}),this.restClient.delete({path:`/reports/${t}/dashboards/${n}/statements/${s}`,token:i,query:{dataProductDefinitionsPath:e}}).then(o=>o)}logInfo(i,t){a.default.info(`Dashboard client: ${i}:`),t&&Object.keys(t).length&&a.default.info(JSON.stringify(t,null,2))}}var A=h;0&&(module.exports={DashboardClient});
1
+ var u=Object.create;var g=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var p=(r,i)=>{for(var t in i)g(r,t,{get:i[t],enumerable:!0})},l=(r,i,t,n)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of C(i))!b.call(r,s)&&s!==t&&g(r,s,{get:()=>i[s],enumerable:!(n=m(i,s))||n.enumerable});return r};var c=(r,i,t)=>(t=r!=null?u($(r)):{},l(i||!r||!r.__esModule?g(t,"default",{value:r,enumerable:!0}):t,r)),y=r=>l(g({},"__esModule",{value:!0}),r);var P={};p(P,{DashboardClient:()=>h,default:()=>A});module.exports=y(P);var a=c(require("../utils/logger")),D=c(require("./restClient"));class h{constructor(i){this.restClient=new D.default("Dashboard API Client",i)}getDefinition(i,t,n,s){this.logInfo("Get definition:",{dpdId:n,dashboardId:t});const e={dataProductDefinitionsPath:s};return this.restClient.get({path:`/definitions/${n}/dashboards/${t}`,query:e,token:i}).then(o=>o)}requestAsyncDashboard(i,t,n,s){return this.logInfo("Request dashboard:",{reportId:t,dashboardId:n}),this.restClient.get({path:`/async/dashboards/${t}/${n}`,token:i,query:s}).then(e=>e)}getAsyncDashboard(i,t,n,s,e){return this.logInfo("Get dashboard:",{reportId:t,dashboardId:n,tableId:s}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/tables/${s}/result`,token:i,query:e}).then(o=>o)}getAsyncStatus(i,t,n,s,e,o){return this.logInfo("Get status:",{reportId:t,dashboardId:n,executionId:s,tableId:e}),this.restClient.get({path:`/reports/${t}/dashboards/${n}/statements/${s}/status`,token:i,query:{dataProductDefinitionsPath:o,tableId:e}}).then(f=>f)}cancelAsyncRequest(i,t,n,s,e){return this.logInfo("Cancel request:",{reportId:t,dashboardId:n,executionId:s}),this.restClient.delete({path:`/reports/${t}/dashboards/${n}/statements/${s}`,token:i,query:{dataProductDefinitionsPath:e}}).then(o=>o)}logInfo(i,t){a.default.info(`Dashboard client: ${i}:`),t&&Object.keys(t).length&&a.default.info(JSON.stringify(t,null,2))}}var A=h;0&&(module.exports={DashboardClient});
2
2
  //# sourceMappingURL=dashboardClient.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/dpr/data/dashboardClient.ts"],
4
- "sourcesContent": ["import { DashboardDefinition } from '../components/_dashboards/dashboard/types'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { ApiConfig } from './types'\n\nclass DashboardClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Dashboard API Client', config)\n }\n\n getDefinition(\n token: string,\n dashboardId: string,\n dpdId: string,\n definitionsPath?: string,\n ): Promise<DashboardDefinition> {\n this.logInfo('Get definition:', { dpdId, dashboardId })\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n }\n return this.restClient\n .get({\n path: `/definitions/${dpdId}/dashboards/${dashboardId}`,\n query,\n token,\n })\n .then((response) => <DashboardDefinition>response)\n }\n\n requestAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request dashboard:', { reportId, dashboardId })\n\n return this.restClient\n .get({\n path: `/async/dashboards/${reportId}/${dashboardId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n tableId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get dashboard:', { reportId, dashboardId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncStatus(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n dataProductDefinitionsPath?: string,\n tableId?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n dataProductDefinitionsPath: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel request:', { reportId, dashboardId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Dashboard client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { DashboardClient }\nexport default DashboardClient\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAmB,8BACnBC,EAAuB,2BAIvB,MAAMJ,CAAgB,CAGpB,YAAYK,EAAmB,CAC7B,KAAK,WAAa,IAAI,EAAAC,QAAW,uBAAwBD,CAAM,CACjE,CAEA,cACEE,EACAC,EACAC,EACAC,EAC8B,CAC9B,KAAK,QAAQ,kBAAmB,CAAE,MAAAD,EAAO,YAAAD,CAAY,CAAC,EACtD,MAAMG,EAAQ,CACZ,2BAA4BD,CAC9B,EACA,OAAO,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBD,CAAK,eAAeD,CAAW,GACrD,MAAAG,EACA,MAAAJ,CACF,CAAC,EACA,KAAMK,GAAkCA,CAAQ,CACrD,CAEA,sBACEL,EACAM,EACAL,EACAG,EACuB,CACvB,YAAK,QAAQ,qBAAsB,CAAE,SAAAE,EAAU,YAAAL,CAAY,CAAC,EAErD,KAAK,WACT,IAAI,CACH,KAAM,qBAAqBK,CAAQ,IAAIL,CAAW,GAClD,MAAAD,EACA,MAAAI,CACF,CAAC,EACA,KAAMC,GAA2BA,CAAQ,CAC9C,CAEA,kBACEL,EACAM,EACAL,EACAM,EACAH,EAC8B,CAC9B,YAAK,QAAQ,iBAAkB,CAAE,SAAAE,EAAU,YAAAL,EAAa,QAAAM,CAAQ,CAAC,EAE1D,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeL,CAAW,WAAWM,CAAO,UACtE,MAAAP,EACA,MAAAI,CACF,CAAC,EACA,KAAMC,GAAkCA,CAAQ,CACrD,CAEA,eACEL,EACAM,EACAL,EACAO,EACAC,EACAF,EACuB,CACvB,YAAK,QAAQ,cAAe,CAAE,SAAAD,EAAU,YAAAL,EAAa,YAAAO,EAAa,QAAAD,CAAQ,CAAC,EAEpE,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeL,CAAW,eAAeO,CAAW,UAC9E,MAAAR,EACA,MAAO,CACL,2BAAAS,EACA,QAAAF,CACF,CACF,CAAC,EACA,KAAMF,GAA2BA,CAAQ,CAC9C,CAEA,mBACEL,EACAM,EACAL,EACAO,EACAC,EACuB,CACvB,YAAK,QAAQ,kBAAmB,CAAE,SAAAH,EAAU,YAAAL,EAAa,YAAAO,CAAY,CAAC,EAE/D,KAAK,WACT,OAAO,CACN,KAAM,YAAYF,CAAQ,eAAeL,CAAW,eAAeO,CAAW,GAC9E,MAAAR,EACA,MAAO,CACL,2BAAAS,CACF,CACF,CAAC,EACA,KAAMJ,GAA2BA,CAAQ,CAC9C,CAEA,QAAQK,EAAeC,EAAqB,CAC1C,EAAAC,QAAO,KAAK,qBAAqBF,CAAK,GAAG,EACrCC,GAAQ,OAAO,KAAKA,CAAI,EAAE,QAAQ,EAAAC,QAAO,KAAK,KAAK,UAAUD,EAAM,KAAM,CAAC,CAAC,CACjF,CACF,CAGA,IAAOjB,EAAQD",
4
+ "sourcesContent": ["import { DashboardDefinition } from '../components/_dashboards/dashboard/types'\nimport logger from '../utils/logger'\nimport RestClient from './restClient'\nimport Dict = NodeJS.Dict\nimport { ApiConfig } from './types'\n\nclass DashboardClient {\n restClient: RestClient\n\n constructor(config: ApiConfig) {\n this.restClient = new RestClient('Dashboard API Client', config)\n }\n\n getDefinition(\n token: string,\n dashboardId: string,\n dpdId: string,\n definitionsPath?: string,\n ): Promise<DashboardDefinition> {\n this.logInfo('Get definition:', { dpdId, dashboardId })\n const query = {\n dataProductDefinitionsPath: definitionsPath,\n }\n return this.restClient\n .get({\n path: `/definitions/${dpdId}/dashboards/${dashboardId}`,\n query,\n token,\n })\n .then((response) => <DashboardDefinition>response)\n }\n\n requestAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n query: Record<string, string | boolean | number>,\n ): Promise<Dict<string>> {\n this.logInfo('Request dashboard:', { reportId, dashboardId })\n\n return this.restClient\n .get({\n path: `/async/dashboards/${reportId}/${dashboardId}`,\n token,\n query,\n })\n .then((response) => <Dict<string>>response)\n }\n\n getAsyncDashboard(\n token: string,\n reportId: string,\n dashboardId: string,\n tableId: string,\n query: Dict<string | number>,\n ): Promise<Array<Dict<string>>> {\n this.logInfo('Get dashboard:', { reportId, dashboardId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/tables/${tableId}/result`,\n token,\n query,\n })\n .then((response) => <Array<Dict<string>>>response)\n }\n\n getAsyncStatus(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n tableId?: string,\n dataProductDefinitionsPath?: string,\n ): Promise<Dict<string>> {\n this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId })\n\n return this.restClient\n .get({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}/status`,\n token,\n query: {\n dataProductDefinitionsPath,\n tableId,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n cancelAsyncRequest(\n token: string,\n reportId: string,\n dashboardId: string,\n executionId: string,\n dataProductDefinitionsPath: string,\n ): Promise<Dict<string>> {\n this.logInfo('Cancel request:', { reportId, dashboardId, executionId })\n\n return this.restClient\n .delete({\n path: `/reports/${reportId}/dashboards/${dashboardId}/statements/${executionId}`,\n token,\n query: {\n dataProductDefinitionsPath,\n },\n })\n .then((response) => <Dict<string>>response)\n }\n\n logInfo(title: string, args?: Dict<string>) {\n logger.info(`Dashboard client: ${title}:`)\n if (args && Object.keys(args).length) logger.info(JSON.stringify(args, null, 2))\n }\n}\n\nexport { DashboardClient }\nexport default DashboardClient\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GACA,IAAAK,EAAmB,8BACnBC,EAAuB,2BAIvB,MAAMJ,CAAgB,CAGpB,YAAYK,EAAmB,CAC7B,KAAK,WAAa,IAAI,EAAAC,QAAW,uBAAwBD,CAAM,CACjE,CAEA,cACEE,EACAC,EACAC,EACAC,EAC8B,CAC9B,KAAK,QAAQ,kBAAmB,CAAE,MAAAD,EAAO,YAAAD,CAAY,CAAC,EACtD,MAAMG,EAAQ,CACZ,2BAA4BD,CAC9B,EACA,OAAO,KAAK,WACT,IAAI,CACH,KAAM,gBAAgBD,CAAK,eAAeD,CAAW,GACrD,MAAAG,EACA,MAAAJ,CACF,CAAC,EACA,KAAMK,GAAkCA,CAAQ,CACrD,CAEA,sBACEL,EACAM,EACAL,EACAG,EACuB,CACvB,YAAK,QAAQ,qBAAsB,CAAE,SAAAE,EAAU,YAAAL,CAAY,CAAC,EAErD,KAAK,WACT,IAAI,CACH,KAAM,qBAAqBK,CAAQ,IAAIL,CAAW,GAClD,MAAAD,EACA,MAAAI,CACF,CAAC,EACA,KAAMC,GAA2BA,CAAQ,CAC9C,CAEA,kBACEL,EACAM,EACAL,EACAM,EACAH,EAC8B,CAC9B,YAAK,QAAQ,iBAAkB,CAAE,SAAAE,EAAU,YAAAL,EAAa,QAAAM,CAAQ,CAAC,EAE1D,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeL,CAAW,WAAWM,CAAO,UACtE,MAAAP,EACA,MAAAI,CACF,CAAC,EACA,KAAMC,GAAkCA,CAAQ,CACrD,CAEA,eACEL,EACAM,EACAL,EACAO,EACAD,EACAE,EACuB,CACvB,YAAK,QAAQ,cAAe,CAAE,SAAAH,EAAU,YAAAL,EAAa,YAAAO,EAAa,QAAAD,CAAQ,CAAC,EAEpE,KAAK,WACT,IAAI,CACH,KAAM,YAAYD,CAAQ,eAAeL,CAAW,eAAeO,CAAW,UAC9E,MAAAR,EACA,MAAO,CACL,2BAAAS,EACA,QAAAF,CACF,CACF,CAAC,EACA,KAAMF,GAA2BA,CAAQ,CAC9C,CAEA,mBACEL,EACAM,EACAL,EACAO,EACAC,EACuB,CACvB,YAAK,QAAQ,kBAAmB,CAAE,SAAAH,EAAU,YAAAL,EAAa,YAAAO,CAAY,CAAC,EAE/D,KAAK,WACT,OAAO,CACN,KAAM,YAAYF,CAAQ,eAAeL,CAAW,eAAeO,CAAW,GAC9E,MAAAR,EACA,MAAO,CACL,2BAAAS,CACF,CACF,CAAC,EACA,KAAMJ,GAA2BA,CAAQ,CAC9C,CAEA,QAAQK,EAAeC,EAAqB,CAC1C,EAAAC,QAAO,KAAK,qBAAqBF,CAAK,GAAG,EACrCC,GAAQ,OAAO,KAAKA,CAAI,EAAE,QAAQ,EAAAC,QAAO,KAAK,KAAK,UAAUD,EAAM,KAAM,CAAC,CAAC,CACjF,CACF,CAGA,IAAOjB,EAAQD",
6
6
  "names": ["dashboardClient_exports", "__export", "DashboardClient", "dashboardClient_default", "__toCommonJS", "import_logger", "import_restClient", "config", "RestClient", "token", "dashboardId", "dpdId", "definitionsPath", "query", "response", "reportId", "tableId", "executionId", "dataProductDefinitionsPath", "title", "args", "logger"]
7
7
  }
@@ -70,8 +70,8 @@ class DashboardClient {
70
70
  reportId: string,
71
71
  dashboardId: string,
72
72
  executionId: string,
73
- dataProductDefinitionsPath?: string,
74
73
  tableId?: string,
74
+ dataProductDefinitionsPath?: string,
75
75
  ): Promise<Dict<string>> {
76
76
  this.logInfo('Get status:', { reportId, dashboardId, executionId, tableId })
77
77
 
@@ -1,2 +1,2 @@
1
- var f=Object.create;var i=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var E=(s,e)=>{for(var r in e)i(s,r,{get:e[r],enumerable:!0})},p=(s,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of v(e))!b.call(s,t)&&t!==r&&i(s,t,{get:()=>e[t],enumerable:!(a=h(e,t))||a.enumerable});return s};var u=(s,e,r)=>(r=s!=null?f(R(s)):{},p(e||!s||!s.__esModule?i(r,"default",{value:s,enumerable:!0}):r,s)),D=s=>p(i({},"__esModule",{value:!0}),s);var S={};E(S,{RequestReportController:()=>y,default:()=>F});module.exports=D(S);var l=u(require("./utils")),o=u(require("../../../../components/error-summary/utils")),c=u(require("../../../../utils/Personalisation/personalisationUtils")),n=require("../../../../components/_filters/filtersTypeEnum");class y{constructor(e,r){this.GET=async(e,r,a)=>{try{const t=await l.default.renderRequest({req:e,res:r,services:this.services,next:a});r.render("dpr/routes/journeys/request-report/filters/view",{layoutPath:this.layoutPath,...t})}catch(t){e.body.title="Request failed",e.body.errorDescription=`Your ${e.params.type} has failed to generate.`,e.body.error=o.default.handleError(t,e.params.type),a()}};this.POST=async(e,r,a)=>{try{const t=await l.default.request({req:e,res:r,services:this.services,next:a});if(t){const d=`${t}/status`;r.redirect(d)}else r.end()}catch(t){const d=o.default.handleError(t,e.params.type),m=l.default.getFiltersFromReqBody(e);e.body={title:"Request Failed",errorDescription:`Your ${e.params.type} has failed to generate.`,error:d,retry:!0,filters:m,...e.body},a()}};this.saveDefaultFilterValues=async(e,r,a)=>{try{await c.default.saveDefaults(n.FiltersType.REQUEST,r,e,this.services),r.redirect(`${e.baseUrl}?defaultsSaved=true`)}catch(t){e.body={title:"Failed to save defaults",error:o.default.handleError(t,e.params.type),...e.body},a()}};this.removeDefaultFilterValues=async(e,r,a)=>{try{await c.default.removeDefaults(n.FiltersType.REQUEST,r,e,this.services),r.redirect(e.baseUrl)}catch(t){e.body={title:"Failed to remove defaults",error:o.default.handleError(t,e.params.type),...e.body},a()}};this.layoutPath=e,this.services=r}}var F=y;0&&(module.exports={RequestReportController});
1
+ var h=Object.create;var d=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var E=(s,e)=>{for(var t in e)d(s,t,{get:e[t],enumerable:!0})},m=(s,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of R(e))!b.call(s,r)&&r!==t&&d(s,r,{get:()=>e[r],enumerable:!(a=v(e,r))||a.enumerable});return s};var c=(s,e,t)=>(t=s!=null?h(D(s)):{},m(e||!s||!s.__esModule?d(t,"default",{value:s,enumerable:!0}):t,s)),P=s=>m(d({},"__esModule",{value:!0}),s);var S={};E(S,{RequestReportController:()=>p,default:()=>F});module.exports=P(S);var u=c(require("./utils")),i=c(require("../../../../components/error-summary/utils")),n=c(require("../../../../utils/Personalisation/personalisationUtils")),y=require("../../../../components/_filters/filtersTypeEnum");class p{constructor(e,t){this.GET=async(e,t,a)=>{try{const r=await u.default.renderRequest({req:e,res:t,services:this.services,next:a});t.render("dpr/routes/journeys/request-report/filters/view",{layoutPath:this.layoutPath,...r})}catch(r){e.body.title="Request failed",e.body.errorDescription=`Your ${e.params.type} has failed to generate.`,e.body.error=i.default.handleError(r,e.params.type),a()}};this.POST=async(e,t,a)=>{try{const r=await u.default.request({req:e,res:t,services:this.services,next:a}),{executionId:o,dataProductDefinitionsPath:l}=r;if(o){const f=l?`${o}/status?dataProductDefinitionsPath=${l}`:`${o}/status`;t.redirect(f)}else t.end()}catch(r){const o=i.default.handleError(r,e.params.type),l=u.default.getFiltersFromReqBody(e);e.body={title:"Request Failed",errorDescription:`Your ${e.params.type} has failed to generate.`,error:o,retry:!0,filters:l,...e.body},a()}};this.saveDefaultFilterValues=async(e,t,a)=>{try{await n.default.saveDefaults(y.FiltersType.REQUEST,t,e,this.services),t.redirect(`${e.baseUrl}?defaultsSaved=true`)}catch(r){e.body={title:"Failed to save defaults",error:i.default.handleError(r,e.params.type),...e.body},a()}};this.removeDefaultFilterValues=async(e,t,a)=>{try{await n.default.removeDefaults(y.FiltersType.REQUEST,t,e,this.services),t.redirect(e.baseUrl)}catch(r){e.body={title:"Failed to remove defaults",error:i.default.handleError(r,e.params.type),...e.body},a()}};this.layoutPath=e,this.services=t}}var F=p;0&&(module.exports={RequestReportController});
2
2
  //# sourceMappingURL=controller.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/dpr/routes/journeys/request-report/filters/controller.ts"],
4
- "sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../types/Services'\nimport { RequestDataResult } from '../../../../types/AsyncReportUtils'\nimport AysncRequestUtils from './utils'\nimport ErrorSummaryUtils from '../../../../components/error-summary/utils'\nimport PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\nclass RequestReportController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n // Render request page\n GET: RequestHandler = async (req, res, next) => {\n try {\n const requestRenderData = <RequestDataResult>await AysncRequestUtils.renderRequest({\n req,\n res,\n services: this.services,\n next,\n })\n\n res.render(`dpr/routes/journeys/request-report/filters/view`, {\n layoutPath: this.layoutPath,\n ...requestRenderData,\n })\n } catch (error) {\n req.body.title = 'Request failed'\n req.body.errorDescription = `Your ${req.params.type} has failed to generate.`\n req.body.error = ErrorSummaryUtils.handleError(error, req.params.type)\n next()\n }\n }\n\n // Request report\n POST: RequestHandler = async (req, res, next) => {\n try {\n const executionId = await AysncRequestUtils.request({\n req,\n res,\n services: this.services,\n next,\n })\n\n if (executionId) {\n const redirect = `${executionId}/status`\n res.redirect(redirect)\n } else {\n res.end()\n }\n } catch (error) {\n const dprError = ErrorSummaryUtils.handleError(error, req.params.type)\n const filters = AysncRequestUtils.getFiltersFromReqBody(req)\n\n req.body = {\n title: 'Request Failed',\n errorDescription: `Your ${req.params.type} has failed to generate.`,\n error: dprError,\n retry: true,\n filters,\n ...req.body,\n }\n next()\n }\n }\n\n saveDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.saveDefaults(FiltersType.REQUEST, res, req, this.services)\n res.redirect(`${req.baseUrl}?defaultsSaved=true`)\n } catch (error) {\n req.body = {\n title: 'Failed to save defaults',\n error: ErrorSummaryUtils.handleError(error, req.params.type),\n ...req.body,\n }\n next()\n }\n }\n\n removeDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.removeDefaults(FiltersType.REQUEST, res, req, this.services)\n res.redirect(req.baseUrl)\n } catch (error) {\n req.body = {\n title: 'Failed to remove defaults',\n error: ErrorSummaryUtils.handleError(error, req.params.type),\n ...req.body,\n }\n next()\n }\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],
5
- "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAGA,IAAAK,EAA8B,sBAC9BA,EAA8B,yDAC9BC,EAAiC,qEACjCC,EAA4B,2DAE5B,MAAML,CAAwB,CAK5B,YAAYM,EAAoBC,EAAoB,CAMpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,GAAI,CACF,MAAMC,EAAuC,MAAM,EAAAC,QAAkB,cAAc,CACjF,IAAAJ,EACA,IAAAC,EACA,SAAU,KAAK,SACf,KAAAC,CACF,CAAC,EAEDD,EAAI,OAAO,kDAAmD,CAC5D,WAAY,KAAK,WACjB,GAAGE,CACL,CAAC,CACH,OAASE,EAAO,CACdL,EAAI,KAAK,MAAQ,iBACjBA,EAAI,KAAK,iBAAmB,QAAQA,EAAI,OAAO,IAAI,2BACnDA,EAAI,KAAK,MAAQ,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EACrEE,EAAK,CACP,CACF,EAGA,UAAuB,MAAOF,EAAKC,EAAKC,IAAS,CAC/C,GAAI,CACF,MAAMK,EAAc,MAAM,EAAAH,QAAkB,QAAQ,CAClD,IAAAJ,EACA,IAAAC,EACA,SAAU,KAAK,SACf,KAAAC,CACF,CAAC,EAED,GAAIK,EAAa,CACf,MAAMC,EAAW,GAAGD,CAAW,UAC/BN,EAAI,SAASO,CAAQ,CACvB,MACEP,EAAI,IAAI,CAEZ,OAASI,EAAO,CACd,MAAMI,EAAW,EAAAH,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC/DU,EAAU,EAAAN,QAAkB,sBAAsBJ,CAAG,EAE3DA,EAAI,KAAO,CACT,MAAO,iBACP,iBAAkB,QAAQA,EAAI,OAAO,IAAI,2BACzC,MAAOS,EACP,MAAO,GACP,QAAAC,EACA,GAAGV,EAAI,IACT,EACAE,EAAK,CACP,CACF,EAEA,6BAA0C,MAAOF,EAAKC,EAAKC,IAAS,CAClE,GAAI,CACF,MAAM,EAAAS,QAAqB,aAAa,cAAY,QAASV,EAAKD,EAAK,KAAK,QAAQ,EACpFC,EAAI,SAAS,GAAGD,EAAI,OAAO,qBAAqB,CAClD,OAASK,EAAO,CACdL,EAAI,KAAO,CACT,MAAO,0BACP,MAAO,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC3D,GAAGA,EAAI,IACT,EACAE,EAAK,CACP,CACF,EAEA,+BAA4C,MAAOF,EAAKC,EAAKC,IAAS,CACpE,GAAI,CACF,MAAM,EAAAS,QAAqB,eAAe,cAAY,QAASV,EAAKD,EAAK,KAAK,QAAQ,EACtFC,EAAI,SAASD,EAAI,OAAO,CAC1B,OAASK,EAAO,CACdL,EAAI,KAAO,CACT,MAAO,4BACP,MAAO,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC3D,GAAGA,EAAI,IACT,EACAE,EAAK,CACP,CACF,EApFE,KAAK,WAAaJ,EAClB,KAAK,SAAWC,CAClB,CAmFF,CAGA,IAAON,EAAQD",
6
- "names": ["controller_exports", "__export", "RequestReportController", "controller_default", "__toCommonJS", "import_utils", "import_personalisationUtils", "import_filtersTypeEnum", "layoutPath", "services", "req", "res", "next", "requestRenderData", "AysncRequestUtils", "error", "ErrorSummaryUtils", "executionId", "redirect", "dprError", "filters", "PersonalisationUtils"]
4
+ "sourcesContent": ["import { RequestHandler } from 'express'\nimport { Services } from '../../../../types/Services'\nimport { RequestDataResult } from '../../../../types/AsyncReportUtils'\nimport AysncRequestUtils from './utils'\nimport ErrorSummaryUtils from '../../../../components/error-summary/utils'\nimport PersonalisationUtils from '../../../../utils/Personalisation/personalisationUtils'\nimport { FiltersType } from '../../../../components/_filters/filtersTypeEnum'\n\nclass RequestReportController {\n layoutPath: string\n\n services: Services\n\n constructor(layoutPath: string, services: Services) {\n this.layoutPath = layoutPath\n this.services = services\n }\n\n // Render request page\n GET: RequestHandler = async (req, res, next) => {\n try {\n const requestRenderData = <RequestDataResult>await AysncRequestUtils.renderRequest({\n req,\n res,\n services: this.services,\n next,\n })\n\n res.render(`dpr/routes/journeys/request-report/filters/view`, {\n layoutPath: this.layoutPath,\n ...requestRenderData,\n })\n } catch (error) {\n req.body.title = 'Request failed'\n req.body.errorDescription = `Your ${req.params.type} has failed to generate.`\n req.body.error = ErrorSummaryUtils.handleError(error, req.params.type)\n next()\n }\n }\n\n // Request report\n POST: RequestHandler = async (req, res, next) => {\n try {\n const executionData = await AysncRequestUtils.request({\n req,\n res,\n services: this.services,\n next,\n })\n\n const { executionId, dataProductDefinitionsPath } = executionData\n\n if (executionId) {\n const redirect = dataProductDefinitionsPath\n ? `${executionId}/status?dataProductDefinitionsPath=${dataProductDefinitionsPath}`\n : `${executionId}/status`\n res.redirect(redirect)\n } else {\n res.end()\n }\n } catch (error) {\n const dprError = ErrorSummaryUtils.handleError(error, req.params.type)\n const filters = AysncRequestUtils.getFiltersFromReqBody(req)\n\n req.body = {\n title: 'Request Failed',\n errorDescription: `Your ${req.params.type} has failed to generate.`,\n error: dprError,\n retry: true,\n filters,\n ...req.body,\n }\n next()\n }\n }\n\n saveDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.saveDefaults(FiltersType.REQUEST, res, req, this.services)\n res.redirect(`${req.baseUrl}?defaultsSaved=true`)\n } catch (error) {\n req.body = {\n title: 'Failed to save defaults',\n error: ErrorSummaryUtils.handleError(error, req.params.type),\n ...req.body,\n }\n next()\n }\n }\n\n removeDefaultFilterValues: RequestHandler = async (req, res, next) => {\n try {\n await PersonalisationUtils.removeDefaults(FiltersType.REQUEST, res, req, this.services)\n res.redirect(req.baseUrl)\n } catch (error) {\n req.body = {\n title: 'Failed to remove defaults',\n error: ErrorSummaryUtils.handleError(error, req.params.type),\n ...req.body,\n }\n next()\n }\n }\n}\n\nexport { RequestReportController }\nexport default RequestReportController\n"],
5
+ "mappings": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,EAAA,YAAAC,IAAA,eAAAC,EAAAJ,GAGA,IAAAK,EAA8B,sBAC9BA,EAA8B,yDAC9BC,EAAiC,qEACjCC,EAA4B,2DAE5B,MAAML,CAAwB,CAK5B,YAAYM,EAAoBC,EAAoB,CAMpD,SAAsB,MAAOC,EAAKC,EAAKC,IAAS,CAC9C,GAAI,CACF,MAAMC,EAAuC,MAAM,EAAAC,QAAkB,cAAc,CACjF,IAAAJ,EACA,IAAAC,EACA,SAAU,KAAK,SACf,KAAAC,CACF,CAAC,EAEDD,EAAI,OAAO,kDAAmD,CAC5D,WAAY,KAAK,WACjB,GAAGE,CACL,CAAC,CACH,OAASE,EAAO,CACdL,EAAI,KAAK,MAAQ,iBACjBA,EAAI,KAAK,iBAAmB,QAAQA,EAAI,OAAO,IAAI,2BACnDA,EAAI,KAAK,MAAQ,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EACrEE,EAAK,CACP,CACF,EAGA,UAAuB,MAAOF,EAAKC,EAAKC,IAAS,CAC/C,GAAI,CACF,MAAMK,EAAgB,MAAM,EAAAH,QAAkB,QAAQ,CACpD,IAAAJ,EACA,IAAAC,EACA,SAAU,KAAK,SACf,KAAAC,CACF,CAAC,EAEK,CAAE,YAAAM,EAAa,2BAAAC,CAA2B,EAAIF,EAEpD,GAAIC,EAAa,CACf,MAAME,EAAWD,EACb,GAAGD,CAAW,sCAAsCC,CAA0B,GAC9E,GAAGD,CAAW,UAClBP,EAAI,SAASS,CAAQ,CACvB,MACET,EAAI,IAAI,CAEZ,OAASI,EAAO,CACd,MAAMM,EAAW,EAAAL,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC/DY,EAAU,EAAAR,QAAkB,sBAAsBJ,CAAG,EAE3DA,EAAI,KAAO,CACT,MAAO,iBACP,iBAAkB,QAAQA,EAAI,OAAO,IAAI,2BACzC,MAAOW,EACP,MAAO,GACP,QAAAC,EACA,GAAGZ,EAAI,IACT,EACAE,EAAK,CACP,CACF,EAEA,6BAA0C,MAAOF,EAAKC,EAAKC,IAAS,CAClE,GAAI,CACF,MAAM,EAAAW,QAAqB,aAAa,cAAY,QAASZ,EAAKD,EAAK,KAAK,QAAQ,EACpFC,EAAI,SAAS,GAAGD,EAAI,OAAO,qBAAqB,CAClD,OAASK,EAAO,CACdL,EAAI,KAAO,CACT,MAAO,0BACP,MAAO,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC3D,GAAGA,EAAI,IACT,EACAE,EAAK,CACP,CACF,EAEA,+BAA4C,MAAOF,EAAKC,EAAKC,IAAS,CACpE,GAAI,CACF,MAAM,EAAAW,QAAqB,eAAe,cAAY,QAASZ,EAAKD,EAAK,KAAK,QAAQ,EACtFC,EAAI,SAASD,EAAI,OAAO,CAC1B,OAASK,EAAO,CACdL,EAAI,KAAO,CACT,MAAO,4BACP,MAAO,EAAAM,QAAkB,YAAYD,EAAOL,EAAI,OAAO,IAAI,EAC3D,GAAGA,EAAI,IACT,EACAE,EAAK,CACP,CACF,EAxFE,KAAK,WAAaJ,EAClB,KAAK,SAAWC,CAClB,CAuFF,CAGA,IAAON,EAAQD",
6
+ "names": ["controller_exports", "__export", "RequestReportController", "controller_default", "__toCommonJS", "import_utils", "import_personalisationUtils", "import_filtersTypeEnum", "layoutPath", "services", "req", "res", "next", "requestRenderData", "AysncRequestUtils", "error", "ErrorSummaryUtils", "executionData", "executionId", "dataProductDefinitionsPath", "redirect", "dprError", "filters", "PersonalisationUtils"]
7
7
  }
@@ -41,15 +41,19 @@ class RequestReportController {
41
41
  // Request report
42
42
  POST: RequestHandler = async (req, res, next) => {
43
43
  try {
44
- const executionId = await AysncRequestUtils.request({
44
+ const executionData = await AysncRequestUtils.request({
45
45
  req,
46
46
  res,
47
47
  services: this.services,
48
48
  next,
49
49
  })
50
50
 
51
+ const { executionId, dataProductDefinitionsPath } = executionData
52
+
51
53
  if (executionId) {
52
- const redirect = `${executionId}/status`
54
+ const redirect = dataProductDefinitionsPath
55
+ ? `${executionId}/status?dataProductDefinitionsPath=${dataProductDefinitionsPath}`
56
+ : `${executionId}/status`
53
57
  res.redirect(redirect)
54
58
  } else {
55
59
  res.end()
@@ -1,2 +1,2 @@
1
- var _=Object.create;var v=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var r in t)v(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of j(t))!L.call(e,i)&&i!==r&&v(e,i,{get:()=>t[i],enumerable:!(a=$(t,i))||a.enumerable});return e};var S=(e,t,r)=>(r=e!=null?_(J(e)):{},T(t||!e||!e.__esModule?v(r,"default",{value:e,enumerable:!0}):r,e)),G=e=>T(v({},"__esModule",{value:!0}),e);var te={};z(te,{cancelRequest:()=>Q,default:()=>ee,getDefintionByType:()=>B,getFiltersFromReqBody:()=>k,renderRequest:()=>N,request:()=>C,updateStore:()=>O});module.exports=G(te);var F=S(require("../../../../components/_async/async-filters-form/utils")),R=S(require("../../../../utils/localsHelper")),U=S(require("../../../../components/_filters/utils")),b=require("../../../../utils/reportStoreHelper"),q=S(require("../../../../utils/UserStoreItemBuilder")),m=require("../../../../types/UserReports"),P=S(require("../../../../utils/Personalisation/personalisationUtils")),V=require("../../../../components/_filters/filtersTypeEnum");const O=async({req:e,res:t,services:r,queryData:a,executionData:i,childExecutionData:n})=>{const{search:d,id:p,type:s}=e.body,{dprUser:o,definitionsPath:c,dpdPathFromQuery:u}=R.default.getValues(t);await(0,b.removeDuplicates)({storeService:r.requestedReportService,userId:o.id,id:p,search:d}),await(0,b.removeDuplicates)({storeService:r.recentlyViewedService,userId:o.id,id:p,search:d});const l=e.body,f={type:l.type,reportId:l.reportId,reportName:l.reportName,description:l.description,id:l.id,name:l.name};let y;switch(s){case m.ReportType.REPORT:y=new q.default(f,l).addExecutionData(i).addChildExecutionData(n).addFilters(a?.filterData).addSortData(a?.sortData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(a).addStatus(m.RequestStatus.SUBMITTED).addTimestamp().build();break;case m.ReportType.DASHBOARD:{y=new q.default(f,l).addExecutionData(i).addChildExecutionData(n).addFilters(a?.filterData).addDefinitionsPath(c,u).addRequestUrls(e).addQuery(a).addStatus(m.RequestStatus.SUBMITTED).addTimestamp().addMetrics(JSON.parse(e.body.sections)).build();break}default:break}await r.requestedReportService.addReport(o.id,y)};async function K(e,t,r,a,i,n){return Promise.all(e.map(d=>t.requestAsyncReport(r,a,d.id,{...i.query,dataProductDefinitionsPath:n}).then(p=>{const{executionId:s,tableId:o}=p;return{executionId:s,tableId:o,variantId:d.id}})))}const W=async({req:e,res:t,token:r,dashboardService:a,reportingService:i})=>{const{definitionsPath:n}=R.default.getValues(t),{reportId:d,id:p,type:s}=e.body;let o,c,u,l,f,y=[];s===m.ReportType.REPORT&&(f=await i.getDefinition(r,d,p,n),o=f?f.variant.specification?.fields:[],c=F.default.setQueryFromFilters(e,o),{executionId:u,tableId:l}=await i.requestAsyncReport(r,d,p,{...c.query,dataProductDefinitionsPath:n}),y=f.variant.childVariants??[]),s===m.ReportType.DASHBOARD&&(f=await a.getDefinition(r,d,p,n),o=f?f.filterFields:[],c=F.default.setQueryFromFilters(e,o),{executionId:u,tableId:l}=await a.requestAsyncDashboard(r,d,p,{...c.query,dataProductDefinitionsPath:n}));const D=await K(y,i,r,d,c,n);return{executionData:{executionId:u,tableId:l},childExecutionData:D,queryData:c}},X=async({token:e,reportId:t,definitionPath:r,services:a,definition:i})=>{const p=(await a.reportingService.getDefinitions(e,r)).find(l=>l.id===t).name,{name:s,description:o,sections:c,filterFields:u}=i;return{reportName:p,name:s,description:o,sections:c||[],fields:u}},Y=async e=>({definition:e,reportName:e.name,name:e.variant.name,description:e.variant.description||e.description,template:e.variant.specification,fields:e?.variant?.specification?.fields,interactive:e?.variant?.interactive}),B=async(e,t,r,a)=>{const{token:i,definitionsPath:n}=R.default.getValues(t),{reportId:d,id:p,variantId:s,type:o}=e.params;return await(o===m.ReportType.REPORT?a.reportingService:a.dashboardService).getDefinition(i,d,s||p,n)},Z=async(e,t,r,a,i,n)=>{const{reportId:d,id:p}=e.params;let s=await F.default.renderFilters(r,a);s.filters=P.default.setUserContextDefaults(t,s.filters);const o=await i.defaultFilterValuesService.get(n,d,p,V.FiltersType.REQUEST);return o&&(s=P.default.setFilterValuesFromSavedDefaults(s.filters,s.sortBy,o)),s.filters=U.default.setFilterValuesFromRequest(s.filters,e),{filtersData:s,defaultFilterValues:o}},C=async({req:e,res:t,services:r})=>{const{token:a}=R.default.getValues(t),i={req:e,res:t,token:a},{executionData:n,queryData:d,childExecutionData:p}=await W({...i,dashboardService:r.dashboardService,reportingService:r.reportingService});return n&&await O({req:e,res:t,services:r,queryData:d,executionData:n,childExecutionData:p}),n.executionId},Q=async({req:e,res:t,services:r})=>{const{token:a,dprUser:i,definitionsPath:n}=R.default.getValues(t),{reportId:d,id:p,executionId:s,type:o}=e.params;let c;o===m.ReportType.REPORT&&(c=r.reportingService),o===m.ReportType.DASHBOARD&&(c=r.dashboardService);const u=await c.cancelAsyncRequest(a,d,p,s,n);u&&u.cancellationSucceeded&&await r.requestedReportService.updateStatus(s,i.id,m.RequestStatus.ABORTED)},N=async({req:e,res:t,services:r,next:a})=>{try{const{token:i,csrfToken:n,definitionsPath:d,dpdPathFromQuery:p,dprUser:s}=R.default.getValues(t),{reportId:o,type:c,id:u}=e.params,{definition:l}=t.locals,f=e.query.defaultsSaved,y={token:i,reportId:o,definitionPath:d,services:r};let D,g,x,H,h,A,E,w,I;c===m.ReportType.REPORT&&({name:D,reportName:g,description:x,fields:h,interactive:E}=await Y(l)),c===m.ReportType.DASHBOARD&&({name:D,reportName:g,description:x,sections:A,fields:h}=await X({...y,definition:l})),h&&({filtersData:w,defaultFilterValues:I}=await Z(e,t,h,E,r,s.id));const M={reportName:g,name:D,description:x,reportId:o,id:u,...p&&{definitionPath:d},csrfToken:n,template:H,sections:A,hasDefaults:I?.length,defaultsSaved:f,type:c};return{title:`Request ${c}`,filtersDescription:`Customise your ${c} using the filters below and submit your request.`,filtersData:w,reportData:M}}catch(i){return a(i),!1}},k=e=>Object.keys(e.body).filter(t=>t.includes("filters.")).filter(t=>!!e.body[t]).map(t=>({name:t,value:e.body[t]}));var ee={request:C,cancelRequest:Q,renderRequest:N,getFiltersFromReqBody:k,getDefintionByType:B};0&&(module.exports={cancelRequest,getDefintionByType,getFiltersFromReqBody,renderRequest,request,updateStore});
1
+ var _=Object.create;var g=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},T=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of j(t))!L.call(e,i)&&i!==r&&g(e,i,{get:()=>t[i],enumerable:!(a=$(t,i))||a.enumerable});return e};var h=(e,t,r)=>(r=e!=null?_(J(e)):{},T(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),G=e=>T(g({},"__esModule",{value:!0}),e);var te={};z(te,{cancelRequest:()=>C,default:()=>ee,getDefintionByType:()=>Q,getFiltersFromReqBody:()=>k,renderRequest:()=>N,request:()=>B,updateStore:()=>O});module.exports=G(te);var x=h(require("../../../../components/_async/async-filters-form/utils")),R=h(require("../../../../utils/localsHelper")),U=h(require("../../../../components/_filters/utils")),b=require("../../../../utils/reportStoreHelper"),q=h(require("../../../../utils/UserStoreItemBuilder")),m=require("../../../../types/UserReports"),P=h(require("../../../../utils/Personalisation/personalisationUtils")),V=require("../../../../components/_filters/filtersTypeEnum");const O=async({req:e,res:t,services:r,queryData:a,executionData:i,childExecutionData:o})=>{const{search:p,id:n,type:s}=e.body,{dprUser:d,definitionsPath:c,dpdPathFromQuery:l}=R.default.getValues(t);await(0,b.removeDuplicates)({storeService:r.requestedReportService,userId:d.id,id:n,search:p}),await(0,b.removeDuplicates)({storeService:r.recentlyViewedService,userId:d.id,id:n,search:p});const u=e.body,y={type:u.type,reportId:u.reportId,reportName:u.reportName,description:u.description,id:u.id,name:u.name};let f;switch(s){case m.ReportType.REPORT:f=new q.default(y,u).addExecutionData(i).addChildExecutionData(o).addFilters(a?.filterData).addSortData(a?.sortData).addDefinitionsPath(c,l).addRequestUrls(e).addQuery(a).addStatus(m.RequestStatus.SUBMITTED).addTimestamp().build();break;case m.ReportType.DASHBOARD:{f=new q.default(y,u).addExecutionData(i).addChildExecutionData(o).addFilters(a?.filterData).addDefinitionsPath(c,l).addRequestUrls(e).addQuery(a).addStatus(m.RequestStatus.SUBMITTED).addTimestamp().addMetrics(JSON.parse(e.body.sections)).build();break}default:break}await r.requestedReportService.addReport(d.id,f)};async function K(e,t,r,a,i,o){return Promise.all(e.map(p=>t.requestAsyncReport(r,a,p.id,{...i.query,dataProductDefinitionsPath:o}).then(n=>{const{executionId:s,tableId:d}=n;return{executionId:s,tableId:d,variantId:p.id}})))}const W=async({req:e,res:t,token:r,dashboardService:a,reportingService:i})=>{const{definitionsPath:o,dpdPathFromQuery:p}=R.default.getValues(t),{reportId:n,id:s,type:d}=e.body;let c,l,u,y,f,D=[];d===m.ReportType.REPORT&&(f=await i.getDefinition(r,n,s,o),c=f?f.variant.specification?.fields:[],l=x.default.setQueryFromFilters(e,c),{executionId:u,tableId:y}=await i.requestAsyncReport(r,n,s,{...l.query,dataProductDefinitionsPath:o}),D=f.variant.childVariants??[]),d===m.ReportType.DASHBOARD&&(f=await a.getDefinition(r,n,s,o),c=f?f.filterFields:[],l=x.default.setQueryFromFilters(e,c),{executionId:u,tableId:y}=await a.requestAsyncDashboard(r,n,s,{...l.query,dataProductDefinitionsPath:o}));const S=await K(D,i,r,n,l,o);return{executionData:{executionId:u,tableId:y,...p&&{dataProductDefinitionsPath:o}},childExecutionData:S,queryData:l}},X=async({token:e,reportId:t,definitionPath:r,services:a,definition:i})=>{const n=(await a.reportingService.getDefinitions(e,r)).find(u=>u.id===t).name,{name:s,description:d,sections:c,filterFields:l}=i;return{reportName:n,name:s,description:d,sections:c||[],fields:l}},Y=async e=>({definition:e,reportName:e.name,name:e.variant.name,description:e.variant.description||e.description,template:e.variant.specification,fields:e?.variant?.specification?.fields,interactive:e?.variant?.interactive}),Q=async(e,t,r,a)=>{const{token:i,definitionsPath:o}=R.default.getValues(t),{reportId:p,id:n,variantId:s,type:d}=e.params;return await(d===m.ReportType.REPORT?a.reportingService:a.dashboardService).getDefinition(i,p,s||n,o)},Z=async(e,t,r,a,i,o)=>{const{reportId:p,id:n}=e.params;let s=await x.default.renderFilters(r,a);s.filters=P.default.setUserContextDefaults(t,s.filters);const d=await i.defaultFilterValuesService.get(o,p,n,V.FiltersType.REQUEST);return d&&(s=P.default.setFilterValuesFromSavedDefaults(s.filters,s.sortBy,d)),s.filters=U.default.setFilterValuesFromRequest(s.filters,e),{filtersData:s,defaultFilterValues:d}},B=async({req:e,res:t,services:r})=>{const{token:a}=R.default.getValues(t),i={req:e,res:t,token:a},{executionData:o,queryData:p,childExecutionData:n}=await W({...i,dashboardService:r.dashboardService,reportingService:r.reportingService});return o&&await O({req:e,res:t,services:r,queryData:p,executionData:o,childExecutionData:n}),o},C=async({req:e,res:t,services:r})=>{const{token:a,dprUser:i,definitionsPath:o}=R.default.getValues(t),{reportId:p,id:n,executionId:s,type:d}=e.params;let c;d===m.ReportType.REPORT&&(c=r.reportingService),d===m.ReportType.DASHBOARD&&(c=r.dashboardService);const l=await c.cancelAsyncRequest(a,p,n,s,o);l&&l.cancellationSucceeded&&await r.requestedReportService.updateStatus(s,i.id,m.RequestStatus.ABORTED)},N=async({req:e,res:t,services:r,next:a})=>{try{const{token:i,csrfToken:o,definitionsPath:p,dpdPathFromQuery:n,dprUser:s}=R.default.getValues(t),{reportId:d,type:c,id:l}=e.params,{definition:u}=t.locals,y=e.query.defaultsSaved,f={token:i,reportId:d,definitionPath:p,services:r};let D,S,v,H,F,A,E,w,I;c===m.ReportType.REPORT&&({name:D,reportName:S,description:v,fields:F,interactive:E}=await Y(u)),c===m.ReportType.DASHBOARD&&({name:D,reportName:S,description:v,sections:A,fields:F}=await X({...f,definition:u})),F&&({filtersData:w,defaultFilterValues:I}=await Z(e,t,F,E,r,s.id));const M={reportName:S,name:D,description:v,reportId:d,id:l,...n&&{definitionPath:p},csrfToken:o,template:H,sections:A,hasDefaults:I?.length,defaultsSaved:y,type:c};return{title:`Request ${c}`,filtersDescription:`Customise your ${c} using the filters below and submit your request.`,filtersData:w,reportData:M}}catch(i){return a(i),!1}},k=e=>Object.keys(e.body).filter(t=>t.includes("filters.")).filter(t=>!!e.body[t]).map(t=>({name:t,value:e.body[t]}));var ee={request:B,cancelRequest:C,renderRequest:N,getFiltersFromReqBody:k,getDefintionByType:Q};0&&(module.exports={cancelRequest,getDefintionByType,getFiltersFromReqBody,renderRequest,request,updateStore});
2
2
  //# sourceMappingURL=utils.js.map