mirror of
https://github.com/datahub-project/datahub.git
synced 2025-09-08 00:28:37 +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 { typeOf } from '@ember/utils';
|
||||||
import { pick } from 'wherehows-web/utils/object';
|
import { pick } from 'wherehows-web/utils/object';
|
||||||
import { service } from '@ember-decorators/service';
|
import { service } from '@ember-decorators/service';
|
||||||
|
import { IDatasetRetention } from 'wherehows-web/typings/api/datasets/retention';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
complianceDataException,
|
complianceDataException,
|
||||||
@ -141,6 +142,12 @@ export default class DatasetCompliance extends Component {
|
|||||||
*/
|
*/
|
||||||
showGuidedComplianceEditMode: boolean = true;
|
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
|
* Pass through value for the dataset export policy, to be used by one of our child components on
|
||||||
* this page
|
* this page
|
||||||
@ -1450,14 +1457,10 @@ export default class DatasetCompliance extends Component {
|
|||||||
onDatasetPurgePolicyChange(
|
onDatasetPurgePolicyChange(
|
||||||
this: DatasetCompliance,
|
this: DatasetCompliance,
|
||||||
purgePolicy: PurgePolicy
|
purgePolicy: PurgePolicy
|
||||||
): IComplianceInfo['complianceType'] | null {
|
): IDatasetRetention['purgeType'] | null {
|
||||||
const complianceInfo = get(this, 'complianceInfo');
|
const retentionPolicy = get(this, 'retentionPolicy');
|
||||||
|
|
||||||
if (!complianceInfo) {
|
return retentionPolicy ? set(retentionPolicy, 'purgeType', purgePolicy) : null;
|
||||||
return null;
|
|
||||||
}
|
|
||||||
// directly set the complianceType to the updated value
|
|
||||||
return set(complianceInfo, 'complianceType', purgePolicy);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -42,7 +42,6 @@ import { typeOf } from '@ember/utils';
|
|||||||
import { service } from '@ember-decorators/service';
|
import { service } from '@ember-decorators/service';
|
||||||
import { containerDataSource } from 'wherehows-web/utils/components/containers/data-source';
|
import { containerDataSource } from 'wherehows-web/utils/components/containers/data-source';
|
||||||
import { saveDatasetRetentionByUrn, readDatasetRetentionByUrn } from 'wherehows-web/utils/api/datasets/retention';
|
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 { IDatasetRetention, IGetDatasetRetentionResponse } from 'wherehows-web/typings/api/datasets/retention';
|
||||||
import { readUpstreamDatasetsByUrn } from 'wherehows-web/utils/api/datasets/lineage';
|
import { readUpstreamDatasetsByUrn } from 'wherehows-web/utils/api/datasets/lineage';
|
||||||
import { LineageList } from 'wherehows-web/typings/api/datasets/relationships';
|
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
|
* Reads the compliance properties for the dataset
|
||||||
* @type {Task<Promise<IReadComplianceResult>, (a?: any) => TaskInstance<Promise<IReadComplianceResult>>>}
|
* @type {Task<Promise<IReadComplianceResult>, (a?: any) => TaskInstance<Promise<IReadComplianceResult>>>}
|
||||||
@ -263,6 +270,19 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
setProperties(this, { isNewComplianceInfo, complianceInfo });
|
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
|
* Reads the export policy properties for the dataset
|
||||||
* @type {Task<Promise<IDatasetExportPolicy>, (a?: any) => TaskInstance<Promise<IDatasetExportPolicy>>>}
|
* @type {Task<Promise<IDatasetExportPolicy>, (a?: any) => TaskInstance<Promise<IDatasetExportPolicy>>>}
|
||||||
@ -366,22 +386,12 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
*/
|
*/
|
||||||
@action
|
@action
|
||||||
async saveRetentionPolicy(this: DatasetComplianceContainer): Promise<void> {
|
async saveRetentionPolicy(this: DatasetComplianceContainer): Promise<void> {
|
||||||
const complianceInfo = get(this, 'complianceInfo');
|
const retentionPolicy = get(this, 'retentionPolicy');
|
||||||
if (complianceInfo) {
|
|
||||||
const { complianceEntities } = complianceInfo;
|
|
||||||
|
|
||||||
await this.notifyOnSave<IDatasetRetention>(
|
if (retentionPolicy) {
|
||||||
saveDatasetRetentionByUrn(
|
await this.notifyOnSave<IDatasetRetention>(saveDatasetRetentionByUrn(this.urn, retentionPolicy));
|
||||||
this.urn,
|
|
||||||
extractRetentionFromComplianceInfo({
|
|
||||||
...complianceInfo,
|
|
||||||
// filter out readonly entities, then omit readonly attribute from remaining entities before save
|
|
||||||
complianceEntities: removeReadonlyAttr(editableTags(complianceEntities))
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
this.resetPrivacyCompliancePolicy.call(this);
|
this.resetRetentionPolicy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,6 +415,15 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
get(this, 'getComplianceTask').perform();
|
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
|
* Invokes external action if compliance info is new or otherwise
|
||||||
* @param {boolean} isNewComplianceInfo flag indicating the policy does not exist remotely
|
* @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."
|
missingPolicyText="This dataset does not have a current compliance purge policy."
|
||||||
supportedPurgePolicies=supportedPurgePolicies
|
supportedPurgePolicies=supportedPurgePolicies
|
||||||
purgeNote=complianceInfo.compliancePurgeNote
|
purgeNote=complianceInfo.compliancePurgeNote
|
||||||
purgePolicy=(readonly (if retentionPolicy retentionPolicy.purgeType complianceInfo.complianceType))
|
purgePolicy=(readonly retentionPolicy.purgeType)
|
||||||
onPolicyChange=(action "onDatasetPurgePolicyChange")
|
onPolicyChange=(action "onDatasetPurgePolicyChange")
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@
|
|||||||
onSave=(action "savePrivacyCompliancePolicy")
|
onSave=(action "savePrivacyCompliancePolicy")
|
||||||
onSaveRetentionPolicy=(action "saveRetentionPolicy")
|
onSaveRetentionPolicy=(action "saveRetentionPolicy")
|
||||||
onSaveExportPolicy=(action "saveExportPolicy")
|
onSaveExportPolicy=(action "saveExportPolicy")
|
||||||
onReset=(action "resetPrivacyCompliancePolicy")
|
onReset=(action "resetAll")
|
||||||
onComplianceJsonUpdate=(action "onComplianceJsonUpdate")
|
onComplianceJsonUpdate=(action "onComplianceJsonUpdate")
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
@ -1,26 +1,5 @@
|
|||||||
import { IComplianceInfo } from 'wherehows-web/typings/api/datasets/compliance';
|
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 { 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
|
* 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']))
|
...nullify(pick(complianceInfo, ['complianceType', 'compliancePurgeNote']))
|
||||||
});
|
});
|
||||||
|
|
||||||
export { extractRetentionFromComplianceInfo, nullifyRetentionFieldsOnComplianceInfo };
|
export { nullifyRetentionFieldsOnComplianceInfo };
|
||||||
|
Loading…
x
Reference in New Issue
Block a user