@ltht-react/timeline 1.0.257 → 1.0.259

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.
@@ -1,216 +1,216 @@
1
- "use strict";
2
- var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
- return cooked;
5
- };
6
- var __assign = (this && this.__assign) || function () {
7
- __assign = Object.assign || function(t) {
8
- for (var s, i = 1, n = arguments.length; i < n; i++) {
9
- s = arguments[i];
10
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
- t[p] = s[p];
12
- }
13
- return t;
14
- };
15
- return __assign.apply(this, arguments);
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- var jsx_runtime_1 = require("react/jsx-runtime");
22
- var react_1 = require("react");
23
- var styled_1 = __importDefault(require("@emotion/styled"));
24
- var icon_1 = __importDefault(require("@ltht-react/icon"));
25
- var styles_1 = require("@ltht-react/styles");
26
- var types_1 = require("@ltht-react/types");
27
- var utils_1 = require("@ltht-react/utils");
28
- var hooks_1 = require("@ltht-react/hooks");
29
- var select_1 = __importDefault(require("@ltht-react/select"));
30
- var timeline_time_1 = __importDefault(require("../atoms/timeline-time"));
31
- var timeline_item_1 = __importDefault(require("../molecules/timeline-item"));
32
- var timeline_item_redacted_1 = __importDefault(require("../molecules/timeline-item-redacted"));
33
- var StyledTimeline = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n margin: -0.75rem;\n"], ["\n position: relative;\n margin: -0.75rem;\n"])));
34
- var StyledTimelineDayBody = styled_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background-color: white;\n position: relative;\n\n &:before {\n content: '';\n position: absolute;\n z-index: 1;\n height: ", ";\n left: calc(50% - 1px);\n border-width: 0 0 0 2px;\n border-color: ", ";\n border-style: solid;\n }\n"], ["\n background-color: white;\n position: relative;\n\n &:before {\n content: '';\n position: absolute;\n z-index: 1;\n height: ", ";\n left: calc(50% - 1px);\n border-width: 0 0 0 2px;\n border-color: ", ";\n border-style: solid;\n }\n"])), function (_a) {
35
- var isMobile = _a.isMobile;
36
- return (isMobile ? '0%' : '100%');
37
- }, styles_1.TEXT_COLOURS.INFO);
38
- var StyledTimelineDayHeader = styled_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n text-align: center;\n font-weight: bold;\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n text-align: center;\n font-weight: bold;\n"])), styles_1.BANNER_COLOURS.DEFAULT.BACKGROUND);
39
- var StyledTimelineDayItem = styled_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: inline-block;\n width: 100%;\n justify-content: center;\n padding: ", ";\n margin: ", ";\n"], ["\n display: inline-block;\n width: 100%;\n justify-content: center;\n padding: ", ";\n margin: ", ";\n"])), function (_a) {
40
- var isMobile = _a.isMobile;
41
- return (isMobile ? '' : '0 0.5rem');
42
- }, function (_a) {
43
- var isMobile = _a.isMobile;
44
- return (isMobile ? '0.5rem 0' : '1rem 0');
45
- });
46
- var StyledTimelineDayContent = styled_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n width: ", ";\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n"], ["\n width: ", ";\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n"])), function (_a) {
47
- var isMobile = _a.isMobile;
48
- return (isMobile ? '100%' : '49%');
49
- });
50
- var StyledTimelineDayLine = styled_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n width: 2%;\n vertical-align: top;\n margin-top: 0.125rem;\n display: inline-block;\n text-align: center;\n position: relative;\n height: 100%;\n"], ["\n width: 2%;\n vertical-align: top;\n margin-top: 0.125rem;\n display: inline-block;\n text-align: center;\n position: relative;\n height: 100%;\n"])));
51
- var StyledTimelineDayTimeLeft = styled_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: right;\n font-weight: bold;\n"], ["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: right;\n font-weight: bold;\n"])));
52
- var StyledTimelineDayTimeRight = styled_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: left;\n font-weight: bold;\n"], ["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: left;\n font-weight: bold;\n"])));
53
- var StyledOuterCircle = styled_1.default(icon_1.default)(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: absolute;\n z-index: 1;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: ", ";\n font-size: 0.75rem;\n"], ["\n position: absolute;\n z-index: 1;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: ", ";\n font-size: 0.75rem;\n"])), styles_1.TEXT_COLOURS.INFO);
54
- var StyledInnerCircle = styled_1.default(icon_1.default)(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n position: absolute;\n z-index: 2;\n top: 0.125rem;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: white;\n font-size: 0.5rem;\n"], ["\n position: absolute;\n z-index: 2;\n top: 0.125rem;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: white;\n font-size: 0.5rem;\n"])));
55
- var StyledFilters = styled_1.default.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n position: sticky;\n margin-bottom: 1rem;\n top: 0;\n background-color: ", ";\n z-index: 1000;\n padding: 0.5em;\n display: block;\n\n ", " {\n display: flex;\n padding: 1em;\n }\n"], ["\n position: sticky;\n margin-bottom: 1rem;\n top: 0;\n background-color: ", ";\n z-index: 1000;\n padding: 0.5em;\n display: block;\n\n ", " {\n display: flex;\n padding: 1em;\n }\n"])), styles_1.BANNER_COLOURS.DEFAULT.BACKGROUND, styles_1.TABLET_MINIMUM_MEDIA_QUERY);
56
- var StyledFilter = styled_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n padding: 0.5rem;\n\n ", " {\n max-width: 200px;\n }\n\n > select {\n min-width: 100px;\n flex: 2;\n\n ", " {\n flex: unset;\n }\n }\n\n > label {\n flex: 1;\n white-space: pre;\n padding-right: 0.5em;\n\n ", " {\n flex: unset;\n }\n }\n"], ["\n display: flex;\n align-items: center;\n padding: 0.5rem;\n\n ", " {\n max-width: 200px;\n }\n\n > select {\n min-width: 100px;\n flex: 2;\n\n ", " {\n flex: unset;\n }\n }\n\n > label {\n flex: 1;\n white-space: pre;\n padding-right: 0.5em;\n\n ", " {\n flex: unset;\n }\n }\n"])), styles_1.TABLET_MINIMUM_MEDIA_QUERY, styles_1.TABLET_MINIMUM_MEDIA_QUERY, styles_1.TABLET_MINIMUM_MEDIA_QUERY);
57
- var Timeline = function (_a) {
58
- var timelineItems = _a.timelineItems, domainResourceType = _a.domainResourceType, filters = _a.filters, onFilterChange = _a.onFilterChange;
59
- var width = hooks_1.useWindowSize().width;
60
- var isMobile = utils_1.isMobileView(width);
61
- var timelineDates = {};
62
- var _b = react_1.useState({}), activeFilters = _b[0], setActiveFilters = _b[1];
63
- react_1.useEffect(function () { return setActiveFilters([]); }, [filters]);
64
- timelineItems === null || timelineItems === void 0 ? void 0 : timelineItems.forEach(function (timelineItem) {
65
- var _a, _b, _c, _d, _e, _f, _g;
66
- if (!(timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource)) {
67
- return;
68
- }
69
- var date = '';
70
- var displayDate = '';
71
- switch (domainResourceType) {
72
- case types_1.TimelineDomainResourceType.QuestionnaireResponse: {
73
- var qr = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
74
- if (!((_a = qr.authored) === null || _a === void 0 ? void 0 : _a.value)) {
75
- return;
76
- }
77
- date = utils_1.formatDate(new Date((_b = qr.authored) === null || _b === void 0 ? void 0 : _b.value));
78
- displayDate = utils_1.formatDateExplicitMonth(new Date((_c = qr.authored) === null || _c === void 0 ? void 0 : _c.value));
79
- break;
80
- }
81
- case types_1.TimelineDomainResourceType.DocumentReference: {
82
- var docRef = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
83
- if (!((_d = docRef.created) === null || _d === void 0 ? void 0 : _d.value)) {
84
- return;
85
- }
86
- date = utils_1.formatDate(new Date(docRef.created.value));
87
- displayDate = utils_1.formatDateExplicitMonth(new Date(docRef.created.value));
88
- break;
89
- }
90
- case types_1.TimelineDomainResourceType.AuditEvent: {
91
- var audit = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
92
- if (!((_e = audit.recorded) === null || _e === void 0 ? void 0 : _e.value)) {
93
- return;
94
- }
95
- date = utils_1.formatDate(new Date((_f = audit.recorded) === null || _f === void 0 ? void 0 : _f.value));
96
- displayDate = utils_1.formatDateExplicitMonth(new Date((_g = audit.recorded) === null || _g === void 0 ? void 0 : _g.value));
97
- break;
98
- }
99
- default:
100
- throw Error('Unrecognised resource type');
101
- }
102
- var lookup = timelineDates[date];
103
- if (!lookup) {
104
- timelineDates[date] = { item: [timelineItem], formattedDate: displayDate };
105
- }
106
- else {
107
- lookup.item.push(timelineItem);
108
- timelineDates[date] = lookup;
109
- }
110
- });
111
- var position = 0;
112
- var handleFilterChange = function (key, filter, value) {
113
- var newActiveFilters = __assign({}, activeFilters);
114
- if (value && value.length > 0 && filter.options.some(function (x) { return x.value === value; })) {
115
- newActiveFilters[key] = value;
116
- }
117
- else {
118
- delete newActiveFilters[key];
119
- }
120
- setActiveFilters(newActiveFilters);
121
- onFilterChange && onFilterChange(Object.values(newActiveFilters).filter(function (x) { return x && x.length > 0; }));
122
- };
123
- return (jsx_runtime_1.jsxs(StyledTimeline, __assign({ "data-testid": "timeline" }, { children: [filters && (jsx_runtime_1.jsx(StyledFilters, { children: filters.map(function (filter, key) { return (jsx_runtime_1.jsxs(StyledFilter, { children: [jsx_runtime_1.jsxs("label", __assign({ htmlFor: filter.label + "-" + key }, { children: [filter.label, ":"] }), void 0),
124
- jsx_runtime_1.jsx(select_1.default, { id: filter.label + "-" + key, options: filter.options, onChange: function (e) { return handleFilterChange(key, filter, e.target.value); } }, void 0)] }, key)); }) }, void 0)),
125
- Object.entries(timelineDates).map(function (_a) {
126
- var _b;
127
- var dateKey = _a[0], value = _a[1];
128
- position += 1;
129
- return (jsx_runtime_1.jsxs("div", __assign({ "data-testid": dateKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayHeader, { children: value.formattedDate }, void 0),
130
- jsx_runtime_1.jsx(StyledTimelineDayBody, __assign({ isMobile: isMobile }, { children: (_b = value.item) === null || _b === void 0 ? void 0 : _b.map(function (timelineItem, idx) {
131
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
132
- var content = jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
133
- if (!(timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource)) {
134
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
135
- }
136
- var currentTime = '';
137
- var previousTime = '';
138
- switch (domainResourceType) {
139
- case types_1.TimelineDomainResourceType.QuestionnaireResponse: {
140
- var qr = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
141
- if (!((_a = qr.authored) === null || _a === void 0 ? void 0 : _a.value)) {
142
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
143
- }
144
- currentTime = utils_1.formatTime(new Date(qr.authored.value));
145
- previousTime = currentTime;
146
- if (idx > 0) {
147
- var previousItem = (_b = value.item[idx - 1]) === null || _b === void 0 ? void 0 : _b.domainResource;
148
- if (!((_c = previousItem === null || previousItem === void 0 ? void 0 : previousItem.authored) === null || _c === void 0 ? void 0 : _c.value)) {
149
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
150
- }
151
- previousTime = utils_1.formatTime(new Date(previousItem === null || previousItem === void 0 ? void 0 : previousItem.authored.value));
152
- }
153
- break;
154
- }
155
- case types_1.TimelineDomainResourceType.DocumentReference: {
156
- var docRef = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
157
- if (!((_d = docRef.created) === null || _d === void 0 ? void 0 : _d.value)) {
158
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
159
- }
160
- currentTime = utils_1.formatTime(new Date(docRef.created.value));
161
- previousTime = currentTime;
162
- if (idx > 0) {
163
- var previousItem = (_e = value.item[idx - 1]) === null || _e === void 0 ? void 0 : _e.domainResource;
164
- if (!((_f = previousItem === null || previousItem === void 0 ? void 0 : previousItem.created) === null || _f === void 0 ? void 0 : _f.value)) {
165
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
166
- }
167
- previousTime = utils_1.formatTime(new Date((_g = previousItem === null || previousItem === void 0 ? void 0 : previousItem.created) === null || _g === void 0 ? void 0 : _g.value));
168
- }
169
- break;
170
- }
171
- case types_1.TimelineDomainResourceType.AuditEvent: {
172
- var audit = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
173
- if (!((_h = audit.recorded) === null || _h === void 0 ? void 0 : _h.value)) {
174
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
175
- }
176
- currentTime = utils_1.formatTime(new Date((_j = audit.recorded) === null || _j === void 0 ? void 0 : _j.value));
177
- previousTime = currentTime;
178
- if (idx > 0) {
179
- var previousItem = (_k = value.item[idx - 1]) === null || _k === void 0 ? void 0 : _k.domainResource;
180
- if (!((_l = previousItem === null || previousItem === void 0 ? void 0 : previousItem.recorded) === null || _l === void 0 ? void 0 : _l.value)) {
181
- return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
182
- }
183
- previousTime = utils_1.formatTime(new Date((_m = previousItem === null || previousItem === void 0 ? void 0 : previousItem.recorded) === null || _m === void 0 ? void 0 : _m.value));
184
- }
185
- break;
186
- }
187
- }
188
- if (currentTime !== previousTime) {
189
- position += 1;
190
- }
191
- var itemKey = "timeline_day_item_" + dateKey + "_" + currentTime + "_" + idx;
192
- var isRedacted = (_o = timelineItem.domainResource.metadata.isRedacted) !== null && _o !== void 0 ? _o : false;
193
- if (isMobile) {
194
- content = (jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: true }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0));
195
- }
196
- else if (position % 2 === 1) {
197
- var contentKey = "content_left_" + itemKey;
198
- content = (jsx_runtime_1.jsxs("div", __assign({ "data-testid": contentKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: false }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0),
199
- jsx_runtime_1.jsxs(StyledTimelineDayLine, { children: [jsx_runtime_1.jsx(StyledOuterCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0),
200
- jsx_runtime_1.jsx(StyledInnerCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0)] }, void 0),
201
- jsx_runtime_1.jsx(StyledTimelineDayTimeRight, { children: jsx_runtime_1.jsx(timeline_time_1.default, { domainResource: timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource, domainResourceType: domainResourceType }, void 0) }, void 0)] }), contentKey));
202
- }
203
- else if (position % 2 === 0) {
204
- var contentKey = "content_right_" + itemKey;
205
- content = (jsx_runtime_1.jsxs("div", __assign({ "data-testid": contentKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayTimeLeft, { children: jsx_runtime_1.jsx(timeline_time_1.default, { domainResource: timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource, domainResourceType: domainResourceType }, void 0) }, void 0),
206
- jsx_runtime_1.jsxs(StyledTimelineDayLine, { children: [jsx_runtime_1.jsx(StyledOuterCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0),
207
- jsx_runtime_1.jsx(StyledInnerCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0)] }, void 0),
208
- jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: false }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0)] }), contentKey));
209
- }
210
- return (jsx_runtime_1.jsx(StyledTimelineDayItem, __assign({ isMobile: isMobile, "data-testid": itemKey }, { children: content }), itemKey));
211
- }) }), void 0)] }), dateKey));
212
- })] }), "timeline"));
213
- };
214
- exports.default = Timeline;
215
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
1
+ "use strict";
2
+ var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
3
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
4
+ return cooked;
5
+ };
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
17
+ var __importDefault = (this && this.__importDefault) || function (mod) {
18
+ return (mod && mod.__esModule) ? mod : { "default": mod };
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ var jsx_runtime_1 = require("react/jsx-runtime");
22
+ var react_1 = require("react");
23
+ var styled_1 = __importDefault(require("@emotion/styled"));
24
+ var icon_1 = __importDefault(require("@ltht-react/icon"));
25
+ var styles_1 = require("@ltht-react/styles");
26
+ var types_1 = require("@ltht-react/types");
27
+ var utils_1 = require("@ltht-react/utils");
28
+ var hooks_1 = require("@ltht-react/hooks");
29
+ var select_1 = __importDefault(require("@ltht-react/select"));
30
+ var timeline_time_1 = __importDefault(require("../atoms/timeline-time"));
31
+ var timeline_item_1 = __importDefault(require("../molecules/timeline-item"));
32
+ var timeline_item_redacted_1 = __importDefault(require("../molecules/timeline-item-redacted"));
33
+ var StyledTimeline = styled_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n position: relative;\n margin: -0.75rem;\n"], ["\n position: relative;\n margin: -0.75rem;\n"])));
34
+ var StyledTimelineDayBody = styled_1.default.div(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background-color: white;\n position: relative;\n\n &:before {\n content: '';\n position: absolute;\n z-index: 1;\n height: ", ";\n left: calc(50% - 1px);\n border-width: 0 0 0 2px;\n border-color: ", ";\n border-style: solid;\n }\n"], ["\n background-color: white;\n position: relative;\n\n &:before {\n content: '';\n position: absolute;\n z-index: 1;\n height: ", ";\n left: calc(50% - 1px);\n border-width: 0 0 0 2px;\n border-color: ", ";\n border-style: solid;\n }\n"])), function (_a) {
35
+ var isMobile = _a.isMobile;
36
+ return (isMobile ? '0%' : '100%');
37
+ }, styles_1.TEXT_COLOURS.INFO);
38
+ var StyledTimelineDayHeader = styled_1.default.div(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background-color: ", ";\n padding: 0.5rem;\n text-align: center;\n font-weight: bold;\n"], ["\n background-color: ", ";\n padding: 0.5rem;\n text-align: center;\n font-weight: bold;\n"])), styles_1.BANNER_COLOURS.DEFAULT.BACKGROUND);
39
+ var StyledTimelineDayItem = styled_1.default.div(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: inline-block;\n width: 100%;\n justify-content: center;\n padding: ", ";\n margin: ", ";\n"], ["\n display: inline-block;\n width: 100%;\n justify-content: center;\n padding: ", ";\n margin: ", ";\n"])), function (_a) {
40
+ var isMobile = _a.isMobile;
41
+ return (isMobile ? '' : '0 0.5rem');
42
+ }, function (_a) {
43
+ var isMobile = _a.isMobile;
44
+ return (isMobile ? '0.5rem 0' : '1rem 0');
45
+ });
46
+ var StyledTimelineDayContent = styled_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n width: ", ";\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n"], ["\n width: ", ";\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n"])), function (_a) {
47
+ var isMobile = _a.isMobile;
48
+ return (isMobile ? '100%' : '49%');
49
+ });
50
+ var StyledTimelineDayLine = styled_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n width: 2%;\n vertical-align: top;\n margin-top: 0.125rem;\n display: inline-block;\n text-align: center;\n position: relative;\n height: 100%;\n"], ["\n width: 2%;\n vertical-align: top;\n margin-top: 0.125rem;\n display: inline-block;\n text-align: center;\n position: relative;\n height: 100%;\n"])));
51
+ var StyledTimelineDayTimeLeft = styled_1.default.div(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: right;\n font-weight: bold;\n"], ["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: right;\n font-weight: bold;\n"])));
52
+ var StyledTimelineDayTimeRight = styled_1.default.div(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: left;\n font-weight: bold;\n"], ["\n width: 49%;\n padding: 0 0.5rem;\n display: inline-block;\n vertical-align: top;\n text-align: left;\n font-weight: bold;\n"])));
53
+ var StyledOuterCircle = styled_1.default(icon_1.default)(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: absolute;\n z-index: 1;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: ", ";\n font-size: 0.75rem;\n"], ["\n position: absolute;\n z-index: 1;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: ", ";\n font-size: 0.75rem;\n"])), styles_1.TEXT_COLOURS.INFO);
54
+ var StyledInnerCircle = styled_1.default(icon_1.default)(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n position: absolute;\n z-index: 2;\n top: 0.125rem;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: white;\n font-size: 0.5rem;\n"], ["\n position: absolute;\n z-index: 2;\n top: 0.125rem;\n transform: translate(-50%);\n -webkit-transform: translate(-50%);\n -ms-transform: translate(-50%);\n left: 50%;\n color: white;\n font-size: 0.5rem;\n"])));
55
+ var StyledFilters = styled_1.default.div(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n position: sticky;\n margin-bottom: 1rem;\n top: 0;\n background-color: ", ";\n z-index: 1000;\n padding: 0.5em;\n display: block;\n\n ", " {\n display: flex;\n padding: 1em;\n }\n"], ["\n position: sticky;\n margin-bottom: 1rem;\n top: 0;\n background-color: ", ";\n z-index: 1000;\n padding: 0.5em;\n display: block;\n\n ", " {\n display: flex;\n padding: 1em;\n }\n"])), styles_1.BANNER_COLOURS.DEFAULT.BACKGROUND, styles_1.TABLET_MINIMUM_MEDIA_QUERY);
56
+ var StyledFilter = styled_1.default.div(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n padding: 0.5rem;\n\n ", " {\n max-width: 200px;\n }\n\n > select {\n min-width: 100px;\n flex: 2;\n\n ", " {\n flex: unset;\n }\n }\n\n > label {\n flex: 1;\n white-space: pre;\n padding-right: 0.5em;\n\n ", " {\n flex: unset;\n }\n }\n"], ["\n display: flex;\n align-items: center;\n padding: 0.5rem;\n\n ", " {\n max-width: 200px;\n }\n\n > select {\n min-width: 100px;\n flex: 2;\n\n ", " {\n flex: unset;\n }\n }\n\n > label {\n flex: 1;\n white-space: pre;\n padding-right: 0.5em;\n\n ", " {\n flex: unset;\n }\n }\n"])), styles_1.TABLET_MINIMUM_MEDIA_QUERY, styles_1.TABLET_MINIMUM_MEDIA_QUERY, styles_1.TABLET_MINIMUM_MEDIA_QUERY);
57
+ var Timeline = function (_a) {
58
+ var timelineItems = _a.timelineItems, domainResourceType = _a.domainResourceType, filters = _a.filters, onFilterChange = _a.onFilterChange;
59
+ var width = hooks_1.useWindowSize().width;
60
+ var isMobile = utils_1.isMobileView(width);
61
+ var timelineDates = {};
62
+ var _b = react_1.useState({}), activeFilters = _b[0], setActiveFilters = _b[1];
63
+ react_1.useEffect(function () { return setActiveFilters([]); }, [filters]);
64
+ timelineItems === null || timelineItems === void 0 ? void 0 : timelineItems.forEach(function (timelineItem) {
65
+ var _a, _b, _c, _d, _e, _f, _g;
66
+ if (!(timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource)) {
67
+ return;
68
+ }
69
+ var date = '';
70
+ var displayDate = '';
71
+ switch (domainResourceType) {
72
+ case types_1.TimelineDomainResourceType.QuestionnaireResponse: {
73
+ var qr = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
74
+ if (!((_a = qr.authored) === null || _a === void 0 ? void 0 : _a.value)) {
75
+ return;
76
+ }
77
+ date = utils_1.formatDate(new Date((_b = qr.authored) === null || _b === void 0 ? void 0 : _b.value));
78
+ displayDate = utils_1.formatDateExplicitMonth(new Date((_c = qr.authored) === null || _c === void 0 ? void 0 : _c.value));
79
+ break;
80
+ }
81
+ case types_1.TimelineDomainResourceType.DocumentReference: {
82
+ var docRef = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
83
+ if (!((_d = docRef.created) === null || _d === void 0 ? void 0 : _d.value)) {
84
+ return;
85
+ }
86
+ date = utils_1.formatDate(new Date(docRef.created.value));
87
+ displayDate = utils_1.formatDateExplicitMonth(new Date(docRef.created.value));
88
+ break;
89
+ }
90
+ case types_1.TimelineDomainResourceType.AuditEvent: {
91
+ var audit = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
92
+ if (!((_e = audit.recorded) === null || _e === void 0 ? void 0 : _e.value)) {
93
+ return;
94
+ }
95
+ date = utils_1.formatDate(new Date((_f = audit.recorded) === null || _f === void 0 ? void 0 : _f.value));
96
+ displayDate = utils_1.formatDateExplicitMonth(new Date((_g = audit.recorded) === null || _g === void 0 ? void 0 : _g.value));
97
+ break;
98
+ }
99
+ default:
100
+ throw Error('Unrecognised resource type');
101
+ }
102
+ var lookup = timelineDates[date];
103
+ if (!lookup) {
104
+ timelineDates[date] = { item: [timelineItem], formattedDate: displayDate };
105
+ }
106
+ else {
107
+ lookup.item.push(timelineItem);
108
+ timelineDates[date] = lookup;
109
+ }
110
+ });
111
+ var position = 0;
112
+ var handleFilterChange = function (key, filter, value) {
113
+ var newActiveFilters = __assign({}, activeFilters);
114
+ if (value && value.length > 0 && filter.options.some(function (x) { return x.value === value; })) {
115
+ newActiveFilters[key] = value;
116
+ }
117
+ else {
118
+ delete newActiveFilters[key];
119
+ }
120
+ setActiveFilters(newActiveFilters);
121
+ onFilterChange && onFilterChange(Object.values(newActiveFilters).filter(function (x) { return x && x.length > 0; }));
122
+ };
123
+ return (jsx_runtime_1.jsxs(StyledTimeline, __assign({ "data-testid": "timeline" }, { children: [filters && (jsx_runtime_1.jsx(StyledFilters, { children: filters.map(function (filter, key) { return (jsx_runtime_1.jsxs(StyledFilter, { children: [jsx_runtime_1.jsxs("label", __assign({ htmlFor: filter.label + "-" + key }, { children: [filter.label, ":"] }), void 0),
124
+ jsx_runtime_1.jsx(select_1.default, { id: filter.label + "-" + key, options: filter.options, onChange: function (e) { return handleFilterChange(key, filter, e.target.value); } }, void 0)] }, key)); }) }, void 0)),
125
+ Object.entries(timelineDates).map(function (_a) {
126
+ var _b;
127
+ var dateKey = _a[0], value = _a[1];
128
+ position += 1;
129
+ return (jsx_runtime_1.jsxs("div", __assign({ "data-testid": dateKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayHeader, { children: value.formattedDate }, void 0),
130
+ jsx_runtime_1.jsx(StyledTimelineDayBody, __assign({ isMobile: isMobile }, { children: (_b = value.item) === null || _b === void 0 ? void 0 : _b.map(function (timelineItem, idx) {
131
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
132
+ var content = jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
133
+ if (!(timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource)) {
134
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
135
+ }
136
+ var currentTime = '';
137
+ var previousTime = '';
138
+ switch (domainResourceType) {
139
+ case types_1.TimelineDomainResourceType.QuestionnaireResponse: {
140
+ var qr = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
141
+ if (!((_a = qr.authored) === null || _a === void 0 ? void 0 : _a.value)) {
142
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
143
+ }
144
+ currentTime = utils_1.formatTime(new Date(qr.authored.value));
145
+ previousTime = currentTime;
146
+ if (idx > 0) {
147
+ var previousItem = (_b = value.item[idx - 1]) === null || _b === void 0 ? void 0 : _b.domainResource;
148
+ if (!((_c = previousItem === null || previousItem === void 0 ? void 0 : previousItem.authored) === null || _c === void 0 ? void 0 : _c.value)) {
149
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
150
+ }
151
+ previousTime = utils_1.formatTime(new Date(previousItem === null || previousItem === void 0 ? void 0 : previousItem.authored.value));
152
+ }
153
+ break;
154
+ }
155
+ case types_1.TimelineDomainResourceType.DocumentReference: {
156
+ var docRef = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
157
+ if (!((_d = docRef.created) === null || _d === void 0 ? void 0 : _d.value)) {
158
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
159
+ }
160
+ currentTime = utils_1.formatTime(new Date(docRef.created.value));
161
+ previousTime = currentTime;
162
+ if (idx > 0) {
163
+ var previousItem = (_e = value.item[idx - 1]) === null || _e === void 0 ? void 0 : _e.domainResource;
164
+ if (!((_f = previousItem === null || previousItem === void 0 ? void 0 : previousItem.created) === null || _f === void 0 ? void 0 : _f.value)) {
165
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
166
+ }
167
+ previousTime = utils_1.formatTime(new Date((_g = previousItem === null || previousItem === void 0 ? void 0 : previousItem.created) === null || _g === void 0 ? void 0 : _g.value));
168
+ }
169
+ break;
170
+ }
171
+ case types_1.TimelineDomainResourceType.AuditEvent: {
172
+ var audit = timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource;
173
+ if (!((_h = audit.recorded) === null || _h === void 0 ? void 0 : _h.value)) {
174
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
175
+ }
176
+ currentTime = utils_1.formatTime(new Date((_j = audit.recorded) === null || _j === void 0 ? void 0 : _j.value));
177
+ previousTime = currentTime;
178
+ if (idx > 0) {
179
+ var previousItem = (_k = value.item[idx - 1]) === null || _k === void 0 ? void 0 : _k.domainResource;
180
+ if (!((_l = previousItem === null || previousItem === void 0 ? void 0 : previousItem.recorded) === null || _l === void 0 ? void 0 : _l.value)) {
181
+ return jsx_runtime_1.jsx(jsx_runtime_1.Fragment, {}, void 0);
182
+ }
183
+ previousTime = utils_1.formatTime(new Date((_m = previousItem === null || previousItem === void 0 ? void 0 : previousItem.recorded) === null || _m === void 0 ? void 0 : _m.value));
184
+ }
185
+ break;
186
+ }
187
+ }
188
+ if (currentTime !== previousTime) {
189
+ position += 1;
190
+ }
191
+ var itemKey = "timeline_day_item_" + dateKey + "_" + currentTime + "_" + idx;
192
+ var isRedacted = (_o = timelineItem.domainResource.metadata.isRedacted) !== null && _o !== void 0 ? _o : false;
193
+ if (isMobile) {
194
+ content = (jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: true }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0));
195
+ }
196
+ else if (position % 2 === 1) {
197
+ var contentKey = "content_left_" + itemKey;
198
+ content = (jsx_runtime_1.jsxs("div", __assign({ "data-testid": contentKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: false }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0),
199
+ jsx_runtime_1.jsxs(StyledTimelineDayLine, { children: [jsx_runtime_1.jsx(StyledOuterCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0),
200
+ jsx_runtime_1.jsx(StyledInnerCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0)] }, void 0),
201
+ jsx_runtime_1.jsx(StyledTimelineDayTimeRight, { children: jsx_runtime_1.jsx(timeline_time_1.default, { domainResource: timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource, domainResourceType: domainResourceType }, void 0) }, void 0)] }), contentKey));
202
+ }
203
+ else if (position % 2 === 0) {
204
+ var contentKey = "content_right_" + itemKey;
205
+ content = (jsx_runtime_1.jsxs("div", __assign({ "data-testid": contentKey }, { children: [jsx_runtime_1.jsx(StyledTimelineDayTimeLeft, { children: jsx_runtime_1.jsx(timeline_time_1.default, { domainResource: timelineItem === null || timelineItem === void 0 ? void 0 : timelineItem.domainResource, domainResourceType: domainResourceType }, void 0) }, void 0),
206
+ jsx_runtime_1.jsxs(StyledTimelineDayLine, { children: [jsx_runtime_1.jsx(StyledOuterCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0),
207
+ jsx_runtime_1.jsx(StyledInnerCircle, { type: "circle", color: "info-blue", size: "medium" }, void 0)] }, void 0),
208
+ jsx_runtime_1.jsx(StyledTimelineDayContent, __assign({ isMobile: false }, { children: isRedacted ? (jsx_runtime_1.jsx(timeline_item_redacted_1.default, {}, void 0)) : (jsx_runtime_1.jsx(timeline_item_1.default, { timelineItem: timelineItem, domainResourceType: domainResourceType }, void 0)) }), void 0)] }), contentKey));
209
+ }
210
+ return (jsx_runtime_1.jsx(StyledTimelineDayItem, __assign({ isMobile: isMobile, "data-testid": itemKey }, { children: content }), itemKey));
211
+ }) }), void 0)] }), dateKey));
212
+ })] }), "timeline"));
213
+ };
214
+ exports.default = Timeline;
215
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12;
216
216
  //# sourceMappingURL=timeline.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ltht-react/timeline",
