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/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); } }