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
|
start: number
|
||||||
): IterableIterator<Promise<IDatasetsGetResponse>> {
|
): IterableIterator<Promise<IDatasetsGetResponse>> {
|
||||||
const { prefix, platform, entity } = get(this, 'params');
|
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 { total, count, elements } = response;
|
||||||
const entities = get(this, 'entities');
|
const entities = get(this, 'entities');
|
||||||
// If new segment / data-source, replace all items rather than append
|
// If new segment / data-source, replace all items rather than append
|
||||||
|
@ -32,7 +32,7 @@ export default class DatasetAclAccess extends Component {
|
|||||||
currentUser: string;
|
currentUser: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the property to initialize the page
|
* Define the property to initialize the page
|
||||||
* @type {IAclInfo}
|
* @type {IAclInfo}
|
||||||
* @memberOf DatasetAclAccess
|
* @memberOf DatasetAclAccess
|
||||||
*/
|
*/
|
||||||
@ -46,7 +46,7 @@ export default class DatasetAclAccess extends Component {
|
|||||||
accessResponse: IRequestResponse;
|
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'].
|
* The component has 5 states ['emptyState', 'hasAccess','noAccess','denyAccess','getAccess'].
|
||||||
* @type {string}
|
* @type {string}
|
||||||
* @memberOf DatasetAclAccess
|
* @memberOf DatasetAclAccess
|
||||||
@ -111,7 +111,7 @@ export default class DatasetAclAccess extends Component {
|
|||||||
const requestBody = getPrincipal(currentUser, requestReason);
|
const requestBody = getPrincipal(currentUser, requestReason);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let response = yield getAclAccess(currentUser, requestBody);
|
let response: IRequestResponse = yield getAclAccess(currentUser, requestBody);
|
||||||
set(this, 'accessResponse', response);
|
set(this, 'accessResponse', response);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
get(this, 'notifications').notify(NotificationEvent.error, {
|
get(this, 'notifications').notify(NotificationEvent.error, {
|
||||||
|
@ -33,7 +33,7 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
/**
|
/**
|
||||||
* External action on parent
|
* External action on parent
|
||||||
*/
|
*/
|
||||||
setOnComplianceType: (isNewComplianceInfo: boolean) => void;
|
setOnComplianceType: (args: { isNewComplianceInfo: boolean; fromUpstream: boolean }) => void;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* External action on parent
|
* External action on parent
|
||||||
@ -140,9 +140,11 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
getComplianceTask = task(function*(
|
getComplianceTask = task(function*(
|
||||||
this: DatasetComplianceContainer
|
this: DatasetComplianceContainer
|
||||||
): IterableIterator<Promise<IReadComplianceResult>> {
|
): 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 });
|
setProperties(this, { isNewComplianceInfo, complianceInfo });
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -153,7 +155,7 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
getComplianceDataTypesTask = task(function*(
|
getComplianceDataTypesTask = task(function*(
|
||||||
this: DatasetComplianceContainer
|
this: DatasetComplianceContainer
|
||||||
): IterableIterator<Promise<Array<IComplianceDataType>>> {
|
): IterableIterator<Promise<Array<IComplianceDataType>>> {
|
||||||
const complianceDataTypes = yield readComplianceDataTypes();
|
const complianceDataTypes: Array<IComplianceDataType> = yield readComplianceDataTypes();
|
||||||
|
|
||||||
set(this, 'complianceDataTypes', complianceDataTypes);
|
set(this, 'complianceDataTypes', complianceDataTypes);
|
||||||
});
|
});
|
||||||
@ -165,7 +167,7 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
getComplianceSuggestionsTask = task(function*(
|
getComplianceSuggestionsTask = task(function*(
|
||||||
this: DatasetComplianceContainer
|
this: DatasetComplianceContainer
|
||||||
): IterableIterator<Promise<IComplianceSuggestion>> {
|
): IterableIterator<Promise<IComplianceSuggestion>> {
|
||||||
const complianceSuggestion = yield readDatasetComplianceSuggestionByUrn(get(this, 'urn'));
|
const complianceSuggestion: IComplianceSuggestion = yield readDatasetComplianceSuggestionByUrn(get(this, 'urn'));
|
||||||
|
|
||||||
set(this, 'complianceSuggestion', complianceSuggestion);
|
set(this, 'complianceSuggestion', complianceSuggestion);
|
||||||
});
|
});
|
||||||
@ -176,7 +178,7 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
*/
|
*/
|
||||||
getDatasetSchemaTask = task(function*(this: DatasetComplianceContainer): IterableIterator<Promise<IDatasetSchema>> {
|
getDatasetSchemaTask = task(function*(this: DatasetComplianceContainer): IterableIterator<Promise<IDatasetSchema>> {
|
||||||
try {
|
try {
|
||||||
const { columns, schemaless } = yield readDatasetSchemaByUrn(get(this, 'urn'));
|
const { columns, schemaless }: IDatasetSchema = yield readDatasetSchemaByUrn(get(this, 'urn'));
|
||||||
const schemaFieldNamesMappedToDataTypes = columnDataTypesAndFieldNames(columns);
|
const schemaFieldNamesMappedToDataTypes = columnDataTypesAndFieldNames(columns);
|
||||||
setProperties(this, { schemaFieldNamesMappedToDataTypes, schemaless });
|
setProperties(this, { schemaFieldNamesMappedToDataTypes, schemaless });
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -248,11 +250,18 @@ export default class DatasetComplianceContainer extends Component {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Invokes external action if compliance info is new or otherwise
|
* 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
|
@action
|
||||||
onCompliancePolicyStateChange(isNewComplianceInfo: boolean) {
|
onCompliancePolicyStateChange({
|
||||||
this.setOnComplianceType(isNewComplianceInfo);
|
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>>>}
|
* @type {Task<Promise<Array<IOwner>>, (a?: any) => TaskInstance<Promise<IOwnerResponse>>>}
|
||||||
*/
|
*/
|
||||||
getDatasetOwnersTask = task(function*(this: DatasetOwnershipContainer): IterableIterator<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 });
|
setProperties(this, { owners, fromUpstream, upstreamUrn: datasetUrn });
|
||||||
});
|
});
|
||||||
@ -86,7 +86,7 @@ export default class DatasetOwnershipContainer extends Component {
|
|||||||
getDatasetOwnerTypesTask = task(function*(
|
getDatasetOwnerTypesTask = task(function*(
|
||||||
this: DatasetOwnershipContainer
|
this: DatasetOwnershipContainer
|
||||||
): IterableIterator<Promise<Array<OwnerType>>> {
|
): IterableIterator<Promise<Array<OwnerType>>> {
|
||||||
const ownerTypes = yield readDatasetOwnerTypesWithoutConsumer();
|
const ownerTypes: Array<OwnerType> = yield readDatasetOwnerTypesWithoutConsumer();
|
||||||
set(this, 'ownerTypes', ownerTypes);
|
set(this, 'ownerTypes', ownerTypes);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ export default class DatasetPropertiesContainer extends Component {
|
|||||||
getDeprecationPropertiesTask = task(function*(
|
getDeprecationPropertiesTask = task(function*(
|
||||||
this: DatasetPropertiesContainer
|
this: DatasetPropertiesContainer
|
||||||
): IterableIterator<Promise<IDatasetView>> {
|
): IterableIterator<Promise<IDatasetView>> {
|
||||||
const { deprecated, deprecationNote } = yield readDatasetByUrn(get(this, 'urn'));
|
const { deprecated, deprecationNote }: IDatasetView = yield readDatasetByUrn(get(this, 'urn'));
|
||||||
setProperties(this, { deprecated, deprecationNote });
|
setProperties(this, { deprecated, deprecationNote });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ export default class DatasetSchemaContainer extends Component {
|
|||||||
*/
|
*/
|
||||||
getDatasetSchemaTask = task(function*(this: DatasetSchemaContainer): IterableIterator<Promise<IDatasetSchema>> {
|
getDatasetSchemaTask = task(function*(this: DatasetSchemaContainer): IterableIterator<Promise<IDatasetSchema>> {
|
||||||
let schemas,
|
let schemas,
|
||||||
{ columns, rawSchema: json } = yield readDatasetSchemaByUrn(get(this, 'urn'));
|
{ columns, rawSchema: json }: IDatasetSchema = yield readDatasetSchemaByUrn(get(this, 'urn'));
|
||||||
schemas = augmentObjectsWithHtmlComments(columns);
|
schemas = augmentObjectsWithHtmlComments(columns);
|
||||||
json || (json = '{}');
|
json || (json = '{}');
|
||||||
|
|
||||||
|
@ -118,6 +118,12 @@ export default class extends Controller.extend({
|
|||||||
*/
|
*/
|
||||||
compliancePolicyHasDrift;
|
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
|
* Flag indicating that the compliance policy needs user attention
|
||||||
* @type {ComputedProperty<boolean>}
|
* @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
|
* @param {boolean} hasSuggestions
|
||||||
*/
|
*/
|
||||||
@action
|
@action
|
||||||
setOnChangeSetChange(hasSuggestions) {
|
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} isNewComplianceInfo
|
||||||
|
* @param {boolean} fromUpstream
|
||||||
*/
|
*/
|
||||||
@action
|
@action
|
||||||
setOnComplianceTypeChange(isNewComplianceInfo) {
|
setOnComplianceTypeChange({ isNewComplianceInfo, fromUpstream }) {
|
||||||
set(this, 'isNewComplianceInfo', isNewComplianceInfo);
|
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
|
@action
|
||||||
setOnChangeSetDrift(hasDrift) {
|
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);
|
array.filter(filtrationFunction);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Typesafe utility `data last` function for array every
|
* Typesafe utility `iterate-first data-last` function for array every
|
||||||
* @template T
|
* @template T
|
||||||
* @param {(param: T) => boolean} filter
|
* @param {(param: T) => boolean} filter
|
||||||
* @returns {((array: Array<T>) => boolean)}
|
* @returns {((array: Array<T>) => boolean)}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user