diff --git a/wherehows-web/app/components/dataset-author.ts b/wherehows-web/app/components/dataset-author.ts index 7b3b3b4715..0f1e2db125 100644 --- a/wherehows-web/app/components/dataset-author.ts +++ b/wherehows-web/app/components/dataset-author.ts @@ -1,5 +1,5 @@ import Component from '@ember/component'; -import ComputedProperty, { equal } from '@ember/object/computed'; +import ComputedProperty, { equal, not } from '@ember/object/computed'; import { getProperties, computed } from '@ember/object'; import { assert } from '@ember/debug'; @@ -18,7 +18,10 @@ export default class DatasetAuthor extends Component { classNames = ['dataset-author-record']; - classNameBindings = ['isConfirmedSuggestedOwner:dataset-author-record--disabled']; + classNameBindings = [ + 'isConfirmedSuggestedOwner:dataset-author-record--disabled', + 'isOwnerInActive:dataset-author-record--inactive' + ]; /** * The owner record being rendered @@ -71,23 +74,28 @@ export default class DatasetAuthor extends Component { */ isOwnerMutable: ComputedProperty = equal('owner.source', OwnerSource.Ui); + /** + * Negates the owner attribute flag `isActive`, indicating owner record is considered inactive + * @type {ComputedProperty} + * @memberOf DatasetAuthor + */ + isOwnerInActive: ComputedProperty = not('owner.isActive'); + /** * Determines if the owner record is a system suggested owner and if this record is confirmed by a user * @type {ComputedProperty} * @memberof DatasetAuthor */ - isConfirmedSuggestedOwner: ComputedProperty = computed('commonOwners', function(this: DatasetAuthor) { + isConfirmedSuggestedOwner: ComputedProperty = computed('commonOwners', function( + this: DatasetAuthor + ): boolean { const { commonOwners, isOwnerMutable, owner: { userName } } = getProperties(this, [ 'commonOwners', 'isOwnerMutable', 'owner' ]); - if (!isOwnerMutable) { - return commonOwners.findBy('userName', userName); - } - - return false; + return isOwnerMutable ? false : !!commonOwners.findBy('userName', userName); }); constructor() { diff --git a/wherehows-web/app/constants/datasets/owner.ts b/wherehows-web/app/constants/datasets/owner.ts index 114e8bf2fd..ae97deeacb 100644 --- a/wherehows-web/app/constants/datasets/owner.ts +++ b/wherehows-web/app/constants/datasets/owner.ts @@ -105,7 +105,8 @@ const defaultOwnerProps: IOwner = { sortId: 0, source: OwnerSource.Ui, confirmedBy: null, - idType: OwnerIdType.User + idType: OwnerIdType.User, + isActive: true }; export { diff --git a/wherehows-web/app/styles/components/dataset-author/_dataset-author.scss b/wherehows-web/app/styles/components/dataset-author/_dataset-author.scss index 23aa697ac2..196524e666 100644 --- a/wherehows-web/app/styles/components/dataset-author/_dataset-author.scss +++ b/wherehows-web/app/styles/components/dataset-author/_dataset-author.scss @@ -1,5 +1,3 @@ -$owner-list-issue-color: set-color(red, maroonflush); - .dataset-author { margin-top: item-spacing(7); @@ -21,10 +19,20 @@ $owner-list-issue-color: set-color(red, maroonflush); pointer-events: none; } + &--inactive { + text-decoration: line-through; + } + &#{&} &__action { &--disabled { background-color: set-color(grey, mid); } + + &--inactive { + background-color: set-color(red, maroonflush); + outline: none; + pointer-events: none; + } } } diff --git a/wherehows-web/app/templates/components/dataset-author.hbs b/wherehows-web/app/templates/components/dataset-author.hbs index d02e081ffe..80f2d0cec9 100644 --- a/wherehows-web/app/templates/components/dataset-author.hbs +++ b/wherehows-web/app/templates/components/dataset-author.hbs @@ -1,6 +1,15 @@ {{user-avatar userName=owner.userName}} + {{owner.userName}} + + {{#if isOwnerInActive}} + + + + {{/if}} diff --git a/wherehows-web/app/templates/components/dataset-authors.hbs b/wherehows-web/app/templates/components/dataset-authors.hbs index 2a1ccb52c6..2919ea8108 100644 --- a/wherehows-web/app/templates/components/dataset-authors.hbs +++ b/wherehows-web/app/templates/components/dataset-authors.hbs @@ -13,8 +13,8 @@

{{#if requiredMinNotConfirmed}} - Add at least {{ownersRequiredCount}} owner(s) with ID Type - USER - and Ownership Type - Data Owner + Add {{ownersRequiredCount}} owner(s) with ID Type - USER + , Ownership Type - Data Owner, and who is also Active {{/if}}

diff --git a/wherehows-web/app/typings/api/datasets/owners.d.ts b/wherehows-web/app/typings/api/datasets/owners.d.ts index 564d38eb49..f6003e1db3 100644 --- a/wherehows-web/app/typings/api/datasets/owners.d.ts +++ b/wherehows-web/app/typings/api/datasets/owners.d.ts @@ -8,7 +8,7 @@ interface IOwner { confirmedBy: null | string; email: null | string; idType: OwnerIdType; - isActive?: boolean; + isActive: boolean; isGroup: boolean; modifiedTime?: number | Date; name: string; diff --git a/wherehows-web/app/utils/api/datasets/owners.ts b/wherehows-web/app/utils/api/datasets/owners.ts index c8d629f7d5..5ee01e53e2 100644 --- a/wherehows-web/app/utils/api/datasets/owners.ts +++ b/wherehows-web/app/utils/api/datasets/owners.ts @@ -8,6 +8,7 @@ import { } from 'wherehows-web/typings/api/datasets/party-entities'; import { IOwner, IOwnerPostResponse, IOwnerResponse } from 'wherehows-web/typings/api/datasets/owners'; import { getJSON, postJSON } from 'wherehows-web/utils/api/fetcher'; +import { arrayFilter } from 'wherehows-web/utils/array'; /** * Defines a string enum for valid owner types @@ -184,14 +185,18 @@ const readPartyEntitiesMap = (partyEntities: Array): IUserEntityMa ); /** - * Filters out a list of valid confirmed owners in a list of owners - * @param {Array} [owners=[]] the owners to filter - * @returns {Array} + * Given an IOwner object, determines if it qualifies as a valid confirmed owner + * @param {IOwner} + * @return {boolean} */ -const validConfirmedOwners = (owners: Array = []): Array => - owners.filter( - ({ confirmedBy, type, idType }) => confirmedBy && type === OwnerType.Owner && idType === OwnerIdType.User - ); +const isValidConfirmedOwner = ({ confirmedBy, type, idType, isActive }: IOwner): boolean => + !!confirmedBy && type === OwnerType.Owner && idType === OwnerIdType.User && isActive; + +/** + * Filters out a list of valid confirmed owners in a list of owners + * @type {(array: Array = []) => Array} + */ +const validConfirmedOwners = arrayFilter(isValidConfirmedOwner); /** * Checks that the required minimum number of confirmed users is met with the type Owner and idType User