diff --git a/wherehows-web/app/components/datasets/containers/dataset-owner-list.ts b/wherehows-web/app/components/datasets/containers/dataset-owner-list.ts new file mode 100644 index 0000000000..2bfb68381a --- /dev/null +++ b/wherehows-web/app/components/datasets/containers/dataset-owner-list.ts @@ -0,0 +1,58 @@ +import Component from '@ember/component'; +import { get, set, computed } from '@ember/object'; +import ComputedProperty from '@ember/object/computed'; +import { IAvatar } from 'wherehows-web/typings/app/avatars'; +import { IOwner, IOwnerResponse } from 'wherehows-web/typings/api/datasets/owners'; +import { task } from 'ember-concurrency'; +import { readDatasetOwnersByUrn } from 'wherehows-web/utils/api/datasets/owners'; +import { arrayMap } from 'wherehows-web/utils/array'; +import { getAvatarProps } from 'wherehows-web/constants/avatars/avatars'; + +export default class DatasetOwnerListContainer extends Component { + constructor() { + super(...arguments); + + this.owners || (this.owners = []); + } + + /** + * Urn for the related dataset + * @type {string} + * @memberof DatasetOwnerListContainer + */ + urn: string; + + /** + * The owners for the dataset + * @type {Array} + * @memberof DatasetOwnerListContainer + */ + owners: Array; + + /** + * Lists the avatar objects based off the dataset owners + * @type {ComputedProperty>} + * @memberof DatasetOwnerListContainer + */ + avatars: ComputedProperty> = computed('owners', function(): Array { + return arrayMap(getAvatarProps)(get(this, 'owners')); + }); + + didInsertElement() { + get(this, 'getOwnersTask').perform(); + } + + didUpdateAttrs() { + get(this, 'getOwnersTask').perform(); + } + + /** + * Reads the owners for this dataset + * @type {Task>, () => TaskInstance>>} + */ + getOwnersTask = task(function*(this: DatasetOwnerListContainer): IterableIterator> { + const { owners = [] }: IOwnerResponse = yield readDatasetOwnersByUrn(get(this, 'urn')); + + set(this, 'owners', owners); + }).restartable(); +} diff --git a/wherehows-web/app/templates/components/datasets/containers/dataset-owner-list.hbs b/wherehows-web/app/templates/components/datasets/containers/dataset-owner-list.hbs new file mode 100644 index 0000000000..c12d1e4fc3 --- /dev/null +++ b/wherehows-web/app/templates/components/datasets/containers/dataset-owner-list.hbs @@ -0,0 +1 @@ +{{avatars/stacked-avatars-list avatars=avatars}} \ No newline at end of file diff --git a/wherehows-web/app/templates/datasets/dataset.hbs b/wherehows-web/app/templates/datasets/dataset.hbs index 578c6d9758..076289ed00 100644 --- a/wherehows-web/app/templates/datasets/dataset.hbs +++ b/wherehows-web/app/templates/datasets/dataset.hbs @@ -46,7 +46,7 @@ - {{dataset-owner-list owners=owners datasetName=model.nativeName}} + {{datasets/containers/dataset-owner-list urn=encodedUrn}} {{#ivy-tabs selection=tabSelected as |tabs|}} diff --git a/wherehows-web/app/typings/app/avatars.d.ts b/wherehows-web/app/typings/app/avatars.d.ts index a886351869..1d04dbd662 100644 --- a/wherehows-web/app/typings/app/avatars.d.ts +++ b/wherehows-web/app/typings/app/avatars.d.ts @@ -4,10 +4,10 @@ */ interface IAvatar { imageUrl: string; - email: null | string; + email?: null | string; // Handle for the avatar - userName: string; - name: string; + userName?: string; + name?: string; } export { IAvatar };