creates dataset container for owner list. modifies typings for IAvatar interface

This commit is contained in:
Seyi Adebajo 2018-04-04 11:29:52 -07:00
parent bf4a9a1f06
commit 8de05625a5
4 changed files with 63 additions and 4 deletions

View File

@ -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<IOwner>}
* @memberof DatasetOwnerListContainer
*/
owners: Array<IOwner>;
/**
* Lists the avatar objects based off the dataset owners
* @type {ComputedProperty<Array<IAvatar>>}
* @memberof DatasetOwnerListContainer
*/
avatars: ComputedProperty<Array<IAvatar>> = computed('owners', function(): Array<IAvatar> {
return arrayMap(getAvatarProps)(get(this, 'owners'));
});
didInsertElement() {
get(this, 'getOwnersTask').perform();
}
didUpdateAttrs() {
get(this, 'getOwnersTask').perform();
}
/**
* Reads the owners for this dataset
* @type {Task<Promise<Array<IOwnerResponse>>, () => TaskInstance<Promise<IOwnerResponse>>>}
*/
getOwnersTask = task(function*(this: DatasetOwnerListContainer): IterableIterator<Promise<IOwnerResponse>> {
const { owners = [] }: IOwnerResponse = yield readDatasetOwnersByUrn(get(this, 'urn'));
set(this, 'owners', owners);
}).restartable();
}

View File

@ -0,0 +1 @@
{{avatars/stacked-avatars-list avatars=avatars}}

View File

@ -46,7 +46,7 @@
</div>
</div>
{{dataset-owner-list owners=owners datasetName=model.nativeName}}
{{datasets/containers/dataset-owner-list urn=encodedUrn}}
</div>
{{#ivy-tabs selection=tabSelected as |tabs|}}

View File

@ -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 };