@ankjs/react-ui 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +24 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +26 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/navigation/BrowserRouter.d.ts +112 -0
- package/dist/navigation/index.d.ts +2 -0
- package/dist/types/browserRouterTypes.d.ts +22 -0
- package/dist/types/inputTypes.d.ts +10 -2
- package/package.json +4 -1
- package/src/components/input/Input.tsx +4 -5
- package/src/index.ts +2 -1
- package/src/navigation/BrowserRouter.tsx +237 -0
- package/src/navigation/index.ts +11 -0
- package/src/types/browserRouterTypes.ts +113 -0
- package/src/types/inputTypes.ts +14 -2
- package/dist/types/InputTypes.d.ts +0 -6
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
'use strict';
|
|
2
3
|
|
|
3
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
5
|
|
|
5
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
7
|
var react = require('react');
|
|
8
|
+
var reactRouterDom = require('react-router-dom');
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* Copyright (c) [2026] [ankjs]
|
|
@@ -214,6 +216,28 @@ const Button = (props) => {
|
|
|
214
216
|
}, disabled: disabled, children: btnName ? btnName : children }));
|
|
215
217
|
};
|
|
216
218
|
|
|
219
|
+
const AuthGuard = ({ children = {}, isAllowed = false, redirectTo = "/login" }) => {
|
|
220
|
+
const location = reactRouterDom.useLocation();
|
|
221
|
+
if (!isAllowed) {
|
|
222
|
+
return jsxRuntime.jsx(reactRouterDom.Navigate, { to: redirectTo, state: { from: location }, replace: true });
|
|
223
|
+
}
|
|
224
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
|
|
225
|
+
};
|
|
226
|
+
const BrowserRouter = ({ routes, authStatus, loginPath = "/login", globalFallback = jsxRuntime.jsx("div", { children: "Loading..." }) }) => {
|
|
227
|
+
const router = react.useMemo(() => {
|
|
228
|
+
const routesData = routes.map((route) => {
|
|
229
|
+
const { path, importFunc, element, fallback, scrollType = "same-area", protectRouter = false } = route;
|
|
230
|
+
// যদি importFunc থাকে তবে lazy load করবে, নতুবা সরাসরি element ব্যবহার করবে
|
|
231
|
+
const ComponentToRender = importFunc ? react.lazy(importFunc) : null;
|
|
232
|
+
const finalElement = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(reactRouterDom.ScrollRestoration, { getKey: (location) => scrollType === "reset" ? location.key : "app-global-scroll" }), jsxRuntime.jsx(react.Suspense, { fallback: fallback || globalFallback, children: protectRouter ? (jsxRuntime.jsx(AuthGuard, { isAllowed: authStatus, redirectTo: loginPath, children: element || (ComponentToRender && jsxRuntime.jsx(ComponentToRender, {})) })) : (element || (ComponentToRender && jsxRuntime.jsx(ComponentToRender, {}))) })] }));
|
|
233
|
+
return { path, element: finalElement };
|
|
234
|
+
});
|
|
235
|
+
return reactRouterDom.createBrowserRouter(routesData);
|
|
236
|
+
}, [routes, authStatus, loginPath, globalFallback]);
|
|
237
|
+
return jsxRuntime.jsx(reactRouterDom.RouterProvider, { router: router });
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
exports.BrowserRouter = BrowserRouter;
|
|
217
241
|
exports.Button = Button;
|
|
218
242
|
exports.default = AnkThemeProvider;
|
|
219
243
|
exports.useThemeColors = useThemeColors;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx","../src/components/button/Button.tsx"],"sourcesContent":[null,null,null,null,null,null,null],"names":["createContext","useState","useEffect","defaultLight","defaultDark","useContext","light","dark","_jsx","useCallback","useMemo"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx","../src/components/button/Button.tsx","../src/navigation/BrowserRouter.tsx"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["createContext","useState","useEffect","defaultLight","defaultDark","useContext","light","dark","_jsx","useCallback","useMemo","useLocation","Navigate","_Fragment","lazy","_jsxs","ScrollRestoration","Suspense","createBrowserRouter","RouterProvider"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { createContext, useState, useEffect, useContext, useCallback, useMemo, lazy, Suspense } from 'react';
|
|
4
|
+
import { ScrollRestoration, createBrowserRouter, RouterProvider, useLocation, Navigate } from 'react-router-dom';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* Copyright (c) [2026] [ankjs]
|
|
@@ -210,5 +212,26 @@ const Button = (props) => {
|
|
|
210
212
|
}, disabled: disabled, children: btnName ? btnName : children }));
|
|
211
213
|
};
|
|
212
214
|
|
|
213
|
-
|
|
215
|
+
const AuthGuard = ({ children = {}, isAllowed = false, redirectTo = "/login" }) => {
|
|
216
|
+
const location = useLocation();
|
|
217
|
+
if (!isAllowed) {
|
|
218
|
+
return jsx(Navigate, { to: redirectTo, state: { from: location }, replace: true });
|
|
219
|
+
}
|
|
220
|
+
return jsx(Fragment, { children: children });
|
|
221
|
+
};
|
|
222
|
+
const BrowserRouter = ({ routes, authStatus, loginPath = "/login", globalFallback = jsx("div", { children: "Loading..." }) }) => {
|
|
223
|
+
const router = useMemo(() => {
|
|
224
|
+
const routesData = routes.map((route) => {
|
|
225
|
+
const { path, importFunc, element, fallback, scrollType = "same-area", protectRouter = false } = route;
|
|
226
|
+
// যদি importFunc থাকে তবে lazy load করবে, নতুবা সরাসরি element ব্যবহার করবে
|
|
227
|
+
const ComponentToRender = importFunc ? lazy(importFunc) : null;
|
|
228
|
+
const finalElement = (jsxs(Fragment, { children: [jsx(ScrollRestoration, { getKey: (location) => scrollType === "reset" ? location.key : "app-global-scroll" }), jsx(Suspense, { fallback: fallback || globalFallback, children: protectRouter ? (jsx(AuthGuard, { isAllowed: authStatus, redirectTo: loginPath, children: element || (ComponentToRender && jsx(ComponentToRender, {})) })) : (element || (ComponentToRender && jsx(ComponentToRender, {}))) })] }));
|
|
229
|
+
return { path, element: finalElement };
|
|
230
|
+
});
|
|
231
|
+
return createBrowserRouter(routesData);
|
|
232
|
+
}, [routes, authStatus, loginPath, globalFallback]);
|
|
233
|
+
return jsx(RouterProvider, { router: router });
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
export { BrowserRouter, Button, AnkThemeProvider as default, useThemeColors };
|
|
214
237
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx","../src/components/button/Button.tsx"],"sourcesContent":[null,null,null,null,null,null,null],"names":["defaultLight","defaultDark","light","dark","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/contexts/AnkThemeContext.ts","../src/hook/useSystemTheme.ts","../src/constants/colors.ts","../src/hook/useThemeColors.ts","../src/providers/MainUiView.tsx","../src/providers/AnkThemeProvider.tsx","../src/components/button/Button.tsx","../src/navigation/BrowserRouter.tsx"],"sourcesContent":[null,null,null,null,null,null,null,null],"names":["defaultLight","defaultDark","light","dark","_jsx","_Fragment","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { BrowserRouterProps } from '../types/browserRouterTypes';
|
|
3
|
+
declare const BrowserRouter: React.FC<BrowserRouterProps>;
|
|
4
|
+
export default BrowserRouter;
|
|
5
|
+
/***** use
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
*
|
|
9
|
+
|
|
10
|
+
import { BrowserRouter } from 'your-npm-package';
|
|
11
|
+
|
|
12
|
+
const routes = [
|
|
13
|
+
{
|
|
14
|
+
path: "/",
|
|
15
|
+
// ইউজার নিজের প্রজেক্ট থেকে ইমপোর্ট ফাংশন দিচ্ছে
|
|
16
|
+
importFunc: () => import("./pages/Home"),
|
|
17
|
+
protectRouter: false
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
path: "/dashboard",
|
|
21
|
+
// অথবা সরাসরি কম্পোনেন্ট দিচ্ছে
|
|
22
|
+
element: <Dashboard />,
|
|
23
|
+
protectRouter: true,
|
|
24
|
+
scrollType: "reset"
|
|
25
|
+
}
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
// App.tsx
|
|
29
|
+
<BrowserRouter routes={routes} authStatus={isLoggedIn} /> />
|
|
30
|
+
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
const AuthGuard = (props: RouterProtectProps) => {
|
|
35
|
+
const {
|
|
36
|
+
children = {},
|
|
37
|
+
isAllowed = false,
|
|
38
|
+
redirectTo = "/login"
|
|
39
|
+
} = props;
|
|
40
|
+
|
|
41
|
+
const location = useLocation();
|
|
42
|
+
|
|
43
|
+
if (!isAllowed) {
|
|
44
|
+
// Redirect to login, but keep the current location in state
|
|
45
|
+
// so we can redirect back after login.
|
|
46
|
+
return <Navigate to={redirectTo} state={{ from: location }} replace />;
|
|
47
|
+
}
|
|
48
|
+
return children && children
|
|
49
|
+
};
|
|
50
|
+
The Enhanced BrowserRouter
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
const BrowserRouter = (props: BrowserRouterProps) => {
|
|
54
|
+
const {
|
|
55
|
+
routes = [],
|
|
56
|
+
authStatus = false
|
|
57
|
+
} = props;
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
const router = useMemo(() => {
|
|
61
|
+
const routesData = routes.map((route) => {
|
|
62
|
+
const {
|
|
63
|
+
path,
|
|
64
|
+
dir = "pages", // Folder name
|
|
65
|
+
fileName, // File name
|
|
66
|
+
fallback = <div className="loader">Loading...</div>,
|
|
67
|
+
scrollType = "same-area",
|
|
68
|
+
protectRouter = false,
|
|
69
|
+
component = {}
|
|
70
|
+
} = route;
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// Dynamic Lazy Import
|
|
74
|
+
const LazyComponent = lazy(() => import(`../${dir}/${fileName}.jsx`));
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
const element = (
|
|
78
|
+
<>
|
|
79
|
+
<ScrollRestoration
|
|
80
|
+
getKey={(location) => {
|
|
81
|
+
// 'reset' forces a new scroll top, 'same-area' preserves it
|
|
82
|
+
return scrollType === "reset" ? location.key : "app-global-scroll";
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
<Suspense fallback={fallback}>
|
|
86
|
+
{protectRouter ? (
|
|
87
|
+
<div>
|
|
88
|
+
<AuthGuard isAllowed={authStatus}>
|
|
89
|
+
{component}
|
|
90
|
+
</AuthGuard>
|
|
91
|
+
</div>
|
|
92
|
+
) : (
|
|
93
|
+
<div>
|
|
94
|
+
{component && component}
|
|
95
|
+
</div>
|
|
96
|
+
)}
|
|
97
|
+
</Suspense>
|
|
98
|
+
</>
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
return { path, element };
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
return createBrowserRouter(routesData);
|
|
105
|
+
}, [routes, authStatus]);
|
|
106
|
+
|
|
107
|
+
return <RouterProvider router={router} />;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default BrowserRouter;
|
|
111
|
+
|
|
112
|
+
*/
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ReactNode, ComponentType } from 'react';
|
|
2
|
+
export interface RouteConfig {
|
|
3
|
+
path: string;
|
|
4
|
+
importFunc?: () => Promise<{
|
|
5
|
+
default: ComponentType<any>;
|
|
6
|
+
}>;
|
|
7
|
+
element?: ReactNode;
|
|
8
|
+
fallback?: ReactNode;
|
|
9
|
+
scrollType?: "reset" | "same-area";
|
|
10
|
+
protectRouter?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface BrowserRouterProps {
|
|
13
|
+
routes: RouteConfig[];
|
|
14
|
+
authStatus: boolean;
|
|
15
|
+
loginPath?: string;
|
|
16
|
+
globalFallback?: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
export type RouterProtectProps = {
|
|
19
|
+
children: ReactNode;
|
|
20
|
+
redirectTo: string;
|
|
21
|
+
isAllowed: boolean;
|
|
22
|
+
};
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactNode, ChangeEvent, CSSProperties } from 'react';
|
|
2
2
|
export interface InputProps {
|
|
3
|
+
name?: string;
|
|
4
|
+
label?: string;
|
|
3
5
|
placeholder?: string;
|
|
4
6
|
value?: string;
|
|
5
|
-
onChange?: (
|
|
7
|
+
onChange?: (val: string) => void;
|
|
8
|
+
onChangeEvent?: (e?: ChangeEvent<HTMLInputElement>) => void;
|
|
9
|
+
error?: string;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
required?: string;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
style?: CSSProperties;
|
|
6
14
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ankjs/react-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "A simple React UI Library",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
@@ -46,5 +46,8 @@
|
|
|
46
46
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
47
47
|
"tslib": "^2.8.1",
|
|
48
48
|
"typescript": "^6.0.2"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"react-router-dom": "^7.14.1"
|
|
49
52
|
}
|
|
50
53
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { InputProps } from '../../types/inputTypes'
|
|
3
|
-
import useThemeColors
|
|
3
|
+
import useThemeColors from '../../hook/useThemeColors';
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -13,7 +13,7 @@ const Input = (props: InputProps) => {
|
|
|
13
13
|
placeholder = "",
|
|
14
14
|
value = "",
|
|
15
15
|
onChange = (val) => { },
|
|
16
|
-
onChangeEvent,
|
|
16
|
+
onChangeEvent = (e) => { },
|
|
17
17
|
error = "",
|
|
18
18
|
disabled = false,
|
|
19
19
|
required = false,
|
|
@@ -105,10 +105,9 @@ const Input = (props: InputProps) => {
|
|
|
105
105
|
<input
|
|
106
106
|
style={inputStyle}
|
|
107
107
|
value={value}
|
|
108
|
-
onChangeEvent={onChangeEvent}
|
|
109
108
|
onChange={(e) => {
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
onChange(e.target.value);
|
|
110
|
+
onChangeEvent(e);
|
|
112
111
|
}}
|
|
113
112
|
disabled={disabled}
|
|
114
113
|
/>
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
|
|
2
|
+
import React, { lazy, Suspense, useMemo } from 'react';
|
|
3
|
+
import {
|
|
4
|
+
createBrowserRouter,
|
|
5
|
+
RouterProvider,
|
|
6
|
+
Navigate,
|
|
7
|
+
useLocation,
|
|
8
|
+
ScrollRestoration
|
|
9
|
+
} from 'react-router-dom';
|
|
10
|
+
|
|
11
|
+
import type { BrowserRouterProps, RouterProtectProps } from '../types/browserRouterTypes'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const AuthGuard: React.FC<RouterProtectProps> = ({
|
|
18
|
+
children = {},
|
|
19
|
+
isAllowed = false,
|
|
20
|
+
redirectTo = "/login"
|
|
21
|
+
}) => {
|
|
22
|
+
const location = useLocation();
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
if (!isAllowed) {
|
|
26
|
+
return <Navigate to={redirectTo} state={{ from: location }} replace />;
|
|
27
|
+
}
|
|
28
|
+
return <>{children}</>;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const BrowserRouter: React.FC<BrowserRouterProps> = ({
|
|
32
|
+
routes,
|
|
33
|
+
authStatus,
|
|
34
|
+
loginPath = "/login",
|
|
35
|
+
globalFallback = <div>Loading...</div>
|
|
36
|
+
}) => {
|
|
37
|
+
|
|
38
|
+
const router = useMemo(() => {
|
|
39
|
+
const routesData = routes.map((route) => {
|
|
40
|
+
const {
|
|
41
|
+
path,
|
|
42
|
+
importFunc,
|
|
43
|
+
element,
|
|
44
|
+
fallback,
|
|
45
|
+
scrollType = "same-area",
|
|
46
|
+
protectRouter = false
|
|
47
|
+
} = route;
|
|
48
|
+
|
|
49
|
+
// যদি importFunc থাকে তবে lazy load করবে, নতুবা সরাসরি element ব্যবহার করবে
|
|
50
|
+
const ComponentToRender = importFunc ? lazy(importFunc) : null;
|
|
51
|
+
|
|
52
|
+
const finalElement = (
|
|
53
|
+
<>
|
|
54
|
+
<ScrollRestoration
|
|
55
|
+
getKey={(location) =>
|
|
56
|
+
scrollType === "reset" ? location.key : "app-global-scroll"
|
|
57
|
+
}
|
|
58
|
+
/>
|
|
59
|
+
<Suspense fallback={fallback || globalFallback}>
|
|
60
|
+
{protectRouter ? (
|
|
61
|
+
<AuthGuard isAllowed={authStatus} redirectTo={loginPath}>
|
|
62
|
+
{element || (ComponentToRender && <ComponentToRender />)}
|
|
63
|
+
</AuthGuard>
|
|
64
|
+
) : (
|
|
65
|
+
element || (ComponentToRender && <ComponentToRender />)
|
|
66
|
+
)}
|
|
67
|
+
</Suspense>
|
|
68
|
+
</>
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
return { path, element: finalElement };
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
return createBrowserRouter(routesData);
|
|
75
|
+
}, [routes, authStatus, loginPath, globalFallback]);
|
|
76
|
+
|
|
77
|
+
return <RouterProvider router={router} />;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
export default BrowserRouter;
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/***** use
|
|
87
|
+
*
|
|
88
|
+
*
|
|
89
|
+
*
|
|
90
|
+
|
|
91
|
+
import { BrowserRouter } from 'your-npm-package';
|
|
92
|
+
|
|
93
|
+
const routes = [
|
|
94
|
+
{
|
|
95
|
+
path: "/",
|
|
96
|
+
// ইউজার নিজের প্রজেক্ট থেকে ইমপোর্ট ফাংশন দিচ্ছে
|
|
97
|
+
importFunc: () => import("./pages/Home"),
|
|
98
|
+
protectRouter: false
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
path: "/dashboard",
|
|
102
|
+
// অথবা সরাসরি কম্পোনেন্ট দিচ্ছে
|
|
103
|
+
element: <Dashboard />,
|
|
104
|
+
protectRouter: true,
|
|
105
|
+
scrollType: "reset"
|
|
106
|
+
}
|
|
107
|
+
];
|
|
108
|
+
|
|
109
|
+
// App.tsx
|
|
110
|
+
<BrowserRouter routes={routes} authStatus={isLoggedIn} /> />
|
|
111
|
+
|
|
112
|
+
*
|
|
113
|
+
*/
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
const AuthGuard = (props: RouterProtectProps) => {
|
|
121
|
+
const {
|
|
122
|
+
children = {},
|
|
123
|
+
isAllowed = false,
|
|
124
|
+
redirectTo = "/login"
|
|
125
|
+
} = props;
|
|
126
|
+
|
|
127
|
+
const location = useLocation();
|
|
128
|
+
|
|
129
|
+
if (!isAllowed) {
|
|
130
|
+
// Redirect to login, but keep the current location in state
|
|
131
|
+
// so we can redirect back after login.
|
|
132
|
+
return <Navigate to={redirectTo} state={{ from: location }} replace />;
|
|
133
|
+
}
|
|
134
|
+
return children && children
|
|
135
|
+
};
|
|
136
|
+
The Enhanced BrowserRouter
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
const BrowserRouter = (props: BrowserRouterProps) => {
|
|
140
|
+
const {
|
|
141
|
+
routes = [],
|
|
142
|
+
authStatus = false
|
|
143
|
+
} = props;
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
const router = useMemo(() => {
|
|
147
|
+
const routesData = routes.map((route) => {
|
|
148
|
+
const {
|
|
149
|
+
path,
|
|
150
|
+
dir = "pages", // Folder name
|
|
151
|
+
fileName, // File name
|
|
152
|
+
fallback = <div className="loader">Loading...</div>,
|
|
153
|
+
scrollType = "same-area",
|
|
154
|
+
protectRouter = false,
|
|
155
|
+
component = {}
|
|
156
|
+
} = route;
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
// Dynamic Lazy Import
|
|
160
|
+
const LazyComponent = lazy(() => import(`../${dir}/${fileName}.jsx`));
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
const element = (
|
|
164
|
+
<>
|
|
165
|
+
<ScrollRestoration
|
|
166
|
+
getKey={(location) => {
|
|
167
|
+
// 'reset' forces a new scroll top, 'same-area' preserves it
|
|
168
|
+
return scrollType === "reset" ? location.key : "app-global-scroll";
|
|
169
|
+
}}
|
|
170
|
+
/>
|
|
171
|
+
<Suspense fallback={fallback}>
|
|
172
|
+
{protectRouter ? (
|
|
173
|
+
<div>
|
|
174
|
+
<AuthGuard isAllowed={authStatus}>
|
|
175
|
+
{component}
|
|
176
|
+
</AuthGuard>
|
|
177
|
+
</div>
|
|
178
|
+
) : (
|
|
179
|
+
<div>
|
|
180
|
+
{component && component}
|
|
181
|
+
</div>
|
|
182
|
+
)}
|
|
183
|
+
</Suspense>
|
|
184
|
+
</>
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
return { path, element };
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
return createBrowserRouter(routesData);
|
|
191
|
+
}, [routes, authStatus]);
|
|
192
|
+
|
|
193
|
+
return <RouterProvider router={router} />;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export default BrowserRouter;
|
|
197
|
+
|
|
198
|
+
*/
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
/*
|
|
204
|
+
|
|
205
|
+
const routes = [
|
|
206
|
+
{
|
|
207
|
+
path: "/home",
|
|
208
|
+
component: <div>home</div>
|
|
209
|
+
scrollType: "reset"
|
|
210
|
+
}
|
|
211
|
+
];
|
|
212
|
+
|
|
213
|
+
// Inside your BrowserRouter component:
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
// 1. Tell Vite to "pre-index" your entire pages folder
|
|
217
|
+
const pages = import.meta.glob('../pages/*.jsx');
|
|
218
|
+
|
|
219
|
+
// 2. Inside your BrowserRouter mapping:
|
|
220
|
+
const BrowserRouter = ({ routes = [] }) => {
|
|
221
|
+
const routesData = routes.map((route) => {
|
|
222
|
+
// route.importPath would be "../pages/Home.jsx"
|
|
223
|
+
const LazyComponent = lazy(pages[route.importPath]);
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
path: route.path,
|
|
227
|
+
element: (
|
|
228
|
+
<Suspense fallback={route.fallback}>
|
|
229
|
+
<LazyComponent />
|
|
230
|
+
</Suspense>
|
|
231
|
+
)
|
|
232
|
+
};
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
// ... rest of the code
|
|
236
|
+
};
|
|
237
|
+
*/
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ReactNode, ComponentType
|
|
3
|
+
} from 'react';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
export interface RouteConfig {
|
|
10
|
+
path: string;
|
|
11
|
+
// ইউজার এখানে () => import('./...') ফাংশনটি পাঠাবে
|
|
12
|
+
importFunc?: () => Promise<{ default: ComponentType<any> }>;
|
|
13
|
+
// অথবা সরাসরি কম্পোনেন্ট পাঠাতে পারবে
|
|
14
|
+
element?: ReactNode;
|
|
15
|
+
fallback?: ReactNode;
|
|
16
|
+
scrollType?: "reset" | "same-area";
|
|
17
|
+
protectRouter?: boolean;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export interface BrowserRouterProps {
|
|
21
|
+
routes: RouteConfig[];
|
|
22
|
+
authStatus: boolean;
|
|
23
|
+
loginPath?: string;
|
|
24
|
+
globalFallback?: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export type RouterProtectProps = {
|
|
29
|
+
children: ReactNode;
|
|
30
|
+
redirectTo: string;
|
|
31
|
+
isAllowed: boolean;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
/*
|
|
44
|
+
|
|
45
|
+
const AuthGuard: React.FC<{
|
|
46
|
+
isAllowed: boolean;
|
|
47
|
+
redirectTo: string;
|
|
48
|
+
children: React.ReactNode
|
|
49
|
+
}> = ({ isAllowed, redirectTo, children }) => {
|
|
50
|
+
const location = useLocation();
|
|
51
|
+
if (!isAllowed) {
|
|
52
|
+
return <Navigate to={redirectTo} state={{ from: location }} replace />;
|
|
53
|
+
}
|
|
54
|
+
return <>{children}</>;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const BrowserRouter: React.FC<BrowserRouterProps> = ({
|
|
58
|
+
routes,
|
|
59
|
+
authStatus,
|
|
60
|
+
loginPath = "/login",
|
|
61
|
+
globalFallback = <div>Loading...</div>
|
|
62
|
+
}) => {
|
|
63
|
+
|
|
64
|
+
const router = useMemo(() => {
|
|
65
|
+
const routesData = routes.map((route) => {
|
|
66
|
+
const {
|
|
67
|
+
path,
|
|
68
|
+
importFunc,
|
|
69
|
+
element,
|
|
70
|
+
fallback,
|
|
71
|
+
scrollType = "same-area",
|
|
72
|
+
protectRouter = false
|
|
73
|
+
} = route;
|
|
74
|
+
|
|
75
|
+
// যদি importFunc থাকে তবে lazy load করবে, নতুবা সরাসরি element ব্যবহার করবে
|
|
76
|
+
const ComponentToRender = importFunc ? lazy(importFunc) : null;
|
|
77
|
+
|
|
78
|
+
const finalElement = (
|
|
79
|
+
<>
|
|
80
|
+
<ScrollRestoration
|
|
81
|
+
getKey={(location) =>
|
|
82
|
+
scrollType === "reset" ? location.key : "app-global-scroll"
|
|
83
|
+
}
|
|
84
|
+
/>
|
|
85
|
+
<Suspense fallback={fallback || globalFallback}>
|
|
86
|
+
{protectRouter ? (
|
|
87
|
+
<AuthGuard isAllowed={authStatus} redirectTo={loginPath}>
|
|
88
|
+
{element || (ComponentToRender && <ComponentToRender />)}
|
|
89
|
+
</AuthGuard>
|
|
90
|
+
) : (
|
|
91
|
+
element || (ComponentToRender && <ComponentToRender />)
|
|
92
|
+
)}
|
|
93
|
+
</Suspense>
|
|
94
|
+
</>
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return { path, element: finalElement };
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return createBrowserRouter(routesData);
|
|
101
|
+
}, [routes, authStatus, loginPath, globalFallback]);
|
|
102
|
+
|
|
103
|
+
return <RouterProvider router={router} />;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export default BrowserRouter;
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
/*
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
*/
|
package/src/types/inputTypes.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React, {
|
|
2
|
+
ReactNode,
|
|
3
|
+
ChangeEvent,
|
|
4
|
+
CSSProperties
|
|
5
|
+
} from 'react';
|
|
2
6
|
|
|
3
7
|
|
|
4
8
|
|
|
5
9
|
export interface InputProps {
|
|
10
|
+
name?: string;
|
|
11
|
+
label?: string;
|
|
6
12
|
placeholder?: string;
|
|
7
13
|
value?: string;
|
|
8
|
-
onChange?: (
|
|
14
|
+
onChange?: (val: string) => void;
|
|
15
|
+
onChangeEvent?: (e?: ChangeEvent<HTMLInputElement>) => void;
|
|
16
|
+
error?: string;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
required?: string;
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
style?: CSSProperties;
|
|
9
21
|
}
|