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

View File

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

View File

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

View File

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

View File

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