create-catalyst-app 0.0.1-beta.0 → 0.0.1-beta.10

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.
Files changed (197) hide show
  1. package/{readme.md → Readme.md} +7 -4
  2. package/codemod/new-route/index.js +98 -0
  3. package/codemod/new-route/template.js +119 -0
  4. package/codemod/new-route/transformers/createReducer.js +38 -0
  5. package/codemod/new-route/transformers/createRoute.js +33 -0
  6. package/codemod/new-route/utils.js +90 -0
  7. package/license +10 -0
  8. package/package.json +18 -18
  9. package/scripts/cli.cjs +259 -0
  10. package/templates/common/.eslintignore +1 -6
  11. package/templates/common/.eslintrc +13 -38
  12. package/templates/common/README.md +16 -20
  13. package/templates/common/api.js +12 -25
  14. package/templates/common/client/styles.js +1 -13
  15. package/templates/common/config/config.json +10 -16
  16. package/templates/common/public/favicon.ico +0 -0
  17. package/templates/{redux-js → common}/server/document.js +2 -4
  18. package/templates/common/server/index.js +2 -0
  19. package/templates/common/server/server.js +8 -0
  20. package/templates/common/src/js/containers/Home/Home.js +23 -40
  21. package/templates/common/src/js/containers/Home/Home.scss +34 -0
  22. package/templates/common/src/js/routes/index.js +9 -48
  23. package/templates/common/src/static/css/base/index.scss +0 -7
  24. package/templates/common/src/static/css/base/styles.scss +0 -160
  25. package/templates/common/src/static/css/resources/_variables.scss +0 -172
  26. package/templates/{redux-js → common}/webpackConfig.js +2 -2
  27. package/templates/none-js/client/index.js +8 -12
  28. package/templates/none-js/package.json +13 -36
  29. package/templates/none-js/src/js/containers/App/index.js +12 -36
  30. package/templates/none-js/src/js/routes/utils.js +42 -0
  31. package/templates/redux-js/client/index.js +6 -5
  32. package/templates/redux-js/package.json +16 -36
  33. package/templates/redux-js/src/js/containers/App/actions.js +1 -4
  34. package/templates/redux-js/src/js/containers/App/index.js +12 -38
  35. package/templates/redux-js/src/js/containers/App/reducer.js +15 -17
  36. package/templates/redux-js/src/js/routes/utils.js +42 -0
  37. package/templates/redux-js/src/js/store/index.js +17 -68
  38. package/templates/rtk-js/client/index.js +6 -5
  39. package/templates/rtk-js/package.json +16 -36
  40. package/templates/rtk-js/src/js/containers/App/index.js +12 -38
  41. package/templates/rtk-js/src/js/containers/App/reducer.js +1 -9
  42. package/templates/rtk-js/src/js/routes/utils.js +42 -0
  43. package/templates/rtk-js/src/js/store/index.js +12 -6
  44. package/scripts/cli.mjs +0 -267
  45. package/templates/common/.babelrc +0 -26
  46. package/templates/common/.editorconfig +0 -12
  47. package/templates/common/.stylelintrc +0 -35
  48. package/templates/common/checkVersion.js +0 -3
  49. package/templates/common/client/index.js +0 -39
  50. package/templates/common/config/config_template.json +0 -18
  51. package/templates/common/config/index.js +0 -77
  52. package/templates/common/package.json +0 -57
  53. package/templates/common/server/CustomDocument.js +0 -14
  54. package/templates/common/server/customIndex.js +0 -3
  55. package/templates/common/server/customServer.js +0 -16
  56. package/templates/common/src/js/containers/App/actions.js +0 -20
  57. package/templates/common/src/js/containers/App/index.js +0 -46
  58. package/templates/common/src/js/containers/App/reducer.js +0 -21
  59. package/templates/common/src/js/containers/PDP/PDP.js +0 -37
  60. package/templates/common/src/js/reducer/index.js +0 -80
  61. package/templates/common/src/js/stateManager/stateProvider.js +0 -34
  62. package/templates/common/src/js/store/index.js +0 -77
  63. package/templates/common/src/static/css/base/_overrides.scss +0 -81
  64. package/templates/common/src/static/css/base/animations.js +0 -38
  65. package/templates/common/src/static/css/base/layout.scss +0 -242
  66. package/templates/common/src/static/css/base/typography.scss +0 -285
  67. package/templates/common/src/static/css/resources/_mixins.scss +0 -196
  68. package/templates/common/src/static/css/resources/_vendors.scss +0 -1
  69. package/templates/common/src/static/fonts/.gitkeep +0 -0
  70. package/templates/common/src/static/fonts/Inter-Bold-Subset.otf +0 -0
  71. package/templates/common/src/static/fonts/Inter-Italic-Subset.otf +0 -0
  72. package/templates/common/src/static/fonts/Inter-Light-Subset.otf +0 -0
  73. package/templates/common/src/static/fonts/Inter-Medium-Subset.otf +0 -0
  74. package/templates/common/src/static/fonts/Inter-Regular-Subset.otf +0 -0
  75. package/templates/common/src/static/fonts/Inter-SemiBold-Subset.otf +0 -0
  76. package/templates/common/src/static/fonts/Poppins-Bold-Subset.woff2 +0 -0
  77. package/templates/common/src/static/fonts/Poppins-Italic-Subset.woff2 +0 -0
  78. package/templates/common/src/static/fonts/Poppins-Light-Subset.woff2 +0 -0
  79. package/templates/common/src/static/fonts/Poppins-Medium-Subset.woff2 +0 -0
  80. package/templates/common/src/static/fonts/Poppins-Regular-Subset.woff2 +0 -0
  81. package/templates/common/src/static/fonts/Poppins-SemiBold-Subset.woff2 +0 -0
  82. package/templates/none-js/.babelrc +0 -26
  83. package/templates/none-js/.eslintignore +0 -6
  84. package/templates/none-js/.eslintrc +0 -53
  85. package/templates/none-js/.prettierrc.json +0 -7
  86. package/templates/none-js/.stylelintrc +0 -35
  87. package/templates/none-js/README.md +0 -22
  88. package/templates/none-js/api.js +0 -29
  89. package/templates/none-js/checkVersion.js +0 -3
  90. package/templates/none-js/client/styles.js +0 -15
  91. package/templates/none-js/config/config.json +0 -15
  92. package/templates/none-js/config/config_template.json +0 -18
  93. package/templates/none-js/config/index.js +0 -44
  94. package/templates/none-js/server/document.js +0 -14
  95. package/templates/none-js/server/index.js +0 -3
  96. package/templates/none-js/server/server.js +0 -16
  97. package/templates/none-js/src/js/containers/DemoPage/DemoPage.js +0 -39
  98. package/templates/none-js/src/js/containers/DemoPage/DemoPage.scss +0 -3
  99. package/templates/none-js/src/js/containers/Home/Home.js +0 -27
  100. package/templates/none-js/src/js/containers/Home/Home.scss +0 -36
  101. package/templates/none-js/src/js/routes/index.js +0 -49
  102. package/templates/none-js/src/js/stateManager/stateProvider.js +0 -19
  103. package/templates/none-js/src/js/store/index.js +0 -6
  104. package/templates/none-js/src/static/css/base/index.scss +0 -3
  105. package/templates/none-js/src/static/css/base/styles.scss +0 -11
  106. package/templates/none-js/src/static/css/base/typography.scss +0 -53
  107. package/templates/none-js/src/static/css/resources/_variables.scss +0 -1
  108. package/templates/none-js/src/static/fonts/.gitkeep +0 -0
  109. package/templates/none-js/src/static/fonts/Inter-Bold-Subset.otf +0 -0
  110. package/templates/none-js/src/static/fonts/Inter-Italic-Subset.otf +0 -0
  111. package/templates/none-js/src/static/fonts/Inter-Light-Subset.otf +0 -0
  112. package/templates/none-js/src/static/fonts/Inter-Medium-Subset.otf +0 -0
  113. package/templates/none-js/src/static/fonts/Inter-Regular-Subset.otf +0 -0
  114. package/templates/none-js/src/static/fonts/Inter-SemiBold-Subset.otf +0 -0
  115. package/templates/none-js/src/static/fonts/Poppins-Bold-Subset.woff2 +0 -0
  116. package/templates/none-js/src/static/fonts/Poppins-Italic-Subset.woff2 +0 -0
  117. package/templates/none-js/src/static/fonts/Poppins-Medium-Subset.woff2 +0 -0
  118. package/templates/none-js/src/static/fonts/Poppins-Regular-Subset.woff2 +0 -0
  119. package/templates/none-js/src/static/fonts/Poppins-SemiBold-Subset.woff2 +0 -0
  120. package/templates/none-js/webpackConfig.js +0 -5
  121. package/templates/redux-js/.babelrc +0 -26
  122. package/templates/redux-js/.eslintignore +0 -6
  123. package/templates/redux-js/.eslintrc +0 -53
  124. package/templates/redux-js/.prettierrc.json +0 -7
  125. package/templates/redux-js/.stylelintrc +0 -35
  126. package/templates/redux-js/README.md +0 -22
  127. package/templates/redux-js/api.js +0 -29
  128. package/templates/redux-js/checkVersion.js +0 -3
  129. package/templates/redux-js/client/styles.js +0 -15
  130. package/templates/redux-js/config/config.json +0 -15
  131. package/templates/redux-js/config/config_template.json +0 -18
  132. package/templates/redux-js/config/index.js +0 -44
  133. package/templates/redux-js/server/index.js +0 -3
  134. package/templates/redux-js/server/server.js +0 -16
  135. package/templates/redux-js/src/js/containers/DemoPage/DemoPage.js +0 -39
  136. package/templates/redux-js/src/js/containers/DemoPage/DemoPage.scss +0 -3
  137. package/templates/redux-js/src/js/containers/Home/Home.js +0 -27
  138. package/templates/redux-js/src/js/containers/Home/Home.scss +0 -36
  139. package/templates/redux-js/src/js/reducer/index.js +0 -80
  140. package/templates/redux-js/src/js/routes/index.js +0 -49
  141. package/templates/redux-js/src/js/stateManager/stateProvider.js +0 -34
  142. package/templates/redux-js/src/static/css/base/index.scss +0 -3
  143. package/templates/redux-js/src/static/css/base/styles.scss +0 -11
  144. package/templates/redux-js/src/static/css/base/typography.scss +0 -53
  145. package/templates/redux-js/src/static/css/resources/_variables.scss +0 -1
  146. package/templates/redux-js/src/static/fonts/.gitkeep +0 -0
  147. package/templates/redux-js/src/static/fonts/Inter-Bold-Subset.otf +0 -0
  148. package/templates/redux-js/src/static/fonts/Inter-Italic-Subset.otf +0 -0
  149. package/templates/redux-js/src/static/fonts/Inter-Light-Subset.otf +0 -0
  150. package/templates/redux-js/src/static/fonts/Inter-Medium-Subset.otf +0 -0
  151. package/templates/redux-js/src/static/fonts/Inter-Regular-Subset.otf +0 -0
  152. package/templates/redux-js/src/static/fonts/Inter-SemiBold-Subset.otf +0 -0
  153. package/templates/redux-js/src/static/fonts/Poppins-Bold-Subset.woff2 +0 -0
  154. package/templates/redux-js/src/static/fonts/Poppins-Italic-Subset.woff2 +0 -0
  155. package/templates/redux-js/src/static/fonts/Poppins-Medium-Subset.woff2 +0 -0
  156. package/templates/redux-js/src/static/fonts/Poppins-Regular-Subset.woff2 +0 -0
  157. package/templates/redux-js/src/static/fonts/Poppins-SemiBold-Subset.woff2 +0 -0
  158. package/templates/rtk-js/.babelrc +0 -26
  159. package/templates/rtk-js/.eslintignore +0 -6
  160. package/templates/rtk-js/.eslintrc +0 -53
  161. package/templates/rtk-js/.prettierrc.json +0 -7
  162. package/templates/rtk-js/.stylelintrc +0 -35
  163. package/templates/rtk-js/README.md +0 -23
  164. package/templates/rtk-js/api.js +0 -29
  165. package/templates/rtk-js/checkVersion.js +0 -3
  166. package/templates/rtk-js/client/styles.js +0 -15
  167. package/templates/rtk-js/config/config.json +0 -15
  168. package/templates/rtk-js/config/config_template.json +0 -18
  169. package/templates/rtk-js/config/index.js +0 -44
  170. package/templates/rtk-js/server/document.js +0 -14
  171. package/templates/rtk-js/server/index.js +0 -3
  172. package/templates/rtk-js/server/server.js +0 -16
  173. package/templates/rtk-js/src/js/containers/DemoPage/DemoPage.js +0 -39
  174. package/templates/rtk-js/src/js/containers/DemoPage/DemoPage.scss +0 -3
  175. package/templates/rtk-js/src/js/containers/Home/Home.js +0 -27
  176. package/templates/rtk-js/src/js/containers/Home/Home.scss +0 -36
  177. package/templates/rtk-js/src/js/reducer/index.js +0 -80
  178. package/templates/rtk-js/src/js/routes/index.js +0 -49
  179. package/templates/rtk-js/src/js/stateManager/stateProvider.js +0 -34
  180. package/templates/rtk-js/src/static/css/base/index.scss +0 -3
  181. package/templates/rtk-js/src/static/css/base/styles.scss +0 -11
  182. package/templates/rtk-js/src/static/css/base/typography.scss +0 -53
  183. package/templates/rtk-js/src/static/css/resources/_variables.scss +0 -1
  184. package/templates/rtk-js/src/static/fonts/.gitkeep +0 -0
  185. package/templates/rtk-js/src/static/fonts/Inter-Bold-Subset.otf +0 -0
  186. package/templates/rtk-js/src/static/fonts/Inter-Italic-Subset.otf +0 -0
  187. package/templates/rtk-js/src/static/fonts/Inter-Light-Subset.otf +0 -0
  188. package/templates/rtk-js/src/static/fonts/Inter-Medium-Subset.otf +0 -0
  189. package/templates/rtk-js/src/static/fonts/Inter-Regular-Subset.otf +0 -0
  190. package/templates/rtk-js/src/static/fonts/Inter-SemiBold-Subset.otf +0 -0
  191. package/templates/rtk-js/src/static/fonts/Poppins-Bold-Subset.woff2 +0 -0
  192. package/templates/rtk-js/src/static/fonts/Poppins-Italic-Subset.woff2 +0 -0
  193. package/templates/rtk-js/src/static/fonts/Poppins-Medium-Subset.woff2 +0 -0
  194. package/templates/rtk-js/src/static/fonts/Poppins-Regular-Subset.woff2 +0 -0
  195. package/templates/rtk-js/src/static/fonts/Poppins-SemiBold-Subset.woff2 +0 -0
  196. package/templates/rtk-js/webpackConfig.js +0 -5
  197. /package/{templates/common/.prettierrc.json → .prettierrc.json} +0 -0