3
- "version": "1.0.257",
3
+ "version": "1.0.259",
4
4
  "description": "> TODO: description",
5
5
  "author": "Jonny Dyson",
6
6
  "homepage": "",
@@ -23,15 +23,15 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@emotion/styled": "^11.0.0",
26
- "@ltht-react/banner": "^1.0.242",
27
- "@ltht-react/hooks": "^1.0.259",
28
- "@ltht-react/icon": "^1.3.269",
29
- "@ltht-react/select": "^1.3.269",
30
- "@ltht-react/styles": "^1.3.261",
31
- "@ltht-react/types": "^1.0.265",
32
- "@ltht-react/utils": "^1.1.267",
26
+ "@ltht-react/banner": "^1.0.244",
27
+ "@ltht-react/hooks": "^1.0.261",
28
+ "@ltht-react/icon": "^1.3.271",
29
+ "@ltht-react/select": "^1.3.271",
30
+ "@ltht-react/styles": "^1.3.263",
31
+ "@ltht-react/types": "^1.0.267",
32
+ "@ltht-react/utils": "^1.1.269",
33
33
  "react": "^17.0.0",
34
34
  "react-html-parser": "^2.0.2"
35
35
  },
36
- "gitHead": "f4642e79f0b745730f3485ecdebf1ad6f8f280c3"
36
+ "gitHead": "3a310decd4b1cee37fd2b36d865108a728591fa6"
37
37
  }