From d291b3378994a49ea172645fa6aea7d92d2370ac Mon Sep 17 00:00:00 2001 From: Seyi Adebajo Date: Tue, 18 Sep 2018 23:50:02 -0700 Subject: [PATCH] adds completed / passing tags filter to compliance entities table --- .../app/components/dataset-compliance.ts | 19 ++++++++++++------- .../app/constants/dataset-compliance.ts | 17 ++++++++++++++++- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/wherehows-web/app/components/dataset-compliance.ts b/wherehows-web/app/components/dataset-compliance.ts index b9b0fd1762..f89cc98c0c 100644 --- a/wherehows-web/app/components/dataset-compliance.ts +++ b/wherehows-web/app/components/dataset-compliance.ts @@ -2,7 +2,7 @@ import Component from '@ember/component'; import { computed, set, get, setProperties, getProperties, getWithDefault } from '@ember/object'; import ComputedProperty, { not, or, alias } from '@ember/object/computed'; import { run, schedule, next } from '@ember/runloop'; -import { classify } from '@ember/string'; +import { classify, htmlSafe } from '@ember/string'; import { assert } from '@ember/debug'; import { IDatasetView } from 'wherehows-web/typings/api/datasets/dataset'; import { IDataPlatform } from 'wherehows-web/typings/api/list/platforms'; @@ -39,7 +39,8 @@ import { TagFilter, tagSuggestionNeedsReview, ComplianceEdit, - buildFieldSuggestionsLookupTable + buildFieldSuggestionsLookupTable, + tagsPassingReview } from 'wherehows-web/constants'; import { arrayFilter, arrayMap, arrayReduce, isListUnique, iterateArrayAsync } from 'wherehows-web/utils/array'; import { identity, noop } from 'wherehows-web/utils/helpers/functions'; @@ -323,7 +324,8 @@ export default class DatasetCompliance extends Component { [TagFilter.showAll]: '', [TagFilter.showReview]: '? Please select at least one type for each field', [TagFilter.showSuggested]: - '! Please review suggestions and click thumbs up or down, based on the accuracy of the suggestion' + '! Please review suggestions and click thumbs up or down, based on the accuracy of the suggestion', + [TagFilter.showCompleted]: '' })[fieldReviewOption]; return foldedChangeSet.length ? hint : ''; @@ -530,13 +532,15 @@ export default class DatasetCompliance extends Component { /** * A list of ui values and labels for review filter drop-down - * @type {Array<{value: string, label:string}>} + * @type {Array<{value: TagFilter, label:string}>} * @memberof DatasetCompliance */ fieldReviewOptions: Array<{ value: DatasetCompliance['fieldReviewOption']; label: string }> = [ { value: TagFilter.showAll, label: ' Show all fields' }, { value: TagFilter.showReview, label: '? Show fields missing a data type' }, - { value: TagFilter.showSuggested, label: '! Show fields that need review' } + { value: TagFilter.showSuggested, label: '! Show fields that need review' }, + //@ts-ignore htmlSafe type definition is incorrect in @types/ember contains TODO: to return Handlebars.SafeStringStatic + { value: TagFilter.showCompleted, label: htmlSafe(`✓ Show completed fields`) } ]; didReceiveAttrs(): void { @@ -820,11 +824,12 @@ export default class DatasetCompliance extends Component { [TagFilter.showAll]: identity, [TagFilter.showReview]: tagsRequiringReview(complianceDataTypes, { checkSuggestions: false, - suggestionConfidenceThreshold + suggestionConfidenceThreshold: 0 }), [TagFilter.showSuggested]: arrayFilter((tag: IComplianceChangeSet) => tagSuggestionNeedsReview({ ...tag, suggestionConfidenceThreshold }) - ) + ), + [TagFilter.showCompleted]: tagsPassingReview(complianceDataTypes) })[get(this, 'fieldReviewOption')]; return changeSetFilter(changeSet); diff --git a/wherehows-web/app/constants/dataset-compliance.ts b/wherehows-web/app/constants/dataset-compliance.ts index 649143e1eb..a36d7c8ee6 100644 --- a/wherehows-web/app/constants/dataset-compliance.ts +++ b/wherehows-web/app/constants/dataset-compliance.ts @@ -29,6 +29,7 @@ import { IDatasetColumn } from 'wherehows-web/typings/api/datasets/columns'; import { ComplianceFieldIdValue } from 'wherehows-web/constants/datasets/compliance'; import { isHighConfidenceSuggestion } from 'wherehows-web/utils/datasets/compliance-suggestions'; import { validateRegExp } from 'wherehows-web/utils/validators/regexp'; +import { not } from 'wherehows-web/utils/helpers/functions'; /** * Defines a map of values for the compliance policy on a dataset @@ -63,7 +64,8 @@ const changeSetReviewableAttributeTriggers = enum TagFilter { showAll = 'show-all', showReview = 'show-review', - showSuggested = 'show-suggested' + showSuggested = 'show-suggested', + showCompleted = 'show-completed' } /** @@ -406,6 +408,18 @@ const singleTagsInChangeSet = ( const tagsRequiringReview = (complianceDataTypes: Array, options: IComplianceTagReviewOptions) => arrayFilter(tagNeedsReview(complianceDataTypes, options)); +/** + * Takes a list of compliance data types to check if a tag is an idType as part of reviewable fields check, then filters + * out tags that are not reviewable + * @param {Array} complianceDataTypes list of IComplianceDataType objects + * @param {IComplianceTagReviewOptions} [options={ checkSuggestions: true, suggestionConfidenceThreshold: 0 }] + * @returns (complianceDataTypes: IComplianceDataType[], options?: IComplianceTagReviewOptions) => (array: IComplianceChangeSet[]) => IComplianceChangeSet[] + */ +const tagsPassingReview = ( + complianceDataTypes: Array, + options: IComplianceTagReviewOptions = { checkSuggestions: true, suggestionConfidenceThreshold: 0 } +) => arrayFilter(not(tagNeedsReview(complianceDataTypes, options))); + /** * Lists the tags for a specific identifier field that need to be reviewed * @param {Array} complianceDataTypes @@ -677,6 +691,7 @@ export { isTagIdType, mergeComplianceEntitiesWithSuggestions, tagsRequiringReview, + tagsPassingReview, tagsHaveNoneType, fieldTagsRequiringReview, tagsHaveNoneAndNotNoneType,