@@ -1,42 +1,16 @@
1
- import React, { useState } from "react";
2
- import {
3
- useLocation,
4
- useOutlet,
5
- UNSAFE_LocationContext,
6
- } from "react-router-dom";
7
- import {reduxTest} from "./actions"
8
- import "@css/base/index.scss";
1
+ import React from "react"
2
+ import { Outlet } from "@tata1mg/router"
9
3
 
10
-
11
- export const BaseOutlet = () => {
12
- const o = useOutlet();
13
- const [outlet] = useState(o);
14
-
15
- return <>{outlet}</>;
16
- };
17
4
  const App = () => {
18
-
19
- const location = useLocation();
20
- const page = (
21
- <div key={location.pathname.includes("/auth") ? "" : location.pathname}>
22
- <UNSAFE_LocationContext.Provider value={{ location }}>
23
- <BaseOutlet />
24
- </UNSAFE_LocationContext.Provider>
25
- </div>
26
- );
27
- return (
28
- <div className={"flexColumn"}>
29
- <>
30
- {/* <ShellLocusHeader /> */}
31
- </>
32
- <div>{page}</div>
33
- </div>
34
- );
35
- };
5
+ return (
6
+ <>
7
+ <Outlet />
8
+ </>
9
+ )
10
+ }
36
11
 
