import AdminPanel from "./IndexComponent";
export class Application implements IApp, IRouteContainer {
routes: ModuleRoute[]; // хранилище роутов
constructor() {
this.routes = [];
}
addRoute(route: ModuleRoute) {
this.routes.push(route);
}
}
export class ModuleAccount implements ISidebar, Module, IRouteContainer {
routes: ModuleRoute[] = []; // второе хранилище
addRoutes(routes: ModuleRoute[]) {
routes.map(route => this.routes.push(route));
}
addRoute(route: ModuleRoute) {
this.routes.push(route);
}
constructor(app: IApp) {
this.app = app;
this.links = [];
// тут вы пишите в первое
this.app.addRoute({
path: "/",
component: this.component,
protectedRoute: false
});
this.app.addRoute({
path: "/account",
component: this.component,
protectedRoute: false
});
}
}
export class ModuleTickets implements Module {
private app: IApp;
private routeContainer: IRouteContainer;
private menuContainer: ISidebar;
constructor(
app: IApp,
routeContainer: IRouteContainer,
menuContainer: ISidebar
) {
this.app = app;
this.routeContainer = routeContainer;
// this.routeContainer.addRoute({
// path: '/account/tickets/choice',
// component: this.component.choise,
// protectedRoute: false
// });
// тут вы пишите во второе
this.routeContainer.addRoute({
path: "/account/tickets",
component: this.component.choise,
protectedRoute: false
});
}
}
const app = new Application();
const moduleAccount = new ModuleAccount(app);
// почему передаете moduleAccount?
const moduleTickets = new ModuleTickets(app, moduleAccount, moduleAccount);
Switch и не должен рендерить своих детей. Он перебирает их циклом до первого совпадения пути и если путь совпал рендерит текущий роут, а если совпадений не было, то и дочерних компонентов у него не будет.
если по какой-то причине не пришел admin - тогда будет routes is undefined и все поломается
const SomeComponent = ({ admin }) => (
Отдаете на рендер объект.
Можете еще такой вызов сделать:
Убедиться, что они доходят до компонента.