mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-31 21:36:08 +00:00

* finish the alc access page layout, logics and sass files * Fix css issue and request permission response error message * finish the testing part * simplify code finished * finish spinner * Finished ACL access page, testing cases, clean code format * Clean format, address comments, refactor JS code of ACL page to TS * address comments, replace type any and fix merge issue
119 lines
3.5 KiB
TypeScript
119 lines
3.5 KiB
TypeScript
import { capitalize } from '@ember/string';
|
|
import {
|
|
IPageConcent,
|
|
IPageState,
|
|
IAclInfo,
|
|
IPrincipal,
|
|
IRequestResponse,
|
|
IRequestAclApproved,
|
|
IAclUserInfo
|
|
} from 'wherehows-web/typings/api/datasets/aclaccess';
|
|
|
|
/**
|
|
* List of string values for ACL page state
|
|
* @enum {string}
|
|
*/
|
|
enum aclPageState {
|
|
emptyState = 'emptyState',
|
|
hasAccess = 'hasAccess',
|
|
getAccess = 'getAccess',
|
|
noAccess = 'noAccess',
|
|
denyAccess = 'denyAccess'
|
|
}
|
|
|
|
/**
|
|
* Defined the method to gnerate the static resource of ACL page based on the current user
|
|
* @param {string} userName
|
|
* @return {IPageConcent} pageContent
|
|
*/
|
|
const pageContent = (userName = ''): IPageConcent => {
|
|
userName = capitalize(userName);
|
|
return {
|
|
success: {
|
|
info: `${userName}, you have access to this data`,
|
|
requestInfo: 'Congrats! Your request has been approved!',
|
|
requestMessage: 'You now have access to this data',
|
|
classNameIcon: 'fa fa-check-circle-o fa-lg',
|
|
classNameFont: 'acl-permission__success'
|
|
},
|
|
reject: {
|
|
info: `${userName}, you currently do not have access to this dataset`,
|
|
requestInfo: 'Sorry, you request has been denied by the system.',
|
|
requestMessage: 'If you feel this is in error, contact acreqjests@linkedin.',
|
|
classNameIcon: 'fa fa-ban fa-lg',
|
|
classNameFont: 'acl-permission__reject'
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Defined the method to generate ACL page static content on all page state
|
|
* @param {string} userName
|
|
* @return {IPageState} accessState
|
|
*/
|
|
const accessState = (userName: string): IPageState => {
|
|
const content = pageContent(userName);
|
|
return {
|
|
hasAccess: {
|
|
state: 'hasAccess',
|
|
info: content.success.info,
|
|
icon: content.success.classNameIcon,
|
|
font: content.success.classNameFont
|
|
},
|
|
noAccess: {
|
|
state: 'noAccess',
|
|
info: content.reject.info,
|
|
icon: content.reject.classNameIcon,
|
|
font: content.reject.classNameFont,
|
|
isLoadForm: true
|
|
},
|
|
getAccess: {
|
|
state: 'getAccess',
|
|
info: content.success.requestInfo,
|
|
icon: content.success.classNameIcon,
|
|
font: content.success.classNameFont,
|
|
message: content.success.requestMessage
|
|
},
|
|
denyAccess: {
|
|
state: 'denyAccess',
|
|
info: content.reject.requestInfo,
|
|
icon: content.reject.classNameIcon,
|
|
font: content.reject.classNameFont,
|
|
message: content.reject.requestMessage
|
|
}
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Defined a specific method
|
|
* to pick users info from ACL permission response and request response.
|
|
* @param {IAclInfo} permissionResponse
|
|
* @param {IRequestResponse} requestResponse
|
|
* @returns {Array<IAclUserInfo>} pickList
|
|
*/
|
|
const pickList = (permissionResponse: IAclInfo, requestResponse: IRequestResponse): Array<IAclUserInfo> => {
|
|
let result: Array<IAclUserInfo> = [];
|
|
if (permissionResponse && permissionResponse.body) {
|
|
result = permissionResponse.body.map(item => item.tableItem);
|
|
}
|
|
if (requestResponse && requestResponse.hasOwnProperty('tableItem')) {
|
|
result.push((<IRequestAclApproved>requestResponse).tableItem);
|
|
}
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* Defined a method to generate ACL post request body
|
|
* @param {string} userName
|
|
* @param {string} requestReason
|
|
* @returns {IPrincipal} getPrincipal
|
|
*/
|
|
const getPrincipal = (userName: string, requestReason: string): IPrincipal => {
|
|
return {
|
|
principal: `urn:li:userPrincipal:${userName}`,
|
|
businessJustification: requestReason
|
|
};
|
|
};
|
|
|
|
export { pageContent, accessState, pickList, getPrincipal, aclPageState };
|