UNPKG

@fto-consult/expo-ui

Version:

Bibliothèque de composants UI Expo,react-native

108 lines (98 loc) 4.43 kB
import {navigate} from "$cnavigation"; import {defaultObj,isPromise,isObj,isNonNullString,isFunction} from "$cutils"; import {open as openPreloader,close as closePreloader} from "$epreloader"; import React from "$react"; import theme,{Colors} from "$theme"; export const getBackgroundColor = (active)=>{ return active ? Colors.setAlpha(theme.colors.primary,0.12) : 'transparent'; } export const closeDrawer = (drawerRef,cb,force)=>{ return drawerRef && drawerRef.current && drawerRef.current.runAfterSlide ? drawerRef.current.runAfterSlide(cb,force) : typeof cb == 'function' ? cb({}) : null; } /**** permet de construire l'action onPress à partir de l'props passé en paramète */ export const getOnPressAction = (props) =>{ props = defaultObj(props); let {onPress,drawerRef,closeOnPress,beforePress,isExpandable,preloader,routeParams,routeName} = props; let _onPress = null; _onPress = onPress === false ? null : onPress; if(onPress === null) { return null; } routeName = defaultStr(routeName); if(isFunction(_onPress) || routeName){ _onPress = (args)=>{ if(isFunction(onPress) && onPress (args) === false) return; if(routeName){ navigate(routeName,routeParams); return; } } } if(isFunction(_onPress)){ return (event,ev2)=>{ const args = React.getOnPressArgs(event,ev2); const cb = ()=>{ if(isExpandable || closeOnPress === false){ return _onPress({...props,...args,drawerRef});; } if(preloader){ openPreloader(); } closeDrawer(drawerRef, x=> { _onPress({...props,...args,drawerRef}); if(preloader){ closePreloader(); } }); } if(typeof beforePress =='function'){ const r = beforePress(args); if(r === false ) return; if(isPromise(r)){ return r.then(cb); } } cb(); } } return _onPress; } const activeRouteKey = "drawerActiveRoute"; /*** retourne la route active à travers la sesison passé soit dans la * - la propriété sessionManager de prop, soit la props elle même constituant un gestionnaire de session */ export const getActiveSessionRoute = (props)=>{ const getSession = isObj(props) && isObj(props.sessionManager) && props.sessionManager.get ? props.sessionManager.get : isObj(props) && typeof props.get =='function'? props.get : undefined; if(typeof getSession =='function'){ return getSession(activeRouteKey); } return undefined; } /*** permet de définir la route active à travers els props passé en paramètre */ export const setActiveSessionRoute = (activeRoute,props)=>{ const setSession = isObj(props) && isObj(props.sessionManager) && props.sessionManager.set ? props.sessionManager.set : isObj(props) && typeof props.set =='function'? props.set : undefined; if(typeof setSession =='function'){ return setSession(activeRouteKey,defaultStr(activeRoute)); } return undefined; } /*** vérifie si la route passée en paramètre est active */ export const isRouteActive = (route,sessionManager)=>{ if(!isNonNullString(route)) return false; const activeRoute = getActiveSessionRoute(sessionManager); if(!isNonNullString(activeRoute)) return false; return route.toLowerCase().trim().ltrim("#").rtrim("/") === activeRoute.toLowerCase().trim().ltrim("#").rtrim("/") ? true : false; } export const previousActiveItemRef = React.createRef(null); export const activeItemRef = React.createRef(null); export const getActiveItem = x=> activeItemRef.current; export const setActiveItem = (item,toogleActiveItem)=> { if(toogleActiveItem ===true && activeItemRef.current && activeItemRef.current.desactivate){ activeItemRef.current.desactivate(); } previousActiveItemRef.current = activeItemRef.current; activeItemRef.current = item; if(toogleActiveItem === true && activeItemRef.current && activeItemRef.current.activate){ activeItemRef.current.activate(); } }