diff --git a/wherehows-web/app/components/browser/containers/browser-viewport.ts b/wherehows-web/app/components/browser/containers/browser-viewport.ts index 1ec0ad9b3e..3df1c3aa1a 100644 --- a/wherehows-web/app/components/browser/containers/browser-viewport.ts +++ b/wherehows-web/app/components/browser/containers/browser-viewport.ts @@ -80,7 +80,7 @@ export default class BrowserViewport extends Component { start: number ): IterableIterator> { const { prefix, platform, entity } = get(this, 'params'); - const response = yield readDatasets({ platform, prefix, start }); + const response: IDatasetsGetResponse = yield readDatasets({ platform, prefix, start }); const { total, count, elements } = response; const entities = get(this, 'entities'); // If new segment / data-source, replace all items rather than append diff --git a/wherehows-web/app/components/dataset-aclaccess.ts b/wherehows-web/app/components/dataset-aclaccess.ts index 166d80a993..b1b2203a29 100644 --- a/wherehows-web/app/components/dataset-aclaccess.ts +++ b/wherehows-web/app/components/dataset-aclaccess.ts @@ -32,7 +32,7 @@ export default class DatasetAclAccess extends Component { currentUser: string; /** - * Define the property to initialize the page + * Define the property to initialize the page * @type {IAclInfo} * @memberOf DatasetAclAccess */ @@ -46,7 +46,7 @@ export default class DatasetAclAccess extends Component { accessResponse: IRequestResponse; /** - * Define the computed property to decide the page state. + * Define the computed property to decide the page state. * The component has 5 states ['emptyState', 'hasAccess','noAccess','denyAccess','getAccess']. * @type {string} * @memberOf DatasetAclAccess @@ -111,7 +111,7 @@ export default class DatasetAclAccess extends Component { const requestBody = getPrincipal(currentUser, requestReason); try { - let response = yield getAclAccess(currentUser, requestBody); + let response: IRequestResponse = yield getAclAccess(currentUser, requestBody); set(this, 'accessResponse', response); } catch (error) { get(this, 'notifications').notify(NotificationEvent.error, { diff --git a/wherehows-web/app/components/datasets/containers/dataset-compliance.ts b/wherehows-web/app/components/datasets/containers/dataset-compliance.ts index 88a3a7a9b2..a27fa9d1a9 100644 --- a/wherehows-web/app/components/datasets/containers/dataset-compliance.ts +++ b/wherehows-web/app/components/datasets/containers/dataset-compliance.ts @@ -33,7 +33,7 @@ export default class DatasetComplianceContainer extends Component { /** * External action on parent */ - setOnComplianceType: (isNewComplianceInfo: boolean) => void; + setOnComplianceType: (args: { isNewComplianceInfo: boolean; fromUpstream: boolean }) => void; /** * External action on parent @@ -140,9 +140,11 @@ export default class DatasetComplianceContainer extends Component { getComplianceTask = task(function*( this: DatasetComplianceContainer ): IterableIterator> { - const { isNewComplianceInfo, complianceInfo } = yield readDatasetComplianceByUrn(get(this, 'urn')); + const { isNewComplianceInfo, complianceInfo }: IReadComplianceResult = yield readDatasetComplianceByUrn( + get(this, 'urn') + ); - this.onCompliancePolicyStateChange(isNewComplianceInfo); + this.onCompliancePolicyStateChange({ isNewComplianceInfo, fromUpstream: !!complianceInfo.fromUpstream }); setProperties(this, { isNewComplianceInfo, complianceInfo }); }); @@ -153,7 +155,7 @@ export default class DatasetComplianceContainer extends Component { getComplianceDataTypesTask = task(function*( this: DatasetComplianceContainer ): IterableIterator>> { - const complianceDataTypes = yield readComplianceDataTypes(); + const complianceDataTypes: Array = yield readComplianceDataTypes(); set(this, 'complianceDataTypes', complianceDataTypes); }); @@ -165,7 +167,7 @@ export default class DatasetComplianceContainer extends Component { getComplianceSuggestionsTask = task(function*( this: DatasetComplianceContainer ): IterableIterator> { - const complianceSuggestion = yield readDatasetComplianceSuggestionByUrn(get(this, 'urn')); + const complianceSuggestion: IComplianceSuggestion = yield readDatasetComplianceSuggestionByUrn(get(this, 'urn')); set(this, 'complianceSuggestion', complianceSuggestion); }); @@ -176,7 +178,7 @@ export default class DatasetComplianceContainer extends Component { */ getDatasetSchemaTask = task(function*(this: DatasetComplianceContainer): IterableIterator> { try { - const { columns, schemaless } = yield readDatasetSchemaByUrn(get(this, 'urn')); + const { columns, schemaless }: IDatasetSchema = yield readDatasetSchemaByUrn(get(this, 'urn')); const schemaFieldNamesMappedToDataTypes = columnDataTypesAndFieldNames(columns); setProperties(this, { schemaFieldNamesMappedToDataTypes, schemaless }); } catch (e) { @@ -248,11 +250,18 @@ export default class DatasetComplianceContainer extends Component { /** * Invokes external action if compliance info is new or otherwise - * @param {boolean} isNewComplianceInfo + * @param {boolean} isNewComplianceInfo flag indicating the policy does not exist remotely + * @param {boolean} fromUpstream flag indicating related dataset compliance info is derived */ @action - onCompliancePolicyStateChange(isNewComplianceInfo: boolean) { - this.setOnComplianceType(isNewComplianceInfo); + onCompliancePolicyStateChange({ + isNewComplianceInfo, + fromUpstream + }: { + isNewComplianceInfo: boolean; + fromUpstream: boolean; + }) { + this.setOnComplianceType({ isNewComplianceInfo, fromUpstream }); } /** diff --git a/wherehows-web/app/components/datasets/containers/dataset-ownership.ts b/wherehows-web/app/components/datasets/containers/dataset-ownership.ts index 58cced9278..63d382b327 100644 --- a/wherehows-web/app/components/datasets/containers/dataset-ownership.ts +++ b/wherehows-web/app/components/datasets/containers/dataset-ownership.ts @@ -74,7 +74,7 @@ export default class DatasetOwnershipContainer extends Component { * @type {Task>, (a?: any) => TaskInstance>>} */ getDatasetOwnersTask = task(function*(this: DatasetOwnershipContainer): IterableIterator> { - const { owners, fromUpstream, datasetUrn } = yield readDatasetOwnersByUrn(get(this, 'urn')); + const { owners = [], fromUpstream, datasetUrn }: IOwnerResponse = yield readDatasetOwnersByUrn(get(this, 'urn')); setProperties(this, { owners, fromUpstream, upstreamUrn: datasetUrn }); }); @@ -86,7 +86,7 @@ export default class DatasetOwnershipContainer extends Component { getDatasetOwnerTypesTask = task(function*( this: DatasetOwnershipContainer ): IterableIterator>> { - const ownerTypes = yield readDatasetOwnerTypesWithoutConsumer(); + const ownerTypes: Array = yield readDatasetOwnerTypesWithoutConsumer(); set(this, 'ownerTypes', ownerTypes); }); diff --git a/wherehows-web/app/components/datasets/containers/dataset-properties.ts b/wherehows-web/app/components/datasets/containers/dataset-properties.ts index 1890eea8cf..12facb21dc 100644 --- a/wherehows-web/app/components/datasets/containers/dataset-properties.ts +++ b/wherehows-web/app/components/datasets/containers/dataset-properties.ts @@ -61,7 +61,7 @@ export default class DatasetPropertiesContainer extends Component { getDeprecationPropertiesTask = task(function*( this: DatasetPropertiesContainer ): IterableIterator> { - const { deprecated, deprecationNote } = yield readDatasetByUrn(get(this, 'urn')); + const { deprecated, deprecationNote }: IDatasetView = yield readDatasetByUrn(get(this, 'urn')); setProperties(this, { deprecated, deprecationNote }); }); diff --git a/wherehows-web/app/components/datasets/containers/dataset-schema.ts b/wherehows-web/app/components/datasets/containers/dataset-schema.ts index 77dc527257..eb2176a1d8 100644 --- a/wherehows-web/app/components/datasets/containers/dataset-schema.ts +++ b/wherehows-web/app/components/datasets/containers/dataset-schema.ts @@ -39,7 +39,7 @@ export default class DatasetSchemaContainer extends Component { */ getDatasetSchemaTask = task(function*(this: DatasetSchemaContainer): IterableIterator> { let schemas, - { columns, rawSchema: json } = yield readDatasetSchemaByUrn(get(this, 'urn')); + { columns, rawSchema: json }: IDatasetSchema = yield readDatasetSchemaByUrn(get(this, 'urn')); schemas = augmentObjectsWithHtmlComments(columns); json || (json = '{}'); diff --git a/wherehows-web/app/controllers/datasets/dataset.js b/wherehows-web/app/controllers/datasets/dataset.js index 897dbd8242..7ba87f18cf 100644 --- a/wherehows-web/app/controllers/datasets/dataset.js +++ b/wherehows-web/app/controllers/datasets/dataset.js @@ -118,6 +118,12 @@ export default class extends Controller.extend({ */ compliancePolicyHasDrift; + /** + * Flag indicating the dataset policy is derived from an upstream source + * @type {boolean} + */ + isPolicyFromUpstream = false; + /** * Flag indicating that the compliance policy needs user attention * @type {ComputedProperty} @@ -157,21 +163,32 @@ export default class extends Controller.extend({ } /** - * Setter to update the hasSuggestions flag + * Updates the hasSuggestions flag if the policy is not from an upstream dataset, otherwise set to false * @param {boolean} hasSuggestions */ @action setOnChangeSetChange(hasSuggestions) { - set(this, 'hasSuggestions', hasSuggestions); + const fromUpstream = get(this, 'isPolicyFromUpstream'); + set(this, 'hasSuggestions', !fromUpstream && hasSuggestions); } /** - * Setter to update the isNewComplianceInfo flag + * Updates the isNewComplianceInfo flag if the policy is not from an upstream dataset, otherwise set to false + * Also sets the isPolicyFromUpstream attribute * @param {boolean} isNewComplianceInfo + * @param {boolean} fromUpstream */ @action - setOnComplianceTypeChange(isNewComplianceInfo) { - set(this, 'isNewComplianceInfo', isNewComplianceInfo); + setOnComplianceTypeChange({ isNewComplianceInfo, fromUpstream }) { + setProperties(this, { + isNewComplianceInfo: !fromUpstream && isNewComplianceInfo, + isPolicyFromUpstream: fromUpstream + }); + + if (fromUpstream) { + this.setOnChangeSetChange(false); + this.setOnChangeSetDrift(false); + } } /** @@ -180,6 +197,7 @@ export default class extends Controller.extend({ */ @action setOnChangeSetDrift(hasDrift) { - set(this, 'compliancePolicyHasDrift', hasDrift); + const fromUpstream = get(this, 'isPolicyFromUpstream'); + set(this, 'compliancePolicyHasDrift', !fromUpstream && hasDrift); } } diff --git a/wherehows-web/app/utils/array.ts b/wherehows-web/app/utils/array.ts index 2d964edd94..601725be77 100644 --- a/wherehows-web/app/utils/array.ts +++ b/wherehows-web/app/utils/array.ts @@ -15,7 +15,7 @@ const arrayFilter = (filtrationFunction: (param: T) => boolean): ((array: Arr array.filter(filtrationFunction); /** - * Typesafe utility `data last` function for array every + * Typesafe utility `iterate-first data-last` function for array every * @template T * @param {(param: T) => boolean} filter * @returns {((array: Array) => boolean)}