mirror of
https://github.com/datahub-project/datahub.git
synced 2025-09-07 16:16:51 +00:00
Use retention policy for form and create separate reset retention
This commit is contained in:
parent
ddcea31bdf
commit
93b088fcae
@ -74,6 +74,7 @@ import { isMetadataObject, jsonValuesMatch } from 'wherehows-web/utils/datasets/
|
||||
import { typeOf } from '@ember/utils';
|
||||
import { pick } from 'wherehows-web/utils/object';
|
||||
import { service } from '@ember-decorators/service';
|
||||
import { IDatasetRetention } from 'wherehows-web/typings/api/datasets/retention';
|
||||
|
||||
const {
|
||||
complianceDataException,
|
||||
@ -141,6 +142,12 @@ export default class DatasetCompliance extends Component {
|
||||
*/
|
||||
showGuidedComplianceEditMode: boolean = true;
|
||||
|
||||
/**
|
||||
* Pass through object containing the retention policy
|
||||
* @type {IDatasetRetention | null}
|
||||
*/
|
||||
retentionPolicy: IDatasetRetention | null;
|
||||
|
||||
/**
|
||||
* Pass through value for the dataset export policy, to be used by one of our child components on
|
||||
* this page
|
||||
@ -1450,14 +1457,10 @@ export default class DatasetCompliance extends Component {
|
||||
onDatasetPurgePolicyChange(
|
||||
this: DatasetCompliance,
|
||||
purgePolicy: PurgePolicy
|
||||
): IComplianceInfo['complianceType'] | null {
|
||||
const complianceInfo = get(this, 'complianceInfo');
|
||||
): IDatasetRetention['purgeType'] | null {
|
||||
const retentionPolicy = get(this, 'retentionPolicy');
|
||||
|
||||
if (!complianceInfo) {
|
||||
return null;
|
||||
}
|
||||
// directly set the complianceType to the updated value
|
||||
return set(complianceInfo, 'complianceType', purgePolicy);
|
||||
return retentionPolicy ? set(retentionPolicy, 'purgeType', purgePolicy) : null;
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -42,7 +42,6 @@ import { typeOf } from '@ember/utils';
|
||||
import { service } from '@ember-decorators/service';
|
||||
import { containerDataSource } from 'wherehows-web/utils/components/containers/data-source';
|
||||
import { saveDatasetRetentionByUrn, readDatasetRetentionByUrn } from 'wherehows-web/utils/api/datasets/retention';
|
||||
import { extractRetentionFromComplianceInfo } from 'wherehows-web/utils/datasets/retention';
|
||||
import { IDatasetRetention, IGetDatasetRetentionResponse } from 'wherehows-web/typings/api/datasets/retention';
|
||||
import { readUpstreamDatasetsByUrn } from 'wherehows-web/utils/api/datasets/lineage';
|
||||
import { LineageList } from 'wherehows-web/typings/api/datasets/relationships';
|
||||
@ -245,6 +244,14 @@ export default class DatasetComplianceContainer extends Component {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the retention policy to the persisted state
|
||||
* @type {() => void}
|
||||
*/
|
||||
resetRetentionPolicy(): void {
|
||||
get(this, 'getRetentionPolicyTask').perform();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the compliance properties for the dataset
|
||||
* @type {Task<Promise<IReadComplianceResult>, (a?: any) => TaskInstance<Promise<IReadComplianceResult>>>}
|
||||
@ -263,6 +270,19 @@ export default class DatasetComplianceContainer extends Component {
|
||||
setProperties(this, { isNewComplianceInfo, complianceInfo });
|
||||
});
|
||||
|
||||
/**
|
||||
* Reads the retention policy for the dataset and saves items to a property on the container
|
||||
* @type {Task<Promise<IGetDatasetRetentionResponse>, () => TaskInstance<Promise<IGetDatasetRetentionResponse>>>}
|
||||
*/
|
||||
getRetentionPolicyTask = task(function*(
|
||||
this: DatasetComplianceContainer
|
||||
): IterableIterator<Promise<IGetDatasetRetentionResponse | null>> {
|
||||
const retentionResponse = yield readDatasetRetentionByUrn(get(this, 'urn'));
|
||||
|
||||
const retentionPolicy = retentionResponse && retentionResponse.retentionPolicy;
|
||||
set(this, 'retentionPolicy', retentionPolicy);
|
||||
}).restartable();
|
||||
|
||||
/**
|
||||
* Reads the export policy properties for the dataset
|
||||
* @type {Task<Promise<IDatasetExportPolicy>, (a?: any) => TaskInstance<Promise<IDatasetExportPolicy>>>}
|
||||
@ -366,22 +386,12 @@ export default class DatasetComplianceContainer extends Component {
|
||||
*/
|
||||
@action
|
||||
async saveRetentionPolicy(this: DatasetComplianceContainer): Promise<void> {
|
||||
const complianceInfo = get(this, 'complianceInfo');
|
||||
if (complianceInfo) {
|
||||
const { complianceEntities } = complianceInfo;
|
||||
const retentionPolicy = get(this, 'retentionPolicy');
|
||||
|
||||
await this.notifyOnSave<IDatasetRetention>(
|
||||
saveDatasetRetentionByUrn(
|
||||
this.urn,
|
||||
extractRetentionFromComplianceInfo({
|
||||
...complianceInfo,
|
||||
// filter out readonly entities, then omit readonly attribute from remaining entities before save
|
||||
complianceEntities: removeReadonlyAttr(editableTags(complianceEntities))
|
||||
})
|
||||
)
|
||||
);
|
||||
if (retentionPolicy) {
|
||||
await this.notifyOnSave<IDatasetRetention>(saveDatasetRetentionByUrn(this.urn, retentionPolicy));
|
||||
|
||||
this.resetPrivacyCompliancePolicy.call(this);
|
||||
this.resetRetentionPolicy();
|
||||
}
|
||||
}
|
||||
|
||||
@ -405,6 +415,15 @@ export default class DatasetComplianceContainer extends Component {
|
||||
get(this, 'getComplianceTask').perform();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls the reset on all compliance related actions
|
||||
*/
|
||||
@action
|
||||
resetAll(): void {
|
||||
this.actions.resetPrivacyCompliancePolicy.call(this);
|
||||
this.resetRetentionPolicy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes external action if compliance info is new or otherwise
|
||||
* @param {boolean} isNewComplianceInfo flag indicating the policy does not exist remotely
|
||||
|
@ -158,7 +158,7 @@
|
||||
missingPolicyText="This dataset does not have a current compliance purge policy."
|
||||
supportedPurgePolicies=supportedPurgePolicies
|
||||
purgeNote=complianceInfo.compliancePurgeNote
|
||||
purgePolicy=(readonly (if retentionPolicy retentionPolicy.purgeType complianceInfo.complianceType))
|
||||
purgePolicy=(readonly retentionPolicy.purgeType)
|
||||
onPolicyChange=(action "onDatasetPurgePolicyChange")
|
||||
}}
|
||||
|
||||
|
@ -42,7 +42,7 @@
|
||||
onSave=(action "savePrivacyCompliancePolicy")
|
||||
onSaveRetentionPolicy=(action "saveRetentionPolicy")
|
||||
onSaveExportPolicy=(action "saveExportPolicy")
|
||||
onReset=(action "resetPrivacyCompliancePolicy")
|
||||
onReset=(action "resetAll")
|
||||
onComplianceJsonUpdate=(action "onComplianceJsonUpdate")
|
||||
}}
|
||||
|
||||
|
@ -1,26 +1,5 @@
|
||||
import { IComplianceInfo } from 'wherehows-web/typings/api/datasets/compliance';
|
||||
import { IDatasetRetention } from 'wherehows-web/typings/api/datasets/retention';
|
||||
import { nullify, Nullify, Omit, pick } from 'wherehows-web/utils/object';
|
||||
import { isExempt } from 'wherehows-web/constants';
|
||||
|
||||
/**
|
||||
* Extracts values from an IComplianceInfo instance to create an instance of IDatasetRetention
|
||||
* @param {IComplianceInfo} complianceInfo the compliance info object
|
||||
* @returns {IDatasetRetention}
|
||||
*/
|
||||
const extractRetentionFromComplianceInfo = (complianceInfo: IComplianceInfo): IDatasetRetention => {
|
||||
let { datasetUrn, compliancePurgeNote, complianceType } = pick(complianceInfo, [
|
||||
'complianceType',
|
||||
'compliancePurgeNote',
|
||||
'datasetUrn'
|
||||
]);
|
||||
|
||||
return {
|
||||
purgeNote: complianceType && isExempt(complianceType) ? compliancePurgeNote : '',
|
||||
purgeType: complianceType,
|
||||
datasetUrn: datasetUrn!
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Makes values in IComplianceInfo that are present / have a corollary in IDatasetRetention type null i.e. keys
|
||||
@ -38,4 +17,4 @@ const nullifyRetentionFieldsOnComplianceInfo = (
|
||||
...nullify(pick(complianceInfo, ['complianceType', 'compliancePurgeNote']))
|
||||
});
|
||||
|
||||
export { extractRetentionFromComplianceInfo, nullifyRetentionFieldsOnComplianceInfo };
|
||||
export { nullifyRetentionFieldsOnComplianceInfo };
|
||||
|
Loading…
x
Reference in New Issue
Block a user