37
- App.serverSideFunction = ({store}) => {
38
- store.dispatch(reduxTest())
39
- return new Promise((resolve) => resolve());
40
- };
12
+ App.serverSideFunction = () => {
13
+ return new Promise((resolve) => resolve())
14
+ }
41
15
 
42
- export default App;
16
+ export default App
@@ -1,21 +1,19 @@
1
- import { ShellActions } from "./actions";
1
+ import { ShellActions } from "./actions"
2
2
 
3
3
  export const defaultState = {
4
- testActionDispatched: false,
5
- };
4
+ testActionDispatched: false,
5
+ }
6
6
 
7
- const shellReducer = (state = defaultState, action) => {
8
- switch (action.type) {
9
- case ShellActions.REDUX_TEST: {
10
- return {
11
- ...state,
12
- testActionDispatched: true,
13
- };
14
- }
15
-
16
- default:
17
- return state;
18
- }
19
- };
7
+ export const shellReducer = (state = defaultState, action) => {
8
+ switch (action.type) {
9
+ case ShellActions.REDUX_TEST: {
10
+ return {
11
+ ...state,
12
+ testActionDispatched: true,
13
+ }
14
+ }
20
15
 
21
- export default shellReducer;
16
+ default:
17
+ return state
18
+ }
19
+ }
@@ -0,0 +1,42 @@
1
+ import React from "react"
2
+ import { RouterDataProvider, MetaTag } from "@tata1mg/router"
3
+ import App from "@containers/App"
4
+ import routes from "./index.js"
5
+
6
+ /**
7
+ * Making the routes array compatible with the format accepted by createBrowserRouter
8
+ * API on the client side
9
+ * https://reactrouter.com/en/main/routers/create-browser-router
10
+ */
11
+
12
+ export const preparedRoutes = ({ store, routerInitialState }) => {
13
+ const getPreparedRoutes = (routes) => {
14
+ return routes.map((route, index) => {
15
+ const Component = route.component
16
+ const routeToRender = {
17
+ ...route,
18
+ element: <Component key={index} />,
19
+ }
20
+ if (route.children) {
21
+ routeToRender.children = getPreparedRoutes(route.children)
22
+ }
23
+ return routeToRender
24
+ })
25
+ }
26
+
27
+ return [
28
+ {
29
+ element: (
30
+ <RouterDataProvider config={{}} initialState={routerInitialState} fetcherArgs={{ store }}>
31
+ <MetaTag />
32
+ <App />
33
+ </RouterDataProvider>
34
+ ),
35
+ children: getPreparedRoutes(routes),
36
+ },
37
+ ]
38
+ }
39
+
40
+ export const getRoutes = () => {
41
+ return routes
42
+ }
@@ -1,79 +1,28 @@
1
- import { compose, applyMiddleware,combineReducers } from "redux"
2
- import {configureStore as createStore} from "@reduxjs/toolkit"
3
- import thunk from "redux-thunk"
4
- import { createLogger } from "redux-logger"
5
- import shellReducer from "@containers/App/reducer.js"
6
- import createReducerManager from "../reducer/index.js"
7
- import fetchInstance from "../../../api.js"
1
+ import { configureStore as createStore } from "@reduxjs/toolkit"
2
+ import { combineReducers } from "redux"
3
+ import { shellReducer } from "@containers/App/reducer.js"
4
+ import fetchInstance from "@api"
5
+
8
6
  /**
9
7
  * Function that initializes the store with the initialstate and adds middlewares that can be used during action dispatch
10
8
  * @param {object} initialState Default state
11
- * @param {object} cookies additional headers if needed
12
- * @param {object} requestObj additional information
13
- * @return {object} the store itself
9
+ * @param {object} request Request object that we recieve on server, this is only recieved when store is initialized on the server.
10
+ * @return {object} The store itself
14
11
  */
