Проблема: в объектах
employeeRoutes,
adminRoutes,
ownerRoutes есть одинаковое поле
"/" (главная страница), т. к. эта страница должна показываться всем пользователям, но с отличным в зависимости от роли контентом.
Изначально я планировал обойтись без функции
createRoutes, которая сейчас эту проблему решает, но меня смущает, что я 2 раза создаю практически идентичный объект - сначала в
routes, затем в
createRoutes.
Кодconst routes = {
...guestRoutes,
...employeeRoutes,
...adminRoutes,
...ownerRoutes,
};
const createRoutes = (role) => {
switch (role) {
case ROLES.EMPLOYEE:
return { ...routes, ...employeeRoutes };
case ROLES.ADMIN:
return { ...routes, ...adminRoutes };
// это кейс можно не писать, т. к. в изначальном объекте ownerRoutes и так в самом конце.
case ROLES.OWNER:
return { ...routes, ...ownerRoutes };
}
return routes;
};
export const getRoutes = (role) => {
const routes = createRoutes(role);
if ([ROLES.GUEST, ROLES.EMPLOYEE, ROLES.ADMIN, ROLES.OWNER].includes(role)) {
return Object.values(ROUTES[role]).reduce((acc, route) => (routes[route] ? [...acc, routes[route]] : [...acc]), []);
}
return [];
};
Мне нужно, чтобы объект роутов, привязанный к роли закидывался последним, т. е. пример:
Если employee, то такой объект{
...guestRoutes,
...adminRoutes,
...ownerRoutes,
...employeeRoutes,
}
Если admin, то такой объект{
...guestRoutes,
...employeeRoutes,
...ownerRoutes,
...adminRoutes,
}
Если owner, то такой объект{
...guestRoutes,
...employeeRoutes,
...adminRoutes,
...ownerRoutes,
}
Можно ли как-то красиво обыграть данный кейс?