@hmcts/media-viewer
Version:
81 lines • 15.3 kB
JavaScript
import { createSelector } from '@ngrx/store';
import * as fromFeature from '../reducers/reducers';
import * as fromAnnotations from '../reducers/annotations.reducer';
import * as fromTags from './tag.selectors';
import * as fromDocument from './document.selectors';
import { StoreUtils } from '../store-utils';
import moment from 'moment-timezone';
export const getAnnotationsSetState = createSelector(fromFeature.getMVState, (state) => state.annotations);
export const getAnnotationEntities = createSelector(getAnnotationsSetState, fromAnnotations.getAnnoEnt);
export const getSet = createSelector(getAnnotationsSetState, fromAnnotations.getAnnoSet);
export const getDocumentIdSetId = createSelector(getSet, (annoSet) => {
return {
documentId: annoSet.documentId,
annotationSetId: annoSet.id
};
});
export const getAnnotationSet = createSelector(getAnnotationEntities, getSet, (entities, set) => {
return {
...set,
annotations: Object.keys(entities).map(key => entities[key])
};
});
export const getSelectedAnnotation = createSelector(getAnnotationsSetState, fromAnnotations.getSelectedAnno);
export const getCommentEntities = createSelector(getAnnotationsSetState, fromAnnotations.getCommentEnts);
export const getPageEntities = createSelector(getAnnotationsSetState, fromAnnotations.getAnnoPageEnt);
export const getComponentSearchQueries = createSelector(getAnnotationsSetState, fromAnnotations.commentSearchQ);
export const getComponentSearchText = createSelector(getComponentSearchQueries, (queries) => queries.commentSearch);
export const getCommentSummaryFilters = createSelector(getAnnotationsSetState, fromAnnotations.getSummaryFilters);
export const getAnnoPerPage = createSelector(fromDocument.getPages, getPageEntities, fromTags.getFilteredPageEntities, (pages, pageEnt, filteredPageEnt) => {
const isFiltered = !!Object.keys(filteredPageEnt).length;
const entities = isFiltered ? filteredPageEnt : pageEnt;
if (pages) {
const arr = [];
Object.keys(pages).forEach(key => {
arr.push({
anno: entities[key] ? entities[key] : [],
styles: pages[key].styles
});
});
return arr;
}
});
export const getCommentsArray = createSelector(getCommentEntities, fromDocument.getPages, getAnnotationEntities, fromTags.getTagFiltered, (commentEnts, pages, annoEnts, filtered) => {
if (commentEnts && annoEnts && pages[1]) {
const isFiltered = !!Object.keys(filtered).length;
const com = isFiltered ? filtered : commentEnts;
return Object.keys(com).map(key => {
const page = annoEnts[key].page;
return {
...commentEnts[key],
page,
pages
};
});
}
});
export const getCommentSummary = createSelector(getCommentsArray, getCommentSummaryFilters, (commentSummary = [], filters) => {
const comments = StoreUtils.filterCommentsSummary(commentSummary, filters.filters);
if (comments.length) {
const savedComments = comments.filter((comment) => {
return comment.createdByDetails !== undefined;
});
return savedComments.map((comment) => {
return {
page: comment.page,
user: comment.createdByDetails.forename.concat(' ').concat(comment.createdByDetails.surname),
date: moment(comment.lastModifiedDate).format('D MMMM YYYY'),
tags: comment.tags,
comment: comment.content
};
});
}
return [''];
});
export const getFilteredAnnotations = createSelector(getAnnotationEntities, fromTags.getTagFiltered, (annoEnt, filters) => {
const isFiltered = !!Object.keys(filters).length;
const anno = isFiltered ? filters : annoEnt;
return Object.keys(anno).map(key => annoEnt[key])
.filter(annotation => annotation.comments && annotation.comments.length > 0);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi5zZWxlY3RvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi9zdG9yZS9zZWxlY3RvcnMvYW5ub3RhdGlvbi5zZWxlY3RvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUUzQyxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxlQUFlLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxLQUFLLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEtBQUssWUFBWSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQ2xELFdBQVcsQ0FBQyxVQUFVLEVBQ3RCLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQUUsS0FBSyxDQUFDLFdBQVcsQ0FDakQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLGNBQWMsQ0FDakQsc0JBQXNCLEVBQ3RCLGVBQWUsQ0FBQyxVQUFVLENBQzNCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUNsQyxzQkFBc0IsRUFDdEIsZUFBZSxDQUFDLFVBQVUsQ0FDM0IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FDOUMsTUFBTSxFQUNOLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDVixPQUFPO1FBQ0wsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRTtLQUM1QixDQUFDO0FBQ0osQ0FBQyxD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RUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZCxDQUFDLENBQ0YsQ0FBQztBQUdGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLGNBQWMsQ0FDbEQscUJBQXFCLEVBQ3JCLFFBQVEsQ0FBQyxjQUFjLEVBQ3ZCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ25CLE1BQU0sVUFBVSxHQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzVDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlU2VsZWN0b3J9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuaW1wb3J0ICogYXMgZnJvbUZlYXR1cmUgZnJvbSAnLi4vcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0ICogYXMgZnJvbUFubm90YXRpb25zIGZyb20gJy4uL3JlZHVjZXJzL2Fubm90YXRpb25zLnJlZHVjZXInO1xuaW1wb3J0ICogYXMgZnJvbVRhZ3MgZnJvbSAnLi90YWcuc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGZyb21Eb2N1bWVudCBmcm9tICcuL2RvY3VtZW50LnNlbGVjdG9ycyc7XG5pbXBvcnQge1N0b3JlVXRpbHN9IGZyb20gJy4uL3N0b3JlLXV0aWxzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmV4cG9ydCBjb25zdCBnZXRBbm5vdGF0aW9uc1NldFN0YXRlID0gY3JlYXRlU2VsZWN0b3IoXG4gIGZyb21GZWF0dXJlLmdldE1WU3RhdGUsXG4gIChzdGF0ZTogZnJvbUZlYXR1cmUuU3RhdGUpID0+ICBzdGF0ZS5hbm5vdGF0aW9uc1xuKTtcblxuZXhwb3J0IGNvbnN0IGdldEFubm90YXRpb25FbnRpdGllcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRBbm5vdGF0aW9uc1NldFN0YXRlLFxuICBmcm9tQW5ub3RhdGlvbnMuZ2V0QW5ub0VudFxuKTtcblxuZXhwb3J0IGNvbnN0IGdldFNldCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRBbm5vdGF0aW9uc1NldFN0YXRlLFxuICBmcm9tQW5ub3RhdGlvbnMuZ2V0QW5ub1NldFxuKTtcblxuZXhwb3J0IGNvbnN0IGdldERvY3VtZW50SWRTZXRJZCA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRTZXQsXG4gIChhbm5vU2V0KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvY3VtZW50SWQ6IGFubm9TZXQuZG9jdW1lbnRJZCxcbiAgICAgIGFubm90YXRpb25TZXRJZDogYW5ub1NldC5pZFxuICAgIH07XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBnZXRBbm5vdGF0aW9uU2V0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldEFubm90YXRpb25FbnRpdGllcyxcbiAgZ2V0U2V0LFxuICAoZW50aXRpZXMsIHNldCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zZXQsXG4gICAgICBhbm5vdGF0aW9uczogT2JqZWN0LmtleXMoZW50aXRpZXMpLm1hcChrZXkgPT4gZW50aXRpZXNba2V5XSlcbiAgICB9O1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRBbm5vdGF0aW9uID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldEFubm90YXRpb25zU2V0U3RhdGUsXG4gIGZyb21Bbm5vdGF0aW9ucy5nZXRTZWxlY3RlZEFubm9cbik7XG5cbmV4cG9ydCBjb25zdCBnZXRDb21tZW50RW50aXRpZXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0QW5ub3RhdGlvbnNTZXRTdGF0ZSxcbiAgZnJvbUFubm90YXRpb25zLmdldENvbW1lbnRFbnRzXG4pO1xuXG5cbmV4cG9ydCBjb25zdCBnZXRQYWdlRW50aXRpZXMgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0QW5ub3RhdGlvbnNTZXRTdGF0ZSxcbiAgZnJvbUFubm90YXRpb25zLmdldEFubm9QYWdlRW50XG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29tcG9uZW50U2VhcmNoUXVlcmllcyA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRBbm5vdGF0aW9uc1NldFN0YXRlLFxuICBmcm9tQW5ub3RhdGlvbnMuY29tbWVudFNlYXJjaFFcbik7XG5cbmV4cG9ydCBjb25zdCBnZXRDb21wb25lbnRTZWFyY2hUZXh0ID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldENvbXBvbmVudFNlYXJjaFF1ZXJpZXMsXG4gIChxdWVyaWVzKSA9PiBxdWVyaWVzLmNvbW1lbnRTZWFyY2hcbik7XG5cbmV4cG9ydCBjb25zdCBnZXRDb21tZW50U3VtbWFyeUZpbHRlcnMgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0QW5ub3RhdGlvbnNTZXRTdGF0ZSxcbiAgZnJvbUFubm90YXRpb25zLmdldFN1bW1hcnlGaWx0ZXJzXG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5ub1BlclBhZ2UgPSBjcmVhdGVTZWxlY3RvcihcbiAgZnJvbURvY3VtZW50LmdldFBhZ2VzLFxuICBnZXRQYWdlRW50aXRpZXMsXG4gIGZyb21UYWdzLmdldEZpbHRlcmVkUGFnZUVudGl0aWVzLFxuICAocGFnZXMsIHBhZ2VFbnQsIGZpbHRlcmVkUGFnZUVudCkgPT4ge1xuICAgIGNvbnN0IGlzRmlsdGVyZWQ6IGJvb2xlYW4gPSAhIU9iamVjdC5rZXlzKGZpbHRlcmVkUGFnZUVudCkubGVuZ3RoO1xuICAgIGNvbnN0IGVudGl0aWVzID0gaXNGaWx0ZXJlZCA/IGZpbHRlcmVkUGFnZUVudCA6IHBhZ2VFbnQ7XG4gICAgaWYgKHBhZ2VzKSB7XG4gICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgIE9iamVjdC5rZXlzKHBhZ2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGFyci5wdXNoKHtcbiAgICAgICAgICBhbm5vOiBlbnRpdGllc1trZXldID8gZW50aXRpZXNba2V5XSA6IFtdLFxuICAgICAgICAgIHN0eWxlczogcGFnZXNba2V5XS5zdHlsZXNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWVudHNBcnJheSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRDb21tZW50RW50aXRpZXMsXG4gIGZyb21Eb2N1bWVudC5nZXRQYWdlcyxcbiAgZ2V0QW5ub3RhdGlvbkVudGl0aWVzLFxuICBmcm9tVGFncy5nZXRUYWdGaWx0ZXJlZCxcbiAgKGNvbW1lbnRFbnRzLCBwYWdlcywgYW5ub0VudHMsIGZpbHRlcmVkKSA9PiB7XG4gICAgaWYgKGNvbW1lbnRFbnRzICYmIGFubm9FbnRzICYmIHBhZ2VzWzFdKSB7XG4gICAgICAgIGNvbnN0IGlzRmlsdGVyZWQ6IGJvb2xlYW4gPSAhIU9iamVjdC5rZXlzKGZpbHRlcmVkKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNvbSA9IGlzRmlsdGVyZWQgPyBmaWx0ZXJlZCA6IGNvbW1lbnRFbnRzO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoY29tKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBwYWdlID0gYW5ub0VudHNba2V5XS5wYWdlO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb21tZW50RW50c1trZXldLFxuICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIHBhZ2VzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWVudFN1bW1hcnkgPSBjcmVhdGVTZWxlY3RvcihcbiAgZ2V0Q29tbWVudHNBcnJheSxcbiAgZ2V0Q29tbWVudFN1bW1hcnlGaWx0ZXJzLFxuICAoY29tbWVudFN1bW1hcnkgPSBbXSwgZmlsdGVycykgPT4ge1xuICAgIGNvbnN0IGNvbW1lbnRzID0gU3RvcmVVdGlscy5maWx0ZXJDb21tZW50c1N1bW1hcnkoY29tbWVudFN1bW1hcnksIGZpbHRlcnMuZmlsdGVycyk7XG4gICAgaWYgKGNvbW1lbnRzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2F2ZWRDb21tZW50cyAgPSBjb21tZW50cy5maWx0ZXIoKGNvbW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnQuY3JlYXRlZEJ5RGV0YWlscyAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiBzYXZlZENvbW1lbnRzLm1hcCgoY29tbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhZ2U6IGNvbW1lbnQucGFnZSxcbiAgICAgICAgICB1c2VyOiBjb21tZW50LmNyZWF0ZWRCeURldGFpbHMuZm9yZW5hbWUuY29uY2F0KCcgJykuY29uY2F0KGNvbW1lbnQuY3JlYXRlZEJ5RGV0YWlscy5zdXJuYW1lKSxcbiAgICAgICAgICBkYXRlOiBtb21lbnQoY29tbWVudC5sYXN0TW9kaWZpZWREYXRlKS5mb3JtYXQoJ0QgTU1NTSBZWVlZJyksXG4gICAgICAgICAgdGFnczogY29tbWVudC50YWdzLFxuICAgICAgICAgIGNvbW1lbnQ6IGNvbW1lbnQuY29udGVudFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBbJyddO1xuICB9XG4pO1xuXG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJlZEFubm90YXRpb25zID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldEFubm90YXRpb25FbnRpdGllcyxcbiAgZnJvbVRhZ3MuZ2V0VGFnRmlsdGVyZWQsXG4gIChhbm5vRW50LCBmaWx0ZXJzKSA9PiB7XG4gICAgY29uc3QgaXNGaWx0ZXJlZDogYm9vbGVhbiA9ICEhT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoO1xuICAgIGNvbnN0IGFubm8gPSBpc0ZpbHRlcmVkID8gZmlsdGVycyA6IGFubm9FbnQ7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGFubm8pLm1hcChrZXkgPT4gYW5ub0VudFtrZXldKVxuICAgICAgLmZpbHRlcihhbm5vdGF0aW9uID0+IGFubm90YXRpb24uY29tbWVudHMgJiYgYW5ub3RhdGlvbi5jb21tZW50cy5sZW5ndGggPiAwKTtcbiAgfVxuKTtcbiJdfQ==