From ed455f2245bd9eddc248abe1bdb4f97fa5ef5fac Mon Sep 17 00:00:00 2001 From: Suvash Vishowkarma Date: Mon, 7 Apr 2025 13:59:45 +0545 Subject: [PATCH] feat(config): add routes config support --- packages/react/src/constants.ts | 15 +++++++++++ .../react/src/contexts/ConfigProvider.tsx | 26 ++++++++++++++++--- packages/react/src/types/config.ts | 7 +++-- packages/react/src/types/routes.ts | 17 ++++++++++++ 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/packages/react/src/constants.ts b/packages/react/src/constants.ts index 27f80daf..d1e41822 100644 --- a/packages/react/src/constants.ts +++ b/packages/react/src/constants.ts @@ -24,3 +24,18 @@ export const DEFAULT_PATHS = { MY_ACCOUNTS: "/accounts", SIGNUP: "/signup", }; + +export const DEFAULT_ROUTES_CONFIG_ADMIN = { + accountsAdd: { disabled: false, path: DEFAULT_PATHS.ACCOUNTS_ADD }, + accountsEdit: { disabled: false, path: DEFAULT_PATHS.ACCOUNTS_EDIT }, + accountsView: { disabled: false, path: DEFAULT_PATHS.ACCOUNTS_EDIT }, +}; + +export const DEFAULT_ROUTES_CONFIG_APP = { + accountSettings: { disabled: false, path: DEFAULT_PATHS.ACCOUNT_SETTINGS }, + invitationAccept: { disabled: false, path: DEFAULT_PATHS.INVITATION_ACCEPT }, + invitationJoin: { disabled: false, path: DEFAULT_PATHS.INVITATION_JOIN }, + invitationSignup: { disabled: false, path: DEFAULT_PATHS.INVITATION_SIGNUP }, + myAccounts: { disabled: false, path: DEFAULT_PATHS.MY_ACCOUNTS }, + signup: { disabled: false, path: DEFAULT_PATHS.SIGNUP }, +}; diff --git a/packages/react/src/contexts/ConfigProvider.tsx b/packages/react/src/contexts/ConfigProvider.tsx index 7fe098eb..682ec3d6 100644 --- a/packages/react/src/contexts/ConfigProvider.tsx +++ b/packages/react/src/contexts/ConfigProvider.tsx @@ -1,17 +1,35 @@ -import React, { createContext } from "react"; +import React, { createContext, useCallback, useState } from "react"; +import { RoutesConfig } from "@/types"; import { SaasConfig } from "@/types/config"; +export interface ConfigContextType extends SaasConfig { + updateRoutesConfig: (routesConfig: Partial) => void; +} + interface Properties { children: React.ReactNode; config: SaasConfig; } -const configContext = createContext(undefined); +const configContext = createContext(undefined); + +const ConfigProvider = ({ children, config: pConfig }: Properties) => { + const [config, setConfig] = useState(pConfig); + + const updateRoutesConfig = useCallback( + (newRoutesConfig: Partial) => { + const routesConfig = { ...config.routes }; + + // TODO update/overwrite routes config + }, + [], + ); -const ConfigProvider = ({ children, config }: Properties) => { return ( - {children} + + {children} + ); }; diff --git a/packages/react/src/types/config.ts b/packages/react/src/types/config.ts index 2704cfbf..314eddb5 100644 --- a/packages/react/src/types/config.ts +++ b/packages/react/src/types/config.ts @@ -1,4 +1,6 @@ -export type SaasConfig = { +import { RoutesConfig } from "./routes"; + +export interface SaasConfig { accounts?: { autoSelectAccount?: boolean; allowMultipleSessions?: boolean; @@ -13,5 +15,6 @@ export type SaasConfig = { rootDomain: string; multiDatabase: boolean; saasAccountRoles?: string[]; + routes?: Partial; subdomains: "required" | "optional" | "disabled"; -}; +} diff --git a/packages/react/src/types/routes.ts b/packages/react/src/types/routes.ts index 9047154d..9b8f260a 100644 --- a/packages/react/src/types/routes.ts +++ b/packages/react/src/types/routes.ts @@ -29,3 +29,20 @@ export type AdminRoutesProperties = { export type AppRoutesProperties = { routes?: AppRouteOverwrites; }; + +export interface AdminRoutesConfig { + accountsAdd: Pick; + accountsEdit: Pick; + accountsView: Pick; +} + +export interface AppRoutesConfig { + accountSettings: Pick; + invitationAccept: Pick; + invitationJoin: Pick; + invitationSignup: Pick; + myAccounts: Pick; + signup: Pick; +} + +export type RoutesConfig = AdminRoutesConfig | AppRoutesConfig;