Merge pull request #1036 from theseyi/upstream-compliance-notification

upstream compliance notification
This commit is contained in:
Seyi Adebajo 2018-03-14 14:45:51 -07:00 committed by GitHub
commit 350afc174f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 24 deletions

View File

@ -80,7 +80,7 @@ export default class BrowserViewport extends Component {
start: number
): IterableIterator<Promise<IDatasetsGetResponse>> {
const { prefix, platform, entity } = get(this, 'params');
const response = yield readDatasets({ platform, prefix, start });
const response: IDatasetsGetResponse = yield readDatasets({ platform, prefix, start });
const { total, count, elements } = response;
const entities = get(this, 'entities');
// If new segment / data-source, replace all items rather than append

View File

@ -111,7 +111,7 @@ export default class DatasetAclAccess extends Component {
const requestBody = getPrincipal(currentUser, requestReason);
try {
let response = yield getAclAccess(currentUser, requestBody);
let response: IRequestResponse = yield getAclAccess(currentUser, requestBody);
set(this, 'accessResponse', response);
} catch (error) {
get(this, 'notifications').notify(NotificationEvent.error, {

View File

@ -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<Promise<IReadComplianceResult>> {
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<Promise<Array<IComplianceDataType>>> {
const complianceDataTypes = yield readComplianceDataTypes();
const complianceDataTypes: Array<IComplianceDataType> = yield readComplianceDataTypes();
set(this, 'complianceDataTypes', complianceDataTypes);
});
@ -165,7 +167,7 @@ export default class DatasetComplianceContainer extends Component {
getComplianceSuggestionsTask = task(function*(
this: DatasetComplianceContainer
): IterableIterator<Promise<IComplianceSuggestion>> {
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<Promise<IDatasetSchema>> {
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 });
}
/**

View File

@ -74,7 +74,7 @@ export default class DatasetOwnershipContainer extends Component {
* @type {Task<Promise<Array<IOwner>>, (a?: any) => TaskInstance<Promise<IOwnerResponse>>>}
*/
getDatasetOwnersTask = task(function*(this: DatasetOwnershipContainer): IterableIterator<Promise<IOwnerResponse>> {
const { owners, fromUpstream, datasetUrn } = yield readDatasetOwnersByUrn(get(this, 'urn'));
const { owners = [], fromUpstream, datasetUrn }: IOwnerResponse = yield readDatasetOwnersByUrn(get(this, 'urn'));
setProperties(this, { owners, fromUpstream, upstreamUrn: datasetUrn });
});
@ -86,7 +86,7 @@ export default class DatasetOwnershipContainer extends Component {
getDatasetOwnerTypesTask = task(function*(
this: DatasetOwnershipContainer
): IterableIterator<Promise<Array<OwnerType>>> {
const ownerTypes = yield readDatasetOwnerTypesWithoutConsumer();
const ownerTypes: Array<OwnerType> = yield readDatasetOwnerTypesWithoutConsumer();
set(this, 'ownerTypes', ownerTypes);
});

View File

@ -61,7 +61,7 @@ export default class DatasetPropertiesContainer extends Component {
getDeprecationPropertiesTask = task(function*(
this: DatasetPropertiesContainer
): IterableIterator<Promise<IDatasetView>> {
const { deprecated, deprecationNote } = yield readDatasetByUrn(get(this, 'urn'));
const { deprecated, deprecationNote }: IDatasetView = yield readDatasetByUrn(get(this, 'urn'));
setProperties(this, { deprecated, deprecationNote });
});

View File

@ -39,7 +39,7 @@ export default class DatasetSchemaContainer extends Component {
*/
getDatasetSchemaTask = task(function*(this: DatasetSchemaContainer): IterableIterator<Promise<IDatasetSchema>> {
let schemas,
{ columns, rawSchema: json } = yield readDatasetSchemaByUrn(get(this, 'urn'));
{ columns, rawSchema: json }: IDatasetSchema = yield readDatasetSchemaByUrn(get(this, 'urn'));
schemas = augmentObjectsWithHtmlComments(columns);
json || (json = '{}');

View File

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

View File

@ -15,7 +15,7 @@ const arrayFilter = <T>(filtrationFunction: (param: T) => boolean): ((array: Arr
array.filter(filtrationFunction);
/**
* Typesafe utility `data last` function for array every
* Typesafe utility `iterate-first data-last` function for array every
* @template T
* @param {(param: T) => boolean} filter
* @returns {((array: Array<T>) => boolean)}