@fto-consult/expo-ui
Version:
Bibliothèque de composants UI Expo,react-native
114 lines (95 loc) • 4.39 kB
JavaScript
// Copyright 2022 @fto-consult/Boris Fouomene. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import {navigate,sanitizeName} from "$cnavigation";
import {isNonNullString,defaultStr,defaultObj,isObj} from "$cutils";
import appConfig from "$capp/config";
import { isPermAllowed } from "$eauth/utils";
export const tableDataRouteName = 'table-data';
export const structDataRouteName = 'struct-data';
export const tableDataLinkRouteName = "table-data-link";
export const structDataListRouteName = "struct-data-list";
export const tableDataListRouteName = "table-data-list";
export const tableDataLinkScreenName = tableDataLinkRouteName;
export const structDataLinkRouteName = "struct-data-link";
export const structDataLinkScreeName = structDataLinkRouteName;
const canCheckNavPerms = ()=> appConfig.get("checkNavigationPermsOnTableOrStructData")
const navigateToTableOrStructData = function(tableName,params,actionType){
if(isNonNullString(tableName)){
tableName = {tableName};
}
if(isObj(tableName)){
params = {...tableName,...defaultObj(params)};
}
params = defaultObj(params);
tableName = defaultStr(params.tableName,params.table).toUpperCase();
if(!tableName) return;
const {perm} = params;
let isAllowed = true;
actionType = defaultStr(actionType,"tabledata").replaceAll("_","").replaceAll("-","").replaceAll(" ","").toLowerCase();
const isTableData = actionType =='tabledata';
if(perm !== undefined){
isAllowed = isPermAllowed(perm,{permAction:"navigate",...params,tableName,table:tableName})
} else if(canCheckNavPerms() !== false){
if(actionType =='structdata') {
isAllowed = Auth.isStructDataAllowed({table:tableName})
} else if(isTableData){
isAllowed = Auth.isTableDataAllowed({table:tableName});
}
}
if(!isAllowed){
return Auth.showError();
}
params.tableName = tableName;
params.routeName = buildScreenRoute(tableName,actionType =='structdata'? structDataRouteName : tableDataRouteName);
return navigate(params)
}
export const navigateToTableData = (tableName,params)=>{
return navigateToTableOrStructData(tableName,params,"tabledata");
}
export const navigateToStructData = (tableName,params)=>{
return navigateToTableOrStructData(tableName,params,"structdata");
}
/**** permet de naviguer ver un lien */
export const navigateToTableDataLink = (tableName,options)=>{
const opts = isNonNullString(tableName)? {tableName,table:tableName} : {};
return navigate(tableDataLinkRouteName,extendObj({},opts,options));
}
export const buildScreenRoute = function(tableName,parent){
if(isObj(tableName)){
tableName = defaultStr(tableName.tableName,tableName.table);
}
if(!isNonNullString(tableName)) return undefined;
parent = defaultStr(parent,tableDataRouteName);
if(parent){
parent= parent.rtrim("/")+"/";
}
return sanitizeName(parent+tableName);
}
export const getTableDataRouteName = function(tableName){
return buildScreenRoute(tableName,tableDataRouteName);
}
export const getStructDataRouteName = function(tableName){
return buildScreenRoute(tableName,structDataRouteName);
}
export const getStructDataScreenName = getStructDataRouteName;
export const getTableDataScreenName = getTableDataRouteName;
/*** permet d'obtenir le lien vers l'écran table data permettant de lister les données de la table data */
export const getTableDataListRouteName = function(tableName){
return buildScreenRoute(tableName,tableDataListRouteName);
}
export const getStructDataListRouteName = function(tableName){
return buildScreenRoute(tableName,structDataListRouteName);
}
export const getTableDataListScreenName = getTableDataListRouteName;
export const navigateToTableDataList = function (tableName,params){
const route = getTableDataListRouteName(tableName);
if(isNonNullString(route)){
if(canCheckNavPerms() !== false && !Auth.isTableDataAllowed({table:tableName,action:'read'})){
return Auth.showError()
}
return navigate({routeName:route,params});
}
return false;
}
export * from "$cnavigation";