Use retention policy for form and create separate reset retention

This commit is contained in:
cptran777 2018-09-25 22:31:08 -07:00
parent ddcea31bdf
commit 93b088fcae
5 changed files with 47 additions and 46 deletions

View File

@ -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;
},
/**

View File

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

View File

@ -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")
}}

View File

@ -42,7 +42,7 @@
onSave=(action "savePrivacyCompliancePolicy")
onSaveRetentionPolicy=(action "saveRetentionPolicy")
onSaveExportPolicy=(action "saveExportPolicy")
onReset=(action "resetPrivacyCompliancePolicy")
onReset=(action "resetAll")
onComplianceJsonUpdate=(action "onComplianceJsonUpdate")
}}

View File

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