@gen3/frontend 0.10.97 → 0.10.98
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/dist/cjs/index.js +8894 -8123
- package/dist/cjs/index.js.map +1 -1
- package/dist/dts/components/Login/LoginPanel.js +0 -1
- package/dist/dts/components/Login/LoginPanel.js.map +1 -1
- package/dist/dts/components/SegmentedControl.d.ts +8 -0
- package/dist/dts/components/SegmentedControl.d.ts.map +1 -0
- package/dist/dts/components/SegmentedControl.js +23 -0
- package/dist/dts/components/SegmentedControl.js.map +1 -0
- package/dist/dts/components/charts/CollapsableCharts.d.ts +9 -0
- package/dist/dts/components/charts/CollapsableCharts.d.ts.map +1 -0
- package/dist/dts/components/charts/CollapsableCharts.js +24 -0
- package/dist/dts/components/charts/CollapsableCharts.js.map +1 -0
- package/dist/dts/components/facets/EnumFacet.js +2 -2
- package/dist/dts/components/facets/EnumFacet.js.map +1 -1
- package/dist/dts/components/facets/ExactValueFacet.d.ts.map +1 -1
- package/dist/dts/components/facets/ExactValueFacet.js +3 -3
- package/dist/dts/components/facets/ExactValueFacet.js.map +1 -1
- package/dist/dts/components/facets/FacetSelectionModal.d.ts +22 -0
- package/dist/dts/components/facets/FacetSelectionModal.d.ts.map +1 -0
- package/dist/dts/components/facets/FacetSelectionModal.js +77 -0
- package/dist/dts/components/facets/FacetSelectionModal.js.map +1 -0
- package/dist/dts/components/facets/FacetTabs.d.ts +38 -0
- package/dist/dts/components/facets/FacetTabs.d.ts.map +1 -0
- package/dist/dts/components/facets/FacetTabs.js +166 -0
- package/dist/dts/components/facets/FacetTabs.js.map +1 -0
- package/dist/dts/components/facets/MultiSelectValueFacet.d.ts.map +1 -1
- package/dist/dts/components/facets/MultiSelectValueFacet.js +3 -3
- package/dist/dts/components/facets/MultiSelectValueFacet.js.map +1 -1
- package/dist/dts/components/facets/NumericRangeFacet/DaysOrYears.d.ts +5 -0
- package/dist/dts/components/facets/NumericRangeFacet/DaysOrYears.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/DaysOrYears.js +29 -0
- package/dist/dts/components/facets/NumericRangeFacet/DaysOrYears.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/FromTo.d.ts +32 -0
- package/dist/dts/components/facets/NumericRangeFacet/FromTo.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/FromTo.js +168 -0
- package/dist/dts/components/facets/NumericRangeFacet/FromTo.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/NumericRangePanel.d.ts +5 -0
- package/dist/dts/components/facets/NumericRangeFacet/NumericRangePanel.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/NumericRangePanel.js +30 -0
- package/dist/dts/components/facets/NumericRangeFacet/NumericRangePanel.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/PercentRange.d.ts +5 -0
- package/dist/dts/components/facets/NumericRangeFacet/PercentRange.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/PercentRange.js +11 -0
- package/dist/dts/components/facets/NumericRangeFacet/PercentRange.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeInputWithPrefixedRanges.d.ts +12 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeInputWithPrefixedRanges.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeInputWithPrefixedRanges.js +113 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeInputWithPrefixedRanges.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeValueSelector.d.ts +26 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeValueSelector.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeValueSelector.js +63 -0
- package/dist/dts/components/facets/NumericRangeFacet/RangeValueSelector.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/Year.d.ts +5 -0
- package/dist/dts/components/facets/NumericRangeFacet/Year.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/Year.js +23 -0
- package/dist/dts/components/facets/NumericRangeFacet/Year.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/Years.d.ts +5 -0
- package/dist/dts/components/facets/NumericRangeFacet/Years.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/Years.js +24 -0
- package/dist/dts/components/facets/NumericRangeFacet/Years.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/index.d.ts +19 -0
- package/dist/dts/components/facets/NumericRangeFacet/index.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/index.js +65 -0
- package/dist/dts/components/facets/NumericRangeFacet/index.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/types.d.ts +27 -0
- package/dist/dts/components/facets/NumericRangeFacet/types.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/types.js +2 -0
- package/dist/dts/components/facets/NumericRangeFacet/types.js.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/utils.d.ts +52 -0
- package/dist/dts/components/facets/NumericRangeFacet/utils.d.ts.map +1 -0
- package/dist/dts/components/facets/NumericRangeFacet/utils.js +288 -0
- package/dist/dts/components/facets/NumericRangeFacet/utils.js.map +1 -0
- package/dist/dts/components/facets/RangeFacet.d.ts +1 -6
- package/dist/dts/components/facets/RangeFacet.d.ts.map +1 -1
- package/dist/dts/components/facets/RangeFacet.js +3 -3
- package/dist/dts/components/facets/RangeFacet.js.map +1 -1
- package/dist/dts/components/facets/constants.d.ts +1 -0
- package/dist/dts/components/facets/constants.d.ts.map +1 -1
- package/dist/dts/components/facets/constants.js +1 -0
- package/dist/dts/components/facets/constants.js.map +1 -1
- package/dist/dts/components/facets/createFacetCard.d.ts +16 -2
- package/dist/dts/components/facets/createFacetCard.d.ts.map +1 -1
- package/dist/dts/components/facets/createFacetCard.js +13 -10
- package/dist/dts/components/facets/createFacetCard.js.map +1 -1
- package/dist/dts/components/facets/createFacetCards.d.ts +10 -0
- package/dist/dts/components/facets/createFacetCards.d.ts.map +1 -0
- package/dist/dts/components/facets/createFacetCards.js +19 -0
- package/dist/dts/components/facets/createFacetCards.js.map +1 -0
- package/dist/dts/components/facets/hooks.d.ts +1 -0
- package/dist/dts/components/facets/hooks.d.ts.map +1 -1
- package/dist/dts/components/facets/hooks.js +10 -1
- package/dist/dts/components/facets/hooks.js.map +1 -1
- package/dist/dts/components/facets/index.d.ts +11 -1
- package/dist/dts/components/facets/index.d.ts.map +1 -1
- package/dist/dts/components/facets/index.js +11 -1
- package/dist/dts/components/facets/index.js.map +1 -1
- package/dist/dts/components/facets/types.d.ts +97 -3
- package/dist/dts/components/facets/types.d.ts.map +1 -1
- package/dist/dts/components/facets/types.js.map +1 -1
- package/dist/dts/features/Analysis/AnalysisCardCompact.stories.d.ts +6 -6
- package/dist/dts/features/CohortBuilder/CohortPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/CohortPanel.js +6 -2
- package/dist/dts/features/CohortBuilder/CohortPanel.js.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.js +0 -4
- package/dist/dts/features/CohortBuilder/ExplorerTable/ArrayCellRenderer.js.map +1 -1
- package/dist/dts/features/CohortBuilder/FiltersPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/FiltersPanel.js +9 -1
- package/dist/dts/features/CohortBuilder/FiltersPanel.js.map +1 -1
- package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.d.ts +16 -0
- package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.d.ts.map +1 -0
- package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.js +185 -0
- package/dist/dts/features/CohortBuilder/TabbedCohortBuilder.js.map +1 -0
- package/dist/dts/features/CohortBuilder/index.d.ts +3 -2
- package/dist/dts/features/CohortBuilder/index.d.ts.map +1 -1
- package/dist/dts/features/CohortBuilder/index.js +3 -2
- package/dist/dts/features/CohortBuilder/index.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.js +5 -1
- package/dist/dts/features/CohortDiscovery/ChartsAndFacetsPanel.js.map +1 -1
- package/dist/dts/features/CohortDiscovery/IndexPanel.d.ts.map +1 -1
- package/dist/dts/features/CohortDiscovery/IndexPanel.js +5 -4
- package/dist/dts/features/CohortDiscovery/IndexPanel.js.map +1 -1
- package/dist/dts/features/Discovery/Charts/CollapsableChartsPanel.d.ts +9 -0
- package/dist/dts/features/Discovery/Charts/CollapsableChartsPanel.d.ts.map +1 -0
- package/dist/dts/features/Discovery/Charts/CollapsableChartsPanel.js +24 -0
- package/dist/dts/features/Discovery/Charts/CollapsableChartsPanel.js.map +1 -0
- package/dist/dts/features/Navigation/Header.js +1 -1
- package/dist/dts/features/Navigation/Header.js.map +1 -1
- package/dist/dts/index.d.ts +6 -3
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/index.js +5 -2
- package/dist/dts/index.js.map +1 -1
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.d.ts +4 -0
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.d.ts.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js +24 -0
- package/dist/dts/pages/TabbedCohortBuilder/TabbedCohortBuilderPage.js.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/data.d.ts +4 -0
- package/dist/dts/pages/TabbedCohortBuilder/data.d.ts.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/data.js +81 -0
- package/dist/dts/pages/TabbedCohortBuilder/data.js.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/index.d.ts +3 -0
- package/dist/dts/pages/TabbedCohortBuilder/index.d.ts.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/index.js +3 -0
- package/dist/dts/pages/TabbedCohortBuilder/index.js.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/types.d.ts +6 -0
- package/dist/dts/pages/TabbedCohortBuilder/types.d.ts.map +1 -0
- package/dist/dts/pages/TabbedCohortBuilder/types.js +2 -0
- package/dist/dts/pages/TabbedCohortBuilder/types.js.map +1 -0
- package/dist/dts/types/icons.d.ts +4 -2
- package/dist/dts/types/icons.d.ts.map +1 -1
- package/dist/dts/types/icons.js +4 -2
- package/dist/dts/types/icons.js.map +1 -1
- package/dist/dts/utils/useScrollToHash.d.ts +8 -0
- package/dist/dts/utils/useScrollToHash.d.ts.map +1 -0
- package/dist/dts/utils/useScrollToHash.js +25 -0
- package/dist/dts/utils/useScrollToHash.js.map +1 -0
- package/dist/esm/index.js +8831 -8099
- package/dist/esm/index.js.map +1 -1
- package/dist/index.d.ts +684 -232
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Radio } from '@mantine/core';
|
|
4
|
+
import FacetSortPanel from '../FacetSortPanel';
|
|
5
|
+
import { buildRangeOperator } from './utils';
|
|
6
|
+
/**
|
|
7
|
+
* Create a list of radio buttons where each line
|
|
8
|
+
* represents bucket for a range \> "from" \<= "to"
|
|
9
|
+
* @param field - facet managed by this component
|
|
10
|
+
* @param valueLabel - string representing the datatype of values (e.g. "Cases")
|
|
11
|
+
* @param selected - which range, if any, is selected
|
|
12
|
+
* @param setSelected - function to handle selected range
|
|
13
|
+
* @param rangeLabelsAndValues - list of range keys, labels and values
|
|
14
|
+
* @param itemsToShow - number of ranges to render
|
|
15
|
+
* @param useUpdateFacetFilters - hook to update facet filters with new values
|
|
16
|
+
*/
|
|
17
|
+
var RangeValueSelector = function (_a) {
|
|
18
|
+
var field = _a.field, valueLabel = _a.valueLabel, selected = _a.selected, setSelected = _a.setSelected, rangeLabelsAndValues = _a.rangeLabelsAndValues, itemsToShow = _a.itemsToShow, useUpdateFacetFilters = _a.useUpdateFacetFilters;
|
|
19
|
+
var updateFilters = useUpdateFacetFilters();
|
|
20
|
+
// toggle to handle sorting by value vs. label
|
|
21
|
+
var _b = useState({
|
|
22
|
+
type: 'alpha',
|
|
23
|
+
direction: 'dsc',
|
|
24
|
+
}), sortType = _b[0], setSortType = _b[1];
|
|
25
|
+
// process when range is selected
|
|
26
|
+
var handleSelection = function (rangeKey) {
|
|
27
|
+
var data = {
|
|
28
|
+
from: rangeLabelsAndValues[rangeKey].from,
|
|
29
|
+
to: rangeLabelsAndValues[rangeKey].to,
|
|
30
|
+
fromOp: '>=',
|
|
31
|
+
toOp: '<',
|
|
32
|
+
};
|
|
33
|
+
var rangeFilters = buildRangeOperator(field, data);
|
|
34
|
+
if (rangeFilters) {
|
|
35
|
+
updateFilters(field, rangeFilters);
|
|
36
|
+
}
|
|
37
|
+
setSelected(rangeKey);
|
|
38
|
+
};
|
|
39
|
+
if (rangeLabelsAndValues === undefined)
|
|
40
|
+
return null;
|
|
41
|
+
return (_jsxs("div", { className: "flex flex-col px-1", children: [Object.keys(rangeLabelsAndValues).length > 1 ? (_jsx(_Fragment, { children: valueLabel && (_jsx(FacetSortPanel, { sortType: sortType, valueLabel: valueLabel, setSort: setSortType, field: field })) })) : null, _jsxs("fieldset", { className: "mt-1", children: [_jsx("legend", { className: "sr-only", children: "Numeric range filters" }), Object.keys(rangeLabelsAndValues)
|
|
42
|
+
.slice(0, itemsToShow)
|
|
43
|
+
.sort(sortType.type === 'value'
|
|
44
|
+
? function (a, b) {
|
|
45
|
+
return sortType.direction === 'dsc'
|
|
46
|
+
? (rangeLabelsAndValues[b].value || 0) -
|
|
47
|
+
(rangeLabelsAndValues[a].value || 0)
|
|
48
|
+
: (rangeLabelsAndValues[a].value || 0) -
|
|
49
|
+
(rangeLabelsAndValues[b].value || 0);
|
|
50
|
+
}
|
|
51
|
+
: function (a, b) {
|
|
52
|
+
return sortType.direction === 'dsc'
|
|
53
|
+
? rangeLabelsAndValues[b].from -
|
|
54
|
+
rangeLabelsAndValues[a].from
|
|
55
|
+
: rangeLabelsAndValues[a].from -
|
|
56
|
+
rangeLabelsAndValues[b].from;
|
|
57
|
+
})
|
|
58
|
+
.map(function (rangeKey, i) {
|
|
59
|
+
return (_jsxs("div", { className: "flex justify-start items-center gap-2 form-check mb-1 font-content text-sm", children: [_jsx(Radio, { id: "".concat(field, "_").concat(rangeKey, "_").concat(i), name: "".concat(field, "_range_selection"), "aria-label": rangeLabelsAndValues[rangeKey].valueLabel, value: rangeKey, checked: rangeKey === selected, color: "accent", onChange: function () { return handleSelection(rangeKey); }, "data-testid": "checkbox-".concat(rangeLabelsAndValues[rangeKey].label) }), _jsx("span", { children: rangeLabelsAndValues[rangeKey].label }), _jsx("span", { "data-testid": "text-".concat(rangeLabelsAndValues[rangeKey].label), className: "ml-auto", children: rangeLabelsAndValues[rangeKey].valueLabel })] }, "".concat(field, "_").concat(rangeKey)));
|
|
60
|
+
})] })] }));
|
|
61
|
+
};
|
|
62
|
+
export default RangeValueSelector;
|
|
63
|
+
//# sourceMappingURL=RangeValueSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangeValueSelector.js","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/RangeValueSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Year.d.ts","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/Year.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG5C,QAAA,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgCrC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import RangeInputWithPrefixedRanges from "./RangeInputWithPrefixedRanges";
|
|
14
|
+
// Calendar Year
|
|
15
|
+
var Year = function (_a) {
|
|
16
|
+
var field = _a.field, hooks = _a.hooks, valueLabel = _a.valueLabel, clearValues = _a.clearValues, _b = _a.minimum, minimum = _b === void 0 ? undefined : _b, _c = _a.maximum, maximum = _c === void 0 ? undefined : _c, isFacetView = _a.isFacetView, queryOptions = _a.queryOptions, Chart = _a.Chart;
|
|
17
|
+
var adjMinimum = minimum != undefined ? minimum : 1900;
|
|
18
|
+
var adjMaximum = maximum != undefined ? maximum : 2050;
|
|
19
|
+
var numBuckets = Math.round((adjMaximum - adjMinimum) / 10);
|
|
20
|
+
return (_jsx("div", { className: "flex flex-col w-100 space-y-2 px-2 mt-1 ", children: _jsx(RangeInputWithPrefixedRanges, { hooks: __assign({}, hooks), units: "year", valueLabel: valueLabel, minimum: adjMinimum, maximum: adjMaximum, numBuckets: numBuckets, field: field, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart }) }));
|
|
21
|
+
};
|
|
22
|
+
export default Year;
|
|
23
|
+
//# sourceMappingURL=Year.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Year.js","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/Year.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,4BAA4B,MAAM,gCAAgC,CAAC;AAG1E,gBAAgB;AAChB,IAAM,IAAI,GAAgC,UAAC,EAU1C;QATC,KAAK,WAAA,EACL,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,WAAW,iBAAA,EACX,eAAmB,EAAnB,OAAO,mBAAG,SAAS,KAAA,EACnB,eAAmB,EAAnB,OAAO,mBAAG,SAAS,KAAA,EACnB,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,KAAK,WAAA;IAEL,IAAM,UAAU,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAM,UAAU,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9D,OAAO,CACL,cAAK,SAAS,EAAC,0CAA0C,YACvD,KAAC,4BAA4B,IAC3B,KAAK,eAAO,KAAK,GACjB,KAAK,EAAC,MAAM,EACZ,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,GACZ,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Years.d.ts","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/Years.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAmCtC,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
import { getLowerAgeYears } from './utils';
|
|
14
|
+
import RangeInputWithPrefixedRanges from './RangeInputWithPrefixedRanges';
|
|
15
|
+
var Years = function (_a) {
|
|
16
|
+
var field = _a.field, valueLabel = _a.valueLabel, rangeDatatype = _a.rangeDatatype, hooks = _a.hooks, clearValues = _a.clearValues, _b = _a.minimum, minimum = _b === void 0 ? undefined : _b, _c = _a.maximum, maximum = _c === void 0 ? undefined : _c, isFacetView = _a.isFacetView, queryOptions = _a.queryOptions, Chart = _a.Chart;
|
|
17
|
+
// minimum and maximum values if not undefined are in days so need to convert it to years
|
|
18
|
+
var adjMinimum = minimum != undefined ? getLowerAgeYears(minimum) : 0;
|
|
19
|
+
var adjMaximum = maximum != undefined ? getLowerAgeYears(maximum) : 89;
|
|
20
|
+
var numBuckets = Math.round((adjMaximum - adjMinimum) / 10);
|
|
21
|
+
return (_jsx("div", { className: "flex flex-col w-100 space-y-2 px-1 mt-1 ", children: _jsx(RangeInputWithPrefixedRanges, { valueLabel: valueLabel, hooks: __assign({}, hooks), rangeDatatype: rangeDatatype, units: "years", minimum: adjMinimum, maximum: adjMaximum, numBuckets: numBuckets, field: field, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart }) }));
|
|
22
|
+
};
|
|
23
|
+
export default Years;
|
|
24
|
+
//# sourceMappingURL=Years.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Years.js","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/Years.tsx"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,4BAA4B,MAAM,gCAAgC,CAAC;AAG1E,IAAM,KAAK,GAAgC,UAAC,EAWxB;QAVlB,KAAK,WAAA,EACL,UAAU,gBAAA,EACV,aAAa,mBAAA,EACb,KAAK,WAAA,EACL,WAAW,iBAAA,EACX,eAAmB,EAAnB,OAAO,mBAAG,SAAS,KAAA,EACnB,eAAmB,EAAnB,OAAO,mBAAG,SAAS,KAAA,EACnB,WAAW,iBAAA,EACX,YAAY,kBAAA,EACZ,KAAK,WAAA;IAEL,yFAAyF;IACzF,IAAM,UAAU,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAM,UAAU,GAAG,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;IAE9D,OAAO,CACL,cAAK,SAAS,EAAC,2CAA2C,YACxD,KAAC,4BAA4B,IAC3B,UAAU,EAAE,UAAU,EACtB,KAAK,eAAO,KAAK,GACjB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAC,OAAO,EACb,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,UAAU,EACnB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,GACZ,GACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NumericFacetCardProps } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* A component which manages a numeric range facet
|
|
5
|
+
* @param field - field for this facet
|
|
6
|
+
* @param hooks - hooks to manage facet
|
|
7
|
+
* @param rangeDatatype - the datatype of the range
|
|
8
|
+
* @param description - description of the facet
|
|
9
|
+
* @param valueLabel - string representing the datatype of values (e.g. "Cases")
|
|
10
|
+
* @param minimum - minimum value for the range
|
|
11
|
+
* @param maximum - maximum value for the range
|
|
12
|
+
* @param facetName - name of the facet
|
|
13
|
+
* @param dismissCallback - function to call when facet is dismissed
|
|
14
|
+
* @param queryOptions - info to pass back to data fetching hooks about this facet
|
|
15
|
+
* @param Chart - Component for rendering a Chart view of the data
|
|
16
|
+
*/
|
|
17
|
+
declare const NumericRangeFacet: React.FC<NumericFacetCardProps>;
|
|
18
|
+
export default NumericRangeFacet;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD;;;;;;;;;;;;;GAaG;AAEH,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA4JtD,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useEffect, useState } from 'react';
|
|
14
|
+
import DaysOrYears from './DaysOrYears';
|
|
15
|
+
import Year from './Year';
|
|
16
|
+
import Years from './Years';
|
|
17
|
+
import PercentRange from './PercentRange';
|
|
18
|
+
import NumericRangePanel from './NumericRangePanel';
|
|
19
|
+
import FacetControlsHeader from '../FacetControlsHeader';
|
|
20
|
+
var cardScrollMargin = '10px'; // TODO add support from GDC
|
|
21
|
+
/**
|
|
22
|
+
* A component which manages a numeric range facet
|
|
23
|
+
* @param field - field for this facet
|
|
24
|
+
* @param hooks - hooks to manage facet
|
|
25
|
+
* @param rangeDatatype - the datatype of the range
|
|
26
|
+
* @param description - description of the facet
|
|
27
|
+
* @param valueLabel - string representing the datatype of values (e.g. "Cases")
|
|
28
|
+
* @param minimum - minimum value for the range
|
|
29
|
+
* @param maximum - maximum value for the range
|
|
30
|
+
* @param facetName - name of the facet
|
|
31
|
+
* @param dismissCallback - function to call when facet is dismissed
|
|
32
|
+
* @param queryOptions - info to pass back to data fetching hooks about this facet
|
|
33
|
+
* @param Chart - Component for rendering a Chart view of the data
|
|
34
|
+
*/
|
|
35
|
+
var NumericRangeFacet = function (_a) {
|
|
36
|
+
var _b, _c;
|
|
37
|
+
var field = _a.field, hooks = _a.hooks, rangeDatatype = _a.rangeDatatype, description = _a.description, valueLabel = _a.valueLabel, _d = _a.minimum, minimum = _d === void 0 ? undefined : _d, _e = _a.maximum, maximum = _e === void 0 ? undefined : _e, facetName = _a.facetName, _f = _a.dismissCallback, dismissCallback = _f === void 0 ? undefined : _f, queryOptions = _a.queryOptions, Chart = _a.Chart;
|
|
38
|
+
var _g = useState(true), isFacetView = _g[0], setIsFacetView = _g[1];
|
|
39
|
+
var isFilterExpanded = (hooks === null || hooks === void 0 ? void 0 : hooks.useFilterExpanded) && hooks.useFilterExpanded(field);
|
|
40
|
+
var showFilters = isFilterExpanded === undefined || isFilterExpanded;
|
|
41
|
+
var hash = (_c = (_b = window === null || window === void 0 ? void 0 : window.location) === null || _b === void 0 ? void 0 : _b.hash.split('#')) === null || _c === void 0 ? void 0 : _c[1];
|
|
42
|
+
var cardSelected = hash !== undefined && hash === field;
|
|
43
|
+
var toggleFlip = function () {
|
|
44
|
+
setIsFacetView(!isFacetView);
|
|
45
|
+
};
|
|
46
|
+
var _h = useState(false), clearValues = _h[0], setClearValues = _h[1];
|
|
47
|
+
useEffect(function () {
|
|
48
|
+
if (clearValues) {
|
|
49
|
+
setClearValues(false);
|
|
50
|
+
}
|
|
51
|
+
}, [clearValues]);
|
|
52
|
+
return (_jsxs("div", { className: "flex flex-col mx-0 bg-base-max relative border-base-lighter border-1 rounded-md text-xs transition ".concat(cardSelected ? 'animate-border-highlight ' : ''), id: field, style: {
|
|
53
|
+
scrollMarginTop: cardScrollMargin,
|
|
54
|
+
}, children: [_jsx(FacetControlsHeader, { field: field, description: description, hooks: hooks, facetName: facetName, dismissCallback: dismissCallback, isFacetView: isFacetView, toggleFlip: toggleFlip, showFlip: rangeDatatype !== 'range' && Chart !== undefined }), _jsx("div", { className: showFilters ? 'h-full' : 'h-0 invisible', "aria-hidden": !showFilters, children: {
|
|
55
|
+
age: (_jsx(DaysOrYears, { valueLabel: valueLabel, field: field, rangeDatatype: rangeDatatype, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
56
|
+
age_in_years: (_jsx(Years, { valueLabel: valueLabel, field: field, rangeDatatype: rangeDatatype, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
57
|
+
year: (_jsx(Year, { valueLabel: valueLabel, field: field, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
58
|
+
years: (_jsx(Years, { valueLabel: valueLabel, field: field, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
59
|
+
days: (_jsx(DaysOrYears, { valueLabel: valueLabel, field: field, rangeDatatype: rangeDatatype, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
60
|
+
percent: (_jsx(PercentRange, { valueLabel: valueLabel, field: field, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions, Chart: Chart })),
|
|
61
|
+
range: (_jsx(NumericRangePanel, { valueLabel: valueLabel, field: field, hooks: __assign({}, hooks), minimum: minimum, maximum: maximum, clearValues: clearValues, isFacetView: isFacetView, queryOptions: queryOptions })),
|
|
62
|
+
}[rangeDatatype] })] }));
|
|
63
|
+
};
|
|
64
|
+
export default NumericRangeFacet;
|
|
65
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NumericFacetCardProps, QueryOptions } from '../types';
|
|
2
|
+
export type NumericFacetProps = Omit<NumericFacetCardProps, 'facetName'> & {
|
|
3
|
+
readonly rangeDatatype?: string;
|
|
4
|
+
readonly minimum: number | undefined;
|
|
5
|
+
readonly maximum: number | undefined;
|
|
6
|
+
readonly clearValues?: boolean;
|
|
7
|
+
readonly isFacetView: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Represent a range. Used to configure a row
|
|
11
|
+
* of a range list.
|
|
12
|
+
*/
|
|
13
|
+
export interface RangeBucketElement {
|
|
14
|
+
readonly from: number;
|
|
15
|
+
readonly to: number;
|
|
16
|
+
readonly key: string;
|
|
17
|
+
readonly label: string;
|
|
18
|
+
readonly valueLabel?: string;
|
|
19
|
+
readonly value?: number;
|
|
20
|
+
}
|
|
21
|
+
export type NumericUnits = 'days' | 'years' | 'percent' | 'year';
|
|
22
|
+
export interface NumericFromTo {
|
|
23
|
+
readonly from: number;
|
|
24
|
+
readonly to: number;
|
|
25
|
+
}
|
|
26
|
+
export type GetNumericRangeFacetDataFunction = (field: string, ranges: ReadonlyArray<NumericFromTo>, queryOptions?: QueryOptions) => number;
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,EAAE,WAAW,CAAC,GAAG;IACzE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,EACpC,YAAY,CAAC,EAAE,YAAY,KACxB,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { FromToRange, UpdateFacetFilterFunction, ClearFacetFunction, EnumOperandValue } from '../types';
|
|
2
|
+
import { Operation } from '@gen3/core';
|
|
3
|
+
import { RangeBucketElement, NumericUnits, NumericFromTo } from './types';
|
|
4
|
+
export declare const DEFAULT_VISIBLE_ITEMS = 6;
|
|
5
|
+
export declare const symmetricalRound: (x: number) => number;
|
|
6
|
+
export declare const getLowerAgeYears: (days: number) => number;
|
|
7
|
+
export declare const getLowerAgeFromYears: (years: number) => number;
|
|
8
|
+
export declare const buildRangeOperator: <T extends string | number>(field: string, rangeData: FromToRange<T>) => Operation | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Given an operation, determine if range is open or closed and extract
|
|
11
|
+
* the range values and operands as a NumericRange
|
|
12
|
+
* @param filter - operation to test
|
|
13
|
+
*/
|
|
14
|
+
export declare const extractRangeValues: <T extends string | number>(filter?: Operation) => FromToRange<T> | undefined;
|
|
15
|
+
export declare const updateFacetEnum: (fieldName: string, values: EnumOperandValue, updateFacetFilters: UpdateFacetFilterFunction, clearFilters: ClearFacetFunction) => void;
|
|
16
|
+
/**
|
|
17
|
+
* Builds a Dictionary like object contain the range and label for each "bucket" in the range
|
|
18
|
+
* @param numBuckets - number of buckets to create
|
|
19
|
+
* @param units - units such as days or percent
|
|
20
|
+
* @param minimum - start value of range
|
|
21
|
+
* @param conversion - if this is a conversion of a year value to days
|
|
22
|
+
*/
|
|
23
|
+
export declare const buildRangeBuckets: (numBuckets: number, units: NumericUnits, minimum: number, queryInYears: boolean) => [Record<string, RangeBucketElement>, ReadonlyArray<NumericFromTo>];
|
|
24
|
+
export declare const adjustYearsToDaysIfUnitsAreYears: (value: number, units: string, queryInYears: boolean) => number | undefined;
|
|
25
|
+
export declare const adjustDaysToYearsIfUnitsAreYears: (value: number, units: string, queryInYears: boolean) => number | undefined;
|
|
26
|
+
export declare const leapThenPair: (years: number, days: number) => number[];
|
|
27
|
+
export declare const ageInYearsAndDaysFromDays: (ageInDays: number) => number[];
|
|
28
|
+
/**
|
|
29
|
+
* Returns a formatted timestamp string based on the provided date or the current date.
|
|
30
|
+
*
|
|
31
|
+
* @param options - An object containing the following optional parameters:
|
|
32
|
+
* @param date - A Date object to format. If not provided, uses the current date.
|
|
33
|
+
* @param includeTimes - Boolean to include time in the output. Defaults to false.
|
|
34
|
+
* @returns A timestamp in the format 'YYYY-MM-DD' if includeTimes is false, or 'YYYY-MM-DD.HHMMSS' if true.
|
|
35
|
+
* If date is null it returns undefined
|
|
36
|
+
*
|
|
37
|
+
* Uses the Swedish ("sv-SE") locale for consistent formatting (YYYY-MM-DD HH:MM:SS).
|
|
38
|
+
* Explicitly sets the time zone to the system's local time zone.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getFormattedTimestamp(options?: {
|
|
41
|
+
date?: Date | null;
|
|
42
|
+
includeTimes?: boolean;
|
|
43
|
+
}): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* Given a range compute the key if possibly matches a predefined range
|
|
46
|
+
* otherwise classify as "custom"
|
|
47
|
+
* @param range - Range to classify
|
|
48
|
+
* @param precision - number of values after .
|
|
49
|
+
*/
|
|
50
|
+
export declare const classifyRangeType: (range?: FromToRange<number>, precision?: number) => string;
|
|
51
|
+
export declare const buildRangeLabelsAndValues: (bucketRanges: Record<string, any>, rangeData?: Record<string, string | number>, showZero?: boolean) => Record<string, RangeBucketElement>;
|
|
52
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/facets/NumericRangeFacet/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EAKV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG1E,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAGvC,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,MACS,CAAC;AAEvD,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MACT,CAAC;AACxC,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MACb,CAAC;AAEzC,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,EAC1D,OAAO,MAAM,EACb,WAAW,WAAW,CAAC,CAAC,CAAC,KACxB,SAAS,GAAG,SA2Bd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,MAAM,GAAG,MAAM,EAC1D,SAAS,SAAS,KACjB,WAAW,CAAC,CAAC,CAAC,GAAG,SAkCnB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,QAAQ,gBAAgB,EACxB,oBAAoB,yBAAyB,EAC7C,cAAc,kBAAkB,KAC/B,IAcF,CAAC;AAwFF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,YAAY,MAAM,EAClB,OAAO,YAAY,EACnB,SAAS,MAAM,EACf,cAAc,OAAO,KACpB,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAoCnE,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,OAAO,MAAM,EACb,OAAO,MAAM,EACb,cAAc,OAAO,KACpB,MAAM,GAAG,SAC6D,CAAC;AAE1E,eAAO,MAAM,gCAAgC,GAC3C,OAAO,MAAM,EACb,OAAO,MAAM,EACb,cAAc,OAAO,KACpB,MAAM,GAAG,SAEX,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,EAClB,CAAC;AAEhD,eAAO,MAAM,yBAAyB,GAAI,WAAW,MAAM,KAAG,MAAM,EAIjE,CAAC;AAGJ;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACnB,GACL,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,WAAW,CAAC,MAAM,CAAC,EAC3B,kBAAa,KACZ,MAYF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,kBAAe,uCAkBhB,CAAC"}
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
|
+
if (ar || !(i in from)) {
|
|
15
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
16
|
+
ar[i] = from[i];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
|
+
};
|
|
21
|
+
import { DAYS_IN_YEAR } from '../constants';
|
|
22
|
+
export var DEFAULT_VISIBLE_ITEMS = 6;
|
|
23
|
+
var RANGE_DECIMAL_PRECISION = 1;
|
|
24
|
+
export var symmetricalRound = function (x) {
|
|
25
|
+
return x < 0 ? Math.round(Math.abs(x)) * -1 : Math.round(x);
|
|
26
|
+
};
|
|
27
|
+
export var getLowerAgeYears = function (days) {
|
|
28
|
+
return symmetricalRound(days / DAYS_IN_YEAR);
|
|
29
|
+
};
|
|
30
|
+
export var getLowerAgeFromYears = function (years) {
|
|
31
|
+
return symmetricalRound(years * DAYS_IN_YEAR);
|
|
32
|
+
};
|
|
33
|
+
export var buildRangeOperator = function (field, rangeData) {
|
|
34
|
+
// couple of different cases
|
|
35
|
+
// * no from/to return undefined
|
|
36
|
+
if (rangeData.from === undefined && rangeData.to === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
var fromOperation = rangeData.from !== undefined && rangeData.fromOp !== undefined
|
|
39
|
+
? {
|
|
40
|
+
field: field,
|
|
41
|
+
operator: rangeData.fromOp,
|
|
42
|
+
operand: rangeData.from,
|
|
43
|
+
}
|
|
44
|
+
: undefined;
|
|
45
|
+
var toOperation = rangeData.to !== undefined && rangeData.toOp !== undefined
|
|
46
|
+
? {
|
|
47
|
+
field: field,
|
|
48
|
+
operator: rangeData.toOp,
|
|
49
|
+
operand: rangeData.to,
|
|
50
|
+
}
|
|
51
|
+
: undefined;
|
|
52
|
+
if (fromOperation && toOperation)
|
|
53
|
+
return { operator: 'and', operands: [fromOperation, toOperation] };
|
|
54
|
+
if (fromOperation)
|
|
55
|
+
return fromOperation;
|
|
56
|
+
return toOperation;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Given an operation, determine if range is open or closed and extract
|
|
60
|
+
* the range values and operands as a NumericRange
|
|
61
|
+
* @param filter - operation to test
|
|
62
|
+
*/
|
|
63
|
+
export var extractRangeValues = function (filter) {
|
|
64
|
+
if (filter !== undefined) {
|
|
65
|
+
switch (filter.operator) {
|
|
66
|
+
case '>':
|
|
67
|
+
case '>=':
|
|
68
|
+
return {
|
|
69
|
+
from: typeof filter.operand === 'number' ||
|
|
70
|
+
typeof filter.operand === 'string'
|
|
71
|
+
? filter.operand
|
|
72
|
+
: undefined,
|
|
73
|
+
fromOp: filter.operator,
|
|
74
|
+
};
|
|
75
|
+
case '<':
|
|
76
|
+
case '<=':
|
|
77
|
+
return {
|
|
78
|
+
to: typeof filter.operand === 'number' ||
|
|
79
|
+
typeof filter.operand === 'string'
|
|
80
|
+
? filter.operand
|
|
81
|
+
: undefined,
|
|
82
|
+
toOp: filter.operator,
|
|
83
|
+
};
|
|
84
|
+
case 'and': {
|
|
85
|
+
var a = extractRangeValues(filter.operands[0]);
|
|
86
|
+
var b = extractRangeValues(filter.operands[1]);
|
|
87
|
+
return __assign(__assign({}, a), b);
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
export var updateFacetEnum = function (fieldName, values, updateFacetFilters, clearFilters) {
|
|
98
|
+
if (values === undefined)
|
|
99
|
+
return;
|
|
100
|
+
if (values.length > 0) {
|
|
101
|
+
// TODO: Assuming Includes by default but this might change to Include|Excludes
|
|
102
|
+
updateFacetFilters(fieldName, {
|
|
103
|
+
operator: 'in',
|
|
104
|
+
field: fieldName,
|
|
105
|
+
operands: values,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// no values remove the filter
|
|
109
|
+
else {
|
|
110
|
+
clearFilters(fieldName);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* returns the range [from to] for a "bucket"
|
|
115
|
+
* @param x - current bucket index
|
|
116
|
+
* @param units - custom units for this range: "years" or "days"
|
|
117
|
+
* @param minimum - starting value of range must be in years
|
|
118
|
+
*/
|
|
119
|
+
var buildDayYearRangeBucket = function (x, units, minimum, queryInYears) {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
if (queryInYears === void 0) { queryInYears = false; }
|
|
122
|
+
var from = minimum + x * 10; // in years
|
|
123
|
+
var to = minimum + (x + 1) * 10;
|
|
124
|
+
var fromDays = symmetricalRound(from * DAYS_IN_YEAR);
|
|
125
|
+
var toDays = symmetricalRound(to * DAYS_IN_YEAR);
|
|
126
|
+
var fromLabel = (units === 'years' ? from : fromDays).toFixed(0);
|
|
127
|
+
var toLabel = (units === 'years' ? to : toDays).toFixed(0);
|
|
128
|
+
return {
|
|
129
|
+
from: queryInYears ? from : fromDays,
|
|
130
|
+
to: queryInYears ? to : toDays,
|
|
131
|
+
key: "".concat((queryInYears ? from : fromDays).toFixed(RANGE_DECIMAL_PRECISION), "-").concat((queryInYears ? to : toDays).toFixed(RANGE_DECIMAL_PRECISION)),
|
|
132
|
+
label: "\u2265 ".concat((_a = Number(fromLabel)) === null || _a === void 0 ? void 0 : _a.toLocaleString(), " to < ").concat((_b = Number(toLabel)) === null || _b === void 0 ? void 0 : _b.toLocaleString(), " ").concat(units),
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* returns 10 value range from to for a "bucket"
|
|
137
|
+
* @param x - current bucket index
|
|
138
|
+
* @param units - string to append to label
|
|
139
|
+
* @param minimum - staring value of range
|
|
140
|
+
* @param fractionDigits - number of values to the right of the decimal point
|
|
141
|
+
*/
|
|
142
|
+
var build10UnitRange = function (x, units, minimum) {
|
|
143
|
+
var from = minimum + x * 10;
|
|
144
|
+
var to = minimum + (x + 1) * 10;
|
|
145
|
+
return {
|
|
146
|
+
from: from,
|
|
147
|
+
to: to,
|
|
148
|
+
key: "".concat(from.toFixed(RANGE_DECIMAL_PRECISION), "-").concat(to.toFixed(RANGE_DECIMAL_PRECISION)),
|
|
149
|
+
label: "\u2265 ".concat(from, " to < ").concat(to, " ").concat(units),
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Builds a Dictionary like object contain the range and label for each "bucket" in the range
|
|
154
|
+
* @param numBuckets - number of buckets to create
|
|
155
|
+
* @param units - units such as days or percent
|
|
156
|
+
* @param minimum - start value of range
|
|
157
|
+
* @param rangeFunction - function to compute range boundaries
|
|
158
|
+
*/
|
|
159
|
+
var buildRanges = function (numBuckets, units, minimum, queryInYears, rangeFunction) {
|
|
160
|
+
// build the range for the useRangeFacet call
|
|
161
|
+
return __spreadArray([], Array(numBuckets), true).map(function (_x, i) {
|
|
162
|
+
return rangeFunction(i, units, minimum, queryInYears);
|
|
163
|
+
})
|
|
164
|
+
.reduce(function (r, x) {
|
|
165
|
+
r[x.key] = x;
|
|
166
|
+
return r;
|
|
167
|
+
}, {});
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Builds a Dictionary like object contain the range and label for each "bucket" in the range
|
|
171
|
+
* @param numBuckets - number of buckets to create
|
|
172
|
+
* @param units - units such as days or percent
|
|
173
|
+
* @param minimum - start value of range
|
|
174
|
+
* @param conversion - if this is a conversion of a year value to days
|
|
175
|
+
*/
|
|
176
|
+
export var buildRangeBuckets = function (numBuckets, units, minimum, queryInYears) {
|
|
177
|
+
var RangeBuilder = {
|
|
178
|
+
days: {
|
|
179
|
+
builder: buildDayYearRangeBucket,
|
|
180
|
+
label: 'days',
|
|
181
|
+
startRange: symmetricalRound(minimum / DAYS_IN_YEAR), // convert to years
|
|
182
|
+
},
|
|
183
|
+
years: {
|
|
184
|
+
builder: buildDayYearRangeBucket,
|
|
185
|
+
label: 'years',
|
|
186
|
+
startRange: symmetricalRound(minimum / DAYS_IN_YEAR), // convert to years
|
|
187
|
+
},
|
|
188
|
+
percent: {
|
|
189
|
+
builder: build10UnitRange,
|
|
190
|
+
label: '%',
|
|
191
|
+
startRange: minimum, // no conversion
|
|
192
|
+
},
|
|
193
|
+
year: {
|
|
194
|
+
builder: build10UnitRange,
|
|
195
|
+
label: '',
|
|
196
|
+
startRange: minimum, // no conversion
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
var bucketEntries = buildRanges(numBuckets, RangeBuilder[units].label, RangeBuilder[units].startRange, queryInYears, RangeBuilder[units].builder);
|
|
200
|
+
// build ranges for continuous range query
|
|
201
|
+
var r = Object.keys(bucketEntries).map(function (x) {
|
|
202
|
+
return { from: bucketEntries[x].from, to: bucketEntries[x].to };
|
|
203
|
+
});
|
|
204
|
+
return [bucketEntries, r];
|
|
205
|
+
};
|
|
206
|
+
export var adjustYearsToDaysIfUnitsAreYears = function (value, units, queryInYears) {
|
|
207
|
+
return units == 'years' && !queryInYears ? getLowerAgeFromYears(value) : value;
|
|
208
|
+
};
|
|
209
|
+
export var adjustDaysToYearsIfUnitsAreYears = function (value, units, queryInYears) {
|
|
210
|
+
return units === 'years' && !queryInYears ? getLowerAgeYears(value) : value;
|
|
211
|
+
};
|
|
212
|
+
export var leapThenPair = function (years, days) {
|
|
213
|
+
return days === 365 ? [years + 1, 0] : [years, days];
|
|
214
|
+
};
|
|
215
|
+
export var ageInYearsAndDaysFromDays = function (ageInDays) {
|
|
216
|
+
return leapThenPair(Math.floor(ageInDays / DAYS_IN_YEAR), Math.ceil(ageInDays % DAYS_IN_YEAR));
|
|
217
|
+
};
|
|
218
|
+
// https://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript
|
|
219
|
+
/**
|
|
220
|
+
* Returns a formatted timestamp string based on the provided date or the current date.
|
|
221
|
+
*
|
|
222
|
+
* @param options - An object containing the following optional parameters:
|
|
223
|
+
* @param date - A Date object to format. If not provided, uses the current date.
|
|
224
|
+
* @param includeTimes - Boolean to include time in the output. Defaults to false.
|
|
225
|
+
* @returns A timestamp in the format 'YYYY-MM-DD' if includeTimes is false, or 'YYYY-MM-DD.HHMMSS' if true.
|
|
226
|
+
* If date is null it returns undefined
|
|
227
|
+
*
|
|
228
|
+
* Uses the Swedish ("sv-SE") locale for consistent formatting (YYYY-MM-DD HH:MM:SS).
|
|
229
|
+
* Explicitly sets the time zone to the system's local time zone.
|
|
230
|
+
*/
|
|
231
|
+
export function getFormattedTimestamp(options) {
|
|
232
|
+
if (options === void 0) { options = {}; }
|
|
233
|
+
var _a = options.date, date = _a === void 0 ? new Date() : _a, _b = options.includeTimes, includeTimes = _b === void 0 ? false : _b;
|
|
234
|
+
if (date === null)
|
|
235
|
+
return undefined;
|
|
236
|
+
var formatOptions = {
|
|
237
|
+
year: 'numeric',
|
|
238
|
+
month: '2-digit',
|
|
239
|
+
day: '2-digit',
|
|
240
|
+
timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
241
|
+
};
|
|
242
|
+
if (includeTimes) {
|
|
243
|
+
Object.assign(formatOptions, {
|
|
244
|
+
hour: '2-digit',
|
|
245
|
+
minute: '2-digit',
|
|
246
|
+
second: '2-digit',
|
|
247
|
+
hour12: false,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
var formattedDate = date.toLocaleString('sv-SE', formatOptions);
|
|
251
|
+
if (includeTimes) {
|
|
252
|
+
return formattedDate.replace(' ', '.').replace(/[:]/g, '');
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
return formattedDate;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Given a range compute the key if possibly matches a predefined range
|
|
260
|
+
* otherwise classify as "custom"
|
|
261
|
+
* @param range - Range to classify
|
|
262
|
+
* @param precision - number of values after .
|
|
263
|
+
*/
|
|
264
|
+
export var classifyRangeType = function (range, precision) {
|
|
265
|
+
if (precision === void 0) { precision = 1; }
|
|
266
|
+
if (range === undefined)
|
|
267
|
+
return 'custom';
|
|
268
|
+
if (range.fromOp == '>=' &&
|
|
269
|
+
range.toOp == '<' &&
|
|
270
|
+
range.from !== undefined &&
|
|
271
|
+
range.to !== undefined)
|
|
272
|
+
// builds a range "key"
|
|
273
|
+
return "".concat(range.from.toFixed(precision), "-").concat(range.to.toFixed(precision));
|
|
274
|
+
return 'custom';
|
|
275
|
+
};
|
|
276
|
+
export var buildRangeLabelsAndValues = function (bucketRanges, rangeData, showZero) {
|
|
277
|
+
if (showZero === void 0) { showZero = true; }
|
|
278
|
+
return Object.keys(bucketRanges).reduce(function (b, x) {
|
|
279
|
+
var _a;
|
|
280
|
+
if (!showZero && rangeData && rangeData[x] == 0)
|
|
281
|
+
return b;
|
|
282
|
+
b[x] = __assign(__assign({}, bucketRanges[x]), { key: x, value: rangeData === null || rangeData === void 0 ? void 0 : rangeData[x], valueLabel: (rangeData === null || rangeData === void 0 ? void 0 : rangeData[x])
|
|
283
|
+
? "".concat((_a = rangeData[x]) === null || _a === void 0 ? void 0 : _a.toLocaleString())
|
|
284
|
+
: undefined });
|
|
285
|
+
return b;
|
|
286
|
+
}, {});
|
|
287
|
+
};
|
|
288
|
+
//# sourceMappingURL=utils.js.map
|