import { createGroup, createRouter, defineRoute, param, } from 'type-route'; export type UsersRouteUpdate = { userId: string, }; export const ROUTE_USERS: 'users' = 'users'; export const ROUTE_USERS_CREATE: 'usersCreate' = 'usersCreate'; export const ROUTE_USERS_UPDATE: 'usersUpdate' = 'usersUpdate'; const baseUsersRoute: ReturnType = defineRoute('/users'); // eslint-disable-next-line @typescript-eslint/typedef export const usersRouteDefinitions = { [ROUTE_USERS]: baseUsersRoute, [ROUTE_USERS_CREATE]: baseUsersRoute.extend('/create'), [ROUTE_USERS_UPDATE]: baseUsersRoute.extend( { userId: param.path.string }, (params: UsersRouteUpdate) => `/${params.userId}`, ), }; export const { RouteProvider: UsersRouterProvider, useRoute: useUsersRoute, routes: usersRoutes } = createRouter( { scrollToTop: true, }, usersRouteDefinitions, ); export const usersGroup: ReturnType = createGroup([ usersRoutes[ROUTE_USERS], usersRoutes[ROUTE_USERS_CREATE], usersRoutes[ROUTE_USERS_UPDATE], ]); export type UseUsersRoute = ReturnType;