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} pickList */ const pickList = (permissionResponse: IAclInfo, requestResponse: IRequestResponse): Array => { let result: Array = []; if (permissionResponse && permissionResponse.body) { result = permissionResponse.body.map(item => item.tableItem); } if (requestResponse && requestResponse.hasOwnProperty('tableItem')) { result.push((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 };