@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.
- package/dpr/all.mjs +2 -0
- package/dpr/all.scss +4 -0
- package/dpr/components/_catalogue/catalogue-list/utils.test.ts +1 -1
- package/dpr/components/_charts/chart/clientClass.mjs +4 -3
- package/dpr/components/_charts/chart/heatmap/Heatmap.js +2 -0
- package/dpr/components/_charts/chart/heatmap/Heatmap.js.map +7 -0
- package/dpr/components/_charts/chart/heatmap/Heatmap.ts +278 -0
- package/dpr/components/_charts/chart/heatmap/clientClass.mjs +175 -0
- package/dpr/components/_charts/chart/styles.scss +4 -0
- package/dpr/components/_charts/utils.js +1 -1
- package/dpr/components/_charts/utils.js.map +3 -3
- package/dpr/components/_charts/utils.test.ts +4 -1
- package/dpr/components/_charts/utils.ts +73 -27
- package/dpr/components/_dashboards/dashboard/types.js +1 -1
- package/dpr/components/_dashboards/dashboard/types.js.map +2 -2
- package/dpr/components/_dashboards/dashboard/types.ts +21 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js +1 -1
- package/dpr/components/_dashboards/dashboard-list/utils.js.map +3 -3
- package/dpr/components/_dashboards/dashboard-list/utils.test.ts +1 -0
- package/dpr/components/_dashboards/dashboard-list/utils.ts +5 -1
- package/dpr/components/_filters/types.d.js.map +1 -1
- package/dpr/components/_filters/types.d.ts +12 -8
- package/dpr/components/_filters/utils.js +1 -1
- package/dpr/components/_filters/utils.js.map +3 -3
- package/dpr/components/_filters/utils.ts +24 -2
- package/dpr/components/user-reports/utils.js +1 -1
- package/dpr/components/user-reports/utils.js.map +3 -3
- package/dpr/components/user-reports/utils.ts +13 -3
- package/dpr/data/dashboardClient.js +1 -1
- package/dpr/data/dashboardClient.js.map +2 -2
- package/dpr/data/dashboardClient.ts +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js +1 -1
- package/dpr/routes/journeys/request-report/filters/controller.js.map +3 -3
- package/dpr/routes/journeys/request-report/filters/controller.ts +6 -2
- package/dpr/routes/journeys/request-report/filters/utils.js +1 -1
- package/dpr/routes/journeys/request-report/filters/utils.js.map +2 -2
- package/dpr/routes/journeys/request-report/filters/utils.ts +9 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js +1 -1
- package/dpr/routes/journeys/view-report/async/dashboard/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/async/dashboard/utils.ts +12 -3
- package/dpr/routes/journeys/view-report/async/report/tests.cy.js +1 -1
- package/dpr/routes/journeys/view-report/async/report/tests.cy.js.map +2 -2
- package/dpr/routes/journeys/view-report/async/report/tests.cy.ts +44 -8
- package/dpr/routes/journeys/view-report/utils.js +1 -1
- package/dpr/routes/journeys/view-report/utils.js.map +3 -3
- package/dpr/routes/journeys/view-report/utils.ts +6 -1
- package/dpr/services/dashboardService.js +1 -1
- package/dpr/services/dashboardService.js.map +2 -2
- package/dpr/services/dashboardService.ts +1 -1
- package/dpr/types/Charts.js +1 -1
- package/dpr/types/Charts.js.map +1 -1
- package/dpr/types/Charts.ts +10 -3
- package/dpr/types/ExecutionData.d.js +1 -1
- package/dpr/types/ExecutionData.d.js.map +1 -1
- package/dpr/types/ExecutionData.d.ts +1 -0
- package/dpr/utils/DataTableBuilder/DataTableBuilder.js +1 -1
- package/dpr/utils/DataTableBuilder/DataTableBuilder.js.map +2 -2
- package/dpr/utils/DataTableBuilder/DataTableBuilder.ts +37 -19
- package/dpr/utils/DateMapper/DateMapper.js +1 -1
- package/dpr/utils/DateMapper/DateMapper.js.map +2 -2
- package/dpr/utils/DateMapper/DateMapper.ts +4 -0
- package/dpr/utils/UserStoreItemBuilder.js +1 -1
- package/dpr/utils/UserStoreItemBuilder.js.map +3 -3
- package/dpr/utils/UserStoreItemBuilder.ts +6 -4
- package/dpr/utils/requestStatusHelper.js +1 -1
- package/dpr/utils/requestStatusHelper.js.map +2 -2
- package/dpr/utils/requestStatusHelper.ts +1 -1
- 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": "6iBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,eAAAC,EAAA,6BAAAC,EAAA,2BAAAC,EAAA,+BAAAC,EAAA,uCAAAC,EAAA,+BAAAC,EAAA,oCAAAC,IAAA,eAAAC,EAAAV,
|
|
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", "
|
|
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
|
-
|
|
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
|
|
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": "6iBAAA,IAAAA,GAAA,GAAAC,EAAAD,GAAA,aAAAE,GAAA,SAAAC,EAAA,eAAAC,EAAA,sBAAAC,EAAA,wBAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAR,IACA,IAAAS,EAAkB,oBAGlBC,EAOO,mCAKPC,EAAiC,2CACjCC,EAAiC,iDACjCA,EAAyB,gCACzBC,EAAuD,yCACvDD,EAAiC,gCACjCA,EAAyC,6BACzCA,EAA8B,gCAC9BE,EAAyB,uCACzBC,EAAuB,gDACvBC,EAAiC,+CAEjC,MAAMC,EAAcC,GAAwD,CAC1E,MAAMC,EAAiC,KAAK,MAAM,KAAK,UAAUD,CAAU,CAAC,EAEtE,CACJ,YAAAE,EACA,QAAAC,EACA,YAAAC,EACA,KAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAAC,EACA,YAAAC,EACA,MAAAC,EACA,iBAAAC,EACA,OAAAC,EACA,UAAAC,EACA,WAAAC,EACA,2BAAAC,EACA,KAAMC,EACN,IAAAC,CACF,EAAIhB,EAEJ,IAAIiB,EAA6C,CAAC,EAC9CR,IACFQ,EAAUR,EAAM,SAElB,IAAIS,EAAwD,CAAC,EACzDR,IACFQ,EAAqBR,EAAiB,SAGxC,MAAMS,EAAOJ,GAAc,aAAW,OAEtC,MAAO,CACL,GAAId,EACJ,KAAMG,GAAQD,EACd,WAAAU,EACA,YAAAL,EACA,IAAK,MACL,QAAAS,EACA,mBAAAC,EACA,UAAAN,EACA,OAAAD,EACA,KAAAQ,EACA,GAAGjC,EAAkByB,EAAQX,CAAc,EAC3C,KAAM,CACJ,SAAAK,EACA,GAAIC,GAAaC,EACjB,YAAAN,EACA,QAAAC,EACA,OAAAS,EACA,KAAAQ,EACA,2BAAAL,EACA,WAAYE,EAAI,SAAS,SACzB,UAAWA,EAAI,QAAQ,QACzB,CACF,CACF,EAEMI,
|
|
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", "
|
|
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
|
|
370
|
-
const
|
|
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(
|
|
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:
|
|
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
|
|
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,
|
|
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
|
|
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
|
|
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,
|
|
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
|
|
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 =
|
|
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
|
|
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
|