UNPKG

@hmcts/media-viewer

Version:
131 lines 18.6 kB
import moment from 'moment-timezone'; /* @dynamic marking class as dynamic to stop compiler throwing error for lambda in static function see https://github.com/angular/angular/issues/19698#issuecomment-338340211 */ export class StoreUtils { static groupByKeyEntities(annotations, key) { return annotations.reduce((h, obj) => Object.assign(h, { [obj[key]]: (h[obj[key]] || []).concat(obj) }), {}); } static generateCommentsEntities(annotations) { return annotations.reduce((commentEntities, annotation) => { if (annotation.comments.length) { const comment = { ...annotation.comments[0] || '', tags: [...annotation.tags || []] }; return { ...commentEntities, [annotation.id]: comment }; } return { ...commentEntities }; }, {}); } static genTagNameEntities(annotations) { const filterAnnoWithoutCommentsTags = annotations.filter(a => (a.comments.length && a.tags.length)); const allTags = filterAnnoWithoutCommentsTags.map(anno => this.groupByKeyEntities(anno.tags, 'name')); const groupedByName = allTags.reduce((tagEntitiy, tagItem) => { return { ...tagEntitiy, ...tagItem }; }, {}); return this.genNameEnt(annotations, groupedByName); } static genNameEnt(annos, groupedByName) { return Object.keys(groupedByName).reduce((tagNameEnt, key) => { const readyAnno = annos.filter(anno => anno.tags.find(tag => tag.name === key)) .map(anno => anno.id) .reduce((obj, anno) => ({ ...obj, [anno]: anno }), {}); return { ...tagNameEnt, [key]: readyAnno }; }, {}); } static generateAnnotationEntities(anno) { return anno.reduce((annoEntities, annotation) => { const annot = { ...annotation, positionTop: annotation.rectangles[0].y // todo remove this }; return { ...annoEntities, [annotation.id]: annot }; }, {}); } static generateRedactionEntities(redactions) { return redactions.reduce((redactEntities, redaction) => { return { ...redactEntities, [redaction.redactionId]: redaction }; }, {}); } static resetCommentEntSelect(ent) { return Object.keys(ent).reduce((object, key) => { object[key] = { ...ent[key], editable: false, selected: false }; return object; }, {}); } static filterCommentsSummary(comments, filters) { if (Object.keys(filters).length) { const tagFilterApplied = Object.keys(filters.tagFilters) .filter(key => filters.tagFilters[key] === true).length; const dateFilterApplied = (filters.dateRangeFrom || filters.dateRangeTo); const filteredComments = comments.filter(comment => { let hasTagFilter = false; let hasDateFilter = false; // check tags if (filters.hasOwnProperty('tagFilters')) { Object.keys(filters.tagFilters).forEach(filter => { const label = filters.tagFilters[filter]; if (label) { return comment.tags.forEach(tag => { if (tag.name === filter && !hasTagFilter) { hasTagFilter = true; } }); } }); } // check for dates if (dateFilterApplied) { const commentDate = moment(comment.lastModifiedDate); const dateFrom = filters.dateRangeFrom !== null ? moment(filters.dateRangeFrom) : undefined; const dateTo = filters.dateRangeTo !== null ? moment(filters.dateRangeTo) : undefined; if (dateTo && dateFrom) { if (commentDate > dateFrom && commentDate < dateTo) { hasDateFilter = true; } } if (dateTo && !dateFrom) { if (commentDate <= dateTo) { hasDateFilter = true; } } if (dateFrom && !dateTo) { if (commentDate > dateFrom) { hasDateFilter = true; } } } return (hasTagFilter || hasDateFilter); }); return (tagFilterApplied || dateFilterApplied) ? filteredComments : comments; } else { return comments; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9zdG9yZS9zdG9yZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUtyQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFFckIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxHQUFHO1FBQ3hDLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxDQUFDLHdCQUF3QixDQUFDLFdBQVc7UUFDeEMsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUN4QixDQUFDLGVBQTZDLEVBQUUsVUFBc0IsRUFBRSxFQUFFO1lBQ3hFLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxPQUFPLEdBQUc7b0JBQ2QsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQy9CLElBQUksRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7aUJBQ2pDLENBQUM7Z0JBQ0YsT0FBTztvQkFDTCxHQUFHLGVBQWU7b0JBQ2xCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU87aUJBQ3pCLENBQUM7WUFDSixDQUFDO1lB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M0IsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDdkIsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUFDLFlBQVksSUFBSSxhQUFhLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQy9FLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb24gfSBmcm9tICcuLi9hbm5vdGF0aW9ucy9hbm5vdGF0aW9uLXNldC9hbm5vdGF0aW9uLXZpZXcvYW5ub3RhdGlvbi5tb2RlbCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgeyBSZWRhY3Rpb24gfSBmcm9tICcuLi9yZWRhY3Rpb24vc2VydmljZXMvcmVkYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IEZpbHRlcnMgfSBmcm9tICcuL21vZGVscy9maWx0ZXJzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb21tZW50IH0gZnJvbSAnLi4vYW5ub3RhdGlvbnMvY29tbWVudC1zZXQvY29tbWVudC9jb21tZW50Lm1vZGVsJztcblxuLypcbiAgQGR5bmFtaWNcbiAgbWFya2luZyBjbGFzcyBhcyBkeW5hbWljIHRvIHN0b3AgY29tcGlsZXIgdGhyb3dpbmcgZXJyb3IgZm9yIGxhbWJkYSBpbiBzdGF0aWMgZnVuY3Rpb25cbiAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5Njk4I2lzc3VlY29tbWVudC0zMzgzNDAyMTFcbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlVXRpbHMge1xuXG4gIHN0YXRpYyBncm91cEJ5S2V5RW50aXRpZXMoYW5ub3RhdGlvbnMsIGtleSk6IHtbaWQ6IHN0cmluZ106IGFueVtdfSB7XG4gICAgcmV0dXJuIGFubm90YXRpb25zLnJlZHVjZSgoaCwgb2JqKSA9PlxuICAgICAgT2JqZWN0LmFzc2lnbihoLCB7IFtvYmpba2V5XV06ICggaFtvYmpba2V5XV0gfHwgW10gKS5jb25jYXQob2JqKSB9KSwge30pO1xuICB9XG5cbiAgc3RhdGljIGdlbmVyYXRlQ29tbWVudHNFbnRpdGllcyhhbm5vdGF0aW9ucyk6IHtbaWQ6IHN0cmluZ106IENvbW1lbnR9IHtcbiAgICAgcmV0dXJuIGFubm90YXRpb25zLnJlZHVjZShcbiAgICAgIChjb21tZW50RW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBBbm5vdGF0aW9uIH0sIGFubm90YXRpb246IEFubm90YXRpb24pID0+IHtcbiAgICAgICAgaWYgKGFubm90YXRpb24uY29tbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgY29tbWVudCA9IHtcbiAgICAgICAgICAgIC4uLmFubm90YXRpb24uY29tbWVudHNbMF0gfHwgJycsXG4gICAgICAgICAgICB0YWdzOiBbLi4uYW5ub3RhdGlvbi50YWdzIHx8IFtdXVxuICAgICAgICAgIH07XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1lbnRFbnRpdGllcyxcbiAgICAgICAgICAgIFthbm5vdGF0aW9uLmlkXTogY29tbWVudFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21tZW50RW50aXRpZXNcbiAgICAgICAgfTtcbiAgICAgIH0sIHt9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZW5UYWdOYW1lRW50aXRpZXMoYW5ub3RhdGlvbnMpIHtcbiAgICBjb25zdCBmaWx0ZXJBbm5vV2l0aG91dENvbW1lbnRzVGFncyA9IGFubm90YXRpb25zLmZpbHRlcihhID0+IChhLmNvbW1lbnRzLmxlbmd0aCAmJiBhLnRhZ3MubGVuZ3RoKSk7XG4gICAgY29uc3QgYWxsVGFncyA9IGZpbHRlckFubm9XaXRob3V0Q29tbWVudHNUYWdzLm1hcChhbm5vID0+IHRoaXMuZ3JvdXBCeUtleUVudGl0aWVzKGFubm8udGFncywgJ25hbWUnKSk7XG4gICAgY29uc3QgZ3JvdXBlZEJ5TmFtZSA9IGFsbFRhZ3MucmVkdWNlKFxuICAgICAgKHRhZ0VudGl0aXk6IHsgW2lkOiBzdHJpbmddOiBBbm5vdGF0aW9uIH0sIHRhZ0l0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50YWdFbnRpdGl5LFxuICAgICAgICAgIC4uLnRhZ0l0ZW1cbiAgICAgICAgfTtcbiAgICAgIH0sIHt9KTtcblxuICAgIHJldHVybiB0aGlzLmdlbk5hbWVFbnQoYW5ub3RhdGlvbnMsIGdyb3VwZWRCeU5hbWUpO1xuICB9XG5cbiAgc3RhdGljIGdlbk5hbWVFbnQoYW5ub3MsIGdyb3VwZWRCeU5hbWUpIHtcbiAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGdyb3VwZWRCeU5hbWUpLnJlZHVjZShcbiAgICAgICh0YWdOYW1lRW50LCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgcmVhZHlBbm5vID0gYW5ub3MuZmlsdGVyKGFubm8gPT4gYW5uby50YWdzLmZpbmQodGFnID0+IHRhZy5uYW1lID09PSBrZXkpKVxuICAgICAgICAgIC5tYXAoYW5ubyA9PiBhbm5vLmlkKVxuICAgICAgICAgIC5yZWR1Y2UoKG9iajoge1tpZDogc3RyaW5nXTogc3RyaW5nfSwgYW5ubzogc3RyaW5nKSA9PiAoeyAuLi5vYmosIFthbm5vXTogYW5ubyB9KSwge30pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGFnTmFtZUVudCxcbiAgICAgICAgICBba2V5XTogcmVhZHlBbm5vXG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG5cbiAgfVxuXG4gIHN0YXRpYyBnZW5lcmF0ZUFubm90YXRpb25FbnRpdGllcyhhbm5vKToge1tpZDogc3RyaW5nXTogQW5ub3RhdGlvbn0ge1xuICAgIHJldHVybiBhbm5vLnJlZHVjZShcbiAgICAgIChhbm5vRW50aXRpZXM6IHsgW2lkOiBzdHJpbmddOiBBbm5vdGF0aW9uIH0sIGFubm90YXRpb246IEFubm90YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgYW5ub3QgPSB7XG4gICAgICAgICAgLi4uYW5ub3RhdGlvbixcbiAgICAgICAgICBwb3NpdGlvblRvcDogYW5ub3RhdGlvbi5yZWN0YW5nbGVzWzBdLnkgLy8gdG9kbyByZW1vdmUgdGhpc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFubm9FbnRpdGllcyxcbiAgICAgICAgICBbYW5ub3RhdGlvbi5pZF06IGFubm90XG4gICAgICAgIH07XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBzdGF0aWMgZ2VuZXJhdGVSZWRhY3Rpb25FbnRpdGllcyhyZWRhY3Rpb25zOiBSZWRhY3Rpb25bXSk6IHsgW2lkOiBzdHJpbmddOiBSZWRhY3Rpb24gfSB7XG4gICAgcmV0dXJuIHJlZGFjdGlvbnMucmVkdWNlKFxuICAgICAgKHJlZGFjdEVudGl0aWVzOiB7IFtpZDogc3RyaW5nXTogUmVkYWN0aW9uIH0sIHJlZGFjdGlvbjogUmVkYWN0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVkYWN0RW50aXRpZXMsXG4gICAgICAgICAgW3JlZGFjdGlvbi5yZWRhY3Rpb25JZF06IHJlZGFjdGlvblxuICAgICAgICB9O1xuICAgICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIHJlc2V0Q29tbWVudEVudFNlbGVjdChlbnQ6IHsgW2lkOiBzdHJpbmddOiBDb21tZW50IH0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50KS5yZWR1Y2UoKG9iamVjdCwga2V5KSA9PiB7XG4gICAgICBvYmplY3Rba2V5XSA9IHtcbiAgICAgICAgLi4uZW50W2tleV0sXG4gICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9LCB7fSk7XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyQ29tbWVudHNTdW1tYXJ5KGNvbW1lbnRzOiBBcnJheTxDb21tZW50PiwgZmlsdGVyczogRmlsdGVycykge1xuICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXJzKS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRhZ0ZpbHRlckFwcGxpZWQgPSBPYmplY3Qua2V5cyhmaWx0ZXJzLnRhZ0ZpbHRlcnMpXG4gICAgICAgIC5maWx0ZXIoa2V5ID0+IGZpbHRlcnMudGFnRmlsdGVyc1trZXldID09PSB0cnVlKS5sZW5ndGg7XG4gICAgICBjb25zdCBkYXRlRmlsdGVyQXBwbGllZCA9IChmaWx0ZXJzLmRhdGVSYW5nZUZyb20gfHwgZmlsdGVycy5kYXRlUmFuZ2VUbyk7XG4gICAgICBjb25zdCBmaWx0ZXJlZENvbW1lbnRzID0gY29tbWVudHMuZmlsdGVyKGNvbW1lbnQgPT4ge1xuICAgICAgICBsZXQgaGFzVGFnRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIGxldCBoYXNEYXRlRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIC8vIGNoZWNrIHRhZ3NcbiAgICAgICAgaWYgKGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ3RhZ0ZpbHRlcnMnKSkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbHRlcnMudGFnRmlsdGVycykuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGFiZWwgPSBmaWx0ZXJzLnRhZ0ZpbHRlcnNbZmlsdGVyXTtcbiAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICByZXR1cm4gY29tbWVudC50YWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGFnLm5hbWUgPT09IGZpbHRlciAmJiAhaGFzVGFnRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICBoYXNUYWdGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9fSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgZm9yIGRhdGVzXG4gICAgICAgIGlmIChkYXRlRmlsdGVyQXBwbGllZCkge1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnREYXRlID0gbW9tZW50KGNvbW1lbnQubGFzdE1vZGlmaWVkRGF0ZSk7XG4gICAgICAgICAgY29uc3QgZGF0ZUZyb20gPSAgZmlsdGVycy5kYXRlUmFuZ2VGcm9tICE9PSBudWxsID8gbW9tZW50KGZpbHRlcnMuZGF0ZVJhbmdlRnJvbSkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZGF0ZVRvID0gZmlsdGVycy5kYXRlUmFuZ2VUbyAhPT0gbnVsbCA/IG1vbWVudChmaWx0ZXJzLmRhdGVSYW5nZVRvKSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChkYXRlVG8gJiYgZGF0ZUZyb20pIHtcbiAgICAgICAgICAgIGlmIChjb21tZW50RGF0ZSA+IGRhdGVGcm9tICYmIGNvbW1lbnREYXRlIDwgZGF0ZVRvKSB7XG4gICAgICAgICAgICAgIGhhc0RhdGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0ZVRvICYmICFkYXRlRnJvbSkge1xuICAgICAgICAgICAgaWYgKGNvbW1lbnREYXRlIDw9IGRhdGVUbykge1xuICAgICAgICAgICAgICBoYXNEYXRlRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGVGcm9tICYmICFkYXRlVG8pIHtcbiAgICAgICAgICAgIGlmIChjb21tZW50RGF0ZSA+IGRhdGVGcm9tKSB7XG4gICAgICAgICAgICAgIGhhc0RhdGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoaGFzVGFnRmlsdGVyIHx8IGhhc0RhdGVGaWx0ZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKHRhZ0ZpbHRlckFwcGxpZWQgfHwgZGF0ZUZpbHRlckFwcGxpZWQpID8gZmlsdGVyZWRDb21tZW50cyA6IGNvbW1lbnRzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29tbWVudHM7XG4gICAgfVxuICB9XG59XG4iXX0=