15
12
 
16
- process.env.NODE_ENV === "production"
17
-
18
- export default function configureStore(initialState, request) {
19
-
20
- // The variable defined below acts as a flag when the store is initialized on the client side
21
- // Reason being that for the first time we need to actually need to forcefully set the reducer for which we have the initial data
22
- let initializeClient = true
23
-
24
- const reducerManager = createReducerManager()
25
-
26
- // FRAMEWORK COMMENT. This should be exposed to user.
13
+ const configureStore = (initialState) => {
27
14
  const api = fetchInstance
28
-
29
-
30
- // disable redux-logger in server - https://github.com/LogRocket/redux-logger/issues/6
31
- const reduxLogger = createLogger({
32
- predicate: () => typeof window !== "undefined",
33
- })
34
- const addReducer = (reducer) => {
35
- // Only executed once when for the first run in client - side
36
- if (initializeClient) {
37
- initializeClient = false
38
- return store.replaceReducer(reducerManager.add(reducer))
39
- }
40
-
41
- // This blocks check if the reducer is already added or not in store
42
- // If not then it only add the missing reducers
43
- // And if the required reducers are already present then we simply return without performing any change
44
- let reducerToAdd = {}
45
- const currentState = store.getState()
46
- for (let key in reducer) {
47
- if (!currentState[key]) {
48
- reducerToAdd[key] = reducer[key]
49
- }
50
- }
51
- if (Object.keys(reducerToAdd).length > 0) {
52
- return store.replaceReducer(reducerManager.add(reducerToAdd))
53
- }
54
- return
55
- }
56
- let middleware = [thunk.withExtraArgument({ api, addReducer })]
57
- if(process.env.NODE_ENV !== "production"){
58
- middleware = [...middleware,reduxLogger]
59
- }
60
- // Add universal enhancers here
61
- let enhancers = []
62
-
63
- const composeEnhancers = process.env.NODE_ENV === "production" && (typeof window !== "undefined" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose
64
- const enhancer = composeEnhancers(...[applyMiddleware(...middleware), ...enhancers])
65
-
66
- // create store with enhancers, middleware, reducers, and initialState
67
- // When the store is initialized on the client side, we are passing a function that just returns the initial State from the server
68
- // This is way we are able to maintain the initial state from the server on the client side and then add the relevant reducers
69
- // Which then consumes the initial state
70
15
  const store = createStore({
71
- reducer:combineReducers({shellReducer}),
72
- preloadedState:initialState
16
+ reducer: combineReducers({ shellReducer }),
17
+ middleware: (getDefaultMiddleware) =>
18
+ getDefaultMiddleware({
19
+ thunk: {
20
+ extraArgument: { api },
21
+ },
22
+ }),
23
+ preloadedState: initialState,
73
24
  })
74
-
75
-
76
25
  return store
77
26
  }
78
27
 
79
-
28
+ export default configureStore
@@ -1,17 +1,18 @@
1
1
  import React from "react"
2
+ import "./styles"
2
3
  import { hydrateRoot } from "react-dom/client"
3
4
  import { loadableReady } from "@loadable/component"
4
5
  import { Provider } from "react-redux"
5
- import { createBrowserRouter, RouterProvider } from "@tata1mg/router"
6
- import { preparedRoutes } from "../src/js/routes/index.js"
7
- import configureStore from "../src/js/store/index.js"
8
- import "./styles"
6
+ import { RouterProvider } from "@tata1mg/router"
7
+ import clientRouter from "catalyst-core/router/ClientRouter"
8
+ import configureStore from "@store"
9
9
 
10
10
  window.addEventListener("load", () => {
11
11
  loadableReady(() => {
12
12
  const { __ROUTER_INITIAL_DATA__: routerInitialData, __INITIAL_STATE__ } = window
13
13
  const store = configureStore(__INITIAL_STATE__ || {})
14
- const router = createBrowserRouter(preparedRoutes({ store, routerInitialState: routerInitialData }))
14
+
15
+ const router = clientRouter({ store, routerInitialState: routerInitialData })
15
16
 
16
17
  const Application = (
17
18
  <Provider store={store} serverState={__INITIAL_STATE__}>
@@ -1,53 +1,33 @@
1
1
  {
2
2
  "name": "create-catalyst-app-starter",
3
3
  "version": "1.0.0",
4
- "description": "This README would normally document whatever steps are necessary to get your application up and running.",
5
- "main": "index.js",
6
- "bin": "scripts/cli.mjs",
7
4
  "scripts": {
8
5
  "start": "catalyst start",
9
6
  "build": "catalyst build",
10
- "serve": "catalyst serve"
7
+ "serve": "catalyst serve",
8
+ "lint": "eslint .",
9
+ "devBuild": "catalyst devBuild",
10
+ "devServe": "catalyst devServe"
11
11
  },
12
12
  "_moduleAliases": {
13
+ "@api": "api.js",
13
14
  "@containers": "src/js/containers",
14
- "@lib": "src/js/lib",
15
- "$server": "server",
16
- "@constants": "src/js/constants",
15
+ "@server": "server",
17
16
  "@config": "config",
18
- "@components": "src/js/components",
19
- "@css": "src/static/css"
20
- },
21
- "repository": {
22
- "type": "git",
23
- "url": "https://github.com/tata1mg/catalyst"
17
+ "@css": "src/static/css",
18
+ "@routes": "src/js/routes/",
19
+ "@store": "src/js/store/index.js"
24
20
  },
25
21
  "dependencies": {
26
22
  "@loadable/component": "^5.16.3",
27
- "@tata1mg/router": "^0.0.1-alpha.13",
28
- "catalyst-core":"0.0.1-beta.1",
29
- "event-source-polyfill": "^1.0.31",
30
- "express-static-gzip": "^2.1.7",
31
- "framer-motion": "^10.18.0",
32
- "isomorphic-dompurify": "^2.2.0",
33
- "normalize.css": "^8.0.1",
34
- "prop-types": "^15.8.1",
35
- "pwa": "git+git@bitbucket.org:tata1mg/catalyst.git#framework-scaffolding",
36
- "react-dfp": "^0.21.0",
37
- "react-helmet-async":"^1.3.0",
38
- "react-intersection-observer": "^9.5.3",
39
- "react-loadable-visibility": "^3.0.2",
40
- "react-redux": "^8.1.3",
41
- "@reduxjs/toolkit": "1.9.3"
42
- },
43
- "author": "",
44
- "license": "ISC",
45
- "bugs": {
46
- "url": "https://github.com/tata1mg/catalyst/issues"
23
+ "@tata1mg/router": "^0.0.1-beta.6",
24
+ "catalyst-core": "^0.0.1-beta.9",
25
+ "@reduxjs/toolkit": "1.9.3",
26
+ "react-redux": "^8.1.3"
47
27
  },
48
- "homepage": "https://github.com/tata1mg/catalyst#readme",
49
28
  "devDependencies": {
50
- "@babel/core": "^7.23.7",
51
- "@babel/node": "^7.22.19"
29
+ "eslint": "^8.26.0",
30
+ "eslint-plugin-react": "^7.34.1",
31
+ "eslint-plugin-react-hooks": "^4.6.0"
52
32
  }
53
33
  }
@@ -1,42 +1,16 @@
1
- import React, { useState } from "react";
2
- import {
3
- useLocation,
4
- useOutlet,
5
- UNSAFE_LocationContext,
6
- } from "react-router-dom";
7
- import {reduxTest} from "./reducer.js"
8
- import "@css/base/index.scss";
1
+ import React from "react"
2
+ import { Outlet } from "@tata1mg/router"
9
3
 
10
-
11
- export const BaseOutlet = () => {
12
- const o = useOutlet();
13
- const [outlet] = useState(o);
14
-
15
- return <>{outlet}</>;
16
- };
17
4
  const App = () => {
18
-
19
- const location = useLocation();
20
- const page = (
21
- <div key={location.pathname.includes("/auth") ? "" : location.pathname}>
22
- <UNSAFE_LocationContext.Provider value={{ location }}>
23
- <BaseOutlet />
24
- </UNSAFE_LocationContext.Provider>
25
- </div>
26
- );
27
- return (
28
- <div className={"flexColumn"}>
29
- <>
30
- {/* <ShellLocusHeader /> */}
31
- </>
32
- <div>{page}</div>
33
- </div>
34
- );
35
- };
5
+ return (
6
+ <>
7
+ <Outlet />
8
+ </>
9
+ )
10
+ }
36
11
 
37
- App.serverSideFunction = ({store}) => {
38
- store.dispatch(reduxTest())
39
- return new Promise((resolve) => resolve());
40
- };
12
+ App.serverSideFunction = () => {
13
+ return new Promise((resolve) => resolve())
14
+ }
41
15
 
42
- export default App;
16
+ export default App
@@ -8,7 +8,7 @@ export const appSlice = createSlice({
8
8
  name: "shellReducer",
9
9
  initialState: initialState,
10
10
  reducers: {
11
- reduxTest: (state, action) => {
11
+ reduxTest: (state) => {
12
12
  state.testActionDispatched = true
13
13
  },
14
14
  },
@@ -16,11 +16,3 @@ export const appSlice = createSlice({
16
16
 
17
17
  export const { reduxTest } = appSlice.actions
18
18
  export const shellReducer = appSlice.reducer
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
@@ -0,0 +1,42 @@
1
+ import React from "react"
2
+ import { RouterDataProvider, MetaTag } from "@tata1mg/router"
3
+ import App from "@containers/App"
4
+ import routes from "./index.js"
5
+
6
+ /**
7
+ * Making the routes array compatible with the format accepted by createBrowserRouter
8
+ * API on the client side
9
+ * https://reactrouter.com/en/main/routers/create-browser-router
10
+ */
11
+
12
+ export const preparedRoutes = ({ store, routerInitialState }) => {
13
+ const getPreparedRoutes = (routes) => {
14
+ return routes.map((route, index) => {
15
+ const Component = route.component
16
+ const routeToRender = {
17
+ ...route,
18
+ element: <Component key={index} />,
19
+ }
20
+ if (route.children) {
21
+ routeToRender.children = getPreparedRoutes(route.children)
22
+ }
23
+ return routeToRender
24
+ })
25
+ }
26
+
27
+ return [
28
+ {
29
+ element: (
30
+ <RouterDataProvider config={{}} initialState={routerInitialState} fetcherArgs={{ store }}>
31
+ <MetaTag />
32
+ <App />
33
+ </RouterDataProvider>
34
+ ),
35
+ children: getPreparedRoutes(routes),
36
+ },
37
+ ]
38
+ }
39
+
40
+ export const getRoutes = () => {
41
+ return routes
42
+ }
@@ -1,12 +1,19 @@
1
1
  import { configureStore as createStore } from "@reduxjs/toolkit"
2
- import {combineReducers} from "redux"
3
- import {shellReducer} from "@containers/App/reducer.js"
4
- import fetchInstance from "../../../api"
2
+ import { combineReducers } from "redux"
3
+ import { shellReducer } from "@containers/App/reducer.js"
4
+ import fetchInstance from "@api"
5
5
 
6
- const configureStore = (initialState,request) => {
6
+ /**
7
+ * Function that initializes the store with the initialstate and adds middlewares that can be used during action dispatch
8
+ * @param {object} initialState Default state
9
+ * @param {object} request Request object that we recieve on server, this is only recieved when store is initialized on the server.
10
+ * @return {object} The store itself
11
+ */
12
+
13
+ const configureStore = (initialState) => {
7
14
  const api = fetchInstance
8
15
  const store = createStore({
9
- reducer: combineReducers({shellReducer}),
16
+ reducer: combineReducers({ shellReducer }),
10
17
  middleware: (getDefaultMiddleware) =>
11
18
  getDefaultMiddleware({
12
19
  thunk: {
@@ -18,5 +25,4 @@ const configureStore = (initialState,request) => {
18
25
  return store
19
26
  }
20
27
 
21
-
22
28
  export default configureStore