mirror of
https://github.com/datahub-project/datahub.git
synced 2025-08-26 18:15:59 +00:00
Merge pull request #1036 from theseyi/upstream-compliance-notification
upstream compliance notification
This commit is contained in:
commit
350afc174f
@ -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
|
||||
|
@ -32,7 +32,7 @@ export default class DatasetAclAccess extends Component {
|
||||
currentUser: string;
|
||||
|
||||
/**
|
||||
* Define the property to initialize the page
|
||||
* Define the property to initialize the page
|
||||
* @type {IAclInfo}
|
||||
* @memberOf DatasetAclAccess
|
||||
*/
|
||||
@ -46,7 +46,7 @@ export default class DatasetAclAccess extends Component {
|
||||
accessResponse: IRequestResponse;
|
||||
|
||||
/**
|
||||
* Define the computed property to decide the page state.
|
||||
* Define the computed property to decide the page state.
|
||||
* The component has 5 states ['emptyState', 'hasAccess','noAccess','denyAccess','getAccess'].
|
||||
* @type {string}
|
||||
* @memberOf DatasetAclAccess
|
||||
@ -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, {
|
||||
|
@ -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 });
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
});
|
||||
|
||||
|
@ -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 });
|
||||
});
|
||||
|
||||
|
@ -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 = '{}');
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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)}
|
||||
|
Loading…
x
Reference in New Issue
Block a user