import {promiseWorker,actionPromise} from "./promiseReducer"; import {gql} from "../actions"; import {takeEvery, call} from 'redux-saga/effects'; import {queries} from "../actions"; import {connect} from 'react-redux'; import {Route, Redirect} from 'react-router-dom'; import {useEffect} from "react"; export function routeReducer(state={}, {type, match}) { if (type === 'ROUTE') { return match } return state } function* routeWorker({match}) { // console.log(match) if (match.path in queries) { const {name, query, variables} = queries[match.path](match) yield call(promiseWorker, actionPromise(name, gql(query, variables))) } } export function* routeWatcher() { yield takeEvery('ROUTE', routeWorker) } const RRoute = ({ action, component:Component, ...routeProps}) => { const WrapperComponent = (componentProps) => { useEffect(() =>{ action(componentProps.match) }) return } return } export const CRRoute = connect(null, {action: match => ({type: 'ROUTE', match})})(RRoute) const ProtectedRoute = ({ fallback='/', roles=["admin"], auth, component:Component, ...routeProps}) => { const WrapperComponent = (componentProps) => { let aclArr = auth?.payload?.sub?.acl if (!aclArr) { aclArr = ['anon'] } let crossArr = []; for (const role of roles) { crossArr = [...crossArr, ...aclArr.filter(aclItem => aclItem === role)] } if (crossArr.length === 0) { return } else { return } } return } export const CProtectedRoute = connect(state => ({auth: state.auth}))(ProtectedRoute)