@common-stack/frontend-stack-react 4.0.2-alpha.8 → 4.0.3-alpha.0

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.
@@ -1,4 +1,4 @@
1
- import'reflect-metadata';import storage from'redux-persist/lib/storage/index.js';import {combineReducers}from'@reduxjs/toolkit';import autoMergeLevel2 from'redux-persist/lib/stateReconciler/autoMergeLevel2.js';import {createEpicMiddleware}from'redux-observable';import {createRouterReducer}from'@common-stack/remix-router-redux';import {persistReducer}from'redux-persist';import {REDUX_PERSIST_KEY}from'@common-stack/client-core';import {createReduxStore as createReduxStore$1}from'./base-redux-config.js';import {logger}from'../utils/index.js';import features from'../modules.js';import {rootEpic}from'./epic-config.js';const epicMiddlewareFunc = (apolloClient, services, container) => createEpicMiddleware({
1
+ import'reflect-metadata';import storage from'redux-persist/lib/storage/index.js';import {combineReducers}from'@reduxjs/toolkit';import autoMergeLevel2 from'redux-persist/lib/stateReconciler/autoMergeLevel2.js';import {createEpicMiddleware}from'redux-observable';import {createRouterReducer}from'@common-stack/remix-router-redux';import {persistReducer}from'redux-persist';import {REDUX_PERSIST_KEY,ClientTypes}from'@common-stack/client-core';import {createReduxStore as createReduxStore$1}from'./base-redux-config.js';import {logger}from'../utils/index.js';import features from'../modules.js';import {rootEpic}from'./epic-config.js';const epicMiddlewareFunc = (apolloClient, services, container) => createEpicMiddleware({
2
2
  dependencies: {
3
3
  apolloClient,
4
4
  routes: features.getConfiguredRoutes(),
@@ -47,12 +47,12 @@ const createReduxStore = (apolloClient, services, container) => {
47
47
  });
48
48
  logger.debug('Created new Redux store');
49
49
  }
50
- if (container.isBound('ReduxStore')) {
51
- container.rebind('ReduxStore').toDynamicValue(() => store).inRequestScope();
50
+ if (container.isBound(ClientTypes.ReduxStore)) {
51
+ container.rebind(ClientTypes.ReduxStore).toDynamicValue(() => store).inRequestScope();
52
52
  logger.debug('Rebound ReduxStore in container');
53
53
  }
54
54
  else {
55
- container.bind('ReduxStore').toDynamicValue(() => store).inRequestScope();
55
+ container.bind(ClientTypes.ReduxStore).toDynamicValue(() => store).inRequestScope();
56
56
  logger.debug('Bound ReduxStore in container');
57
57
  }
58
58
  return { store };
@@ -1,29 +1,12 @@
1
- import*as React from'react';import {Error500}from'@admin-layout/ant-ui';import {useRouteError,isRouteErrorResponse}from'@remix-run/react';import {Navigate}from'react-router-dom';function ErrorBoundary() {
1
+ import*as React from'react';import {Error500}from'@admin-layout/ant-ui';import {useRouteError,isRouteErrorResponse}from'@remix-run/react';function ErrorBoundary() {
2
2
  const error = useRouteError();
3
- const [hasAccountNotFoundError, setHasAccountNotFoundError] = React.useState(false);
4
- const [isLoading, setIsLoading] = React.useState(true);
5
- React.useEffect(() => {
6
- console.trace(error);
7
- if (isRouteErrorResponse(error)) {
8
- const data = error?.data;
9
- if (data?.graphQLErrors?.length) {
10
- const graphqlError = data?.graphQLErrors[0];
11
- if (graphqlError.type === 'ACCOUNT_NOT_FOUND') {
12
- setHasAccountNotFoundError(true);
13
- }
14
- }
15
- }
16
- setIsLoading(false);
17
- }, [error]);
18
- if (!isLoading) {
19
- if (isRouteErrorResponse(error)) {
20
- return hasAccountNotFoundError ? (React.createElement(Navigate, { to: "/verify-user" })) : (React.createElement(Error500, { title: error.statusText, status: error.status, data: error.data }));
21
- }
22
- else if (error instanceof Error) {
23
- return React.createElement(Error500, { title: error.message, status: "500", data: error.stack });
24
- }
25
- else {
26
- return React.createElement(Error500, { title: "Unknown Error", status: "500", data: error });
27
- }
3
+ if (isRouteErrorResponse(error)) {
4
+ return React.createElement(Error500, { title: `Route Error: ${error.statusText}`, status: error.status, data: error.data });
5
+ }
6
+ else if (error instanceof Error) {
7
+ return React.createElement(Error500, { title: error.message, status: "500", data: error.stack });
8
+ }
9
+ else {
10
+ return React.createElement(Error500, { title: "Unknown Error", status: "500", data: error });
28
11
  }
29
12
  }export{ErrorBoundary};
@@ -1,4 +1,4 @@
1
- import*as React from'react';import {PassThrough,Transform}from'node:stream';import {createReadableStreamFromReadable}from'@remix-run/node';import {RemixServer}from'@remix-run/react';import {isbot}from'isbot';import {ApolloProvider}from'@apollo/client/index.js';import {SlotFillProvider}from'@common-stack/components-pro';import {InversifyProvider}from'@common-stack/client-react';import {renderToPipeableStream}from'react-dom/server';import {Provider}from'react-redux';import {LOCATION_CHANGE}from'@common-stack/remix-router-redux';import serialize from'serialize-javascript';import {createCache,StyleProvider,extractStyle}from'@ant-design/cssinjs';import {CacheProvider}from'@emotion/react';import {renderStylesToNodeStream}from'@emotion/server';import {createInstance}from'i18next';import {initReactI18next,I18nextProvider}from'react-i18next';import Backend from'i18next-fs-backend';import {resolve}from'node:path';import i18next from'@app/frontend-stack-react/i18n-localization/i18next.server';import config from'@app/cde-webconfig.json';import createEmotionCache from'@app/frontend-stack-react/entries/common/createEmotionCache';/**
1
+ import*as React from'react';import {PassThrough,Transform}from'node:stream';import {createReadableStreamFromReadable}from'@remix-run/node';import {RemixServer}from'@remix-run/react';import {isbot}from'isbot';import {ApolloProvider}from'@apollo/client/index.js';import {SlotFillProvider}from'@common-stack/components-pro';import {InversifyProvider}from'@common-stack/client-react';import {renderToPipeableStream}from'react-dom/server';import {Provider}from'react-redux';import {LOCATION_CHANGE}from'@common-stack/remix-router-redux';import serialize from'serialize-javascript';import {createCache,StyleProvider,extractStyle}from'@ant-design/cssinjs';import {CacheProvider}from'@emotion/react';import {renderStylesToNodeStream}from'@emotion/server';import {createInstance}from'i18next';import {initReactI18next,I18nextProvider}from'react-i18next';import Backend from'i18next-fs-backend';import {resolve}from'node:path';import {i18nextInstance}from'@app/frontend-stack-react/i18n-localization/i18next.server.js';import config from'@app/cde-webconfig.json';import createEmotionCache from'@app/frontend-stack-react/entries/common/createEmotionCache';/**
2
2
  * By default, Remix will handle generating the HTTP Response for you.
3
3
  * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
4
4
  * For more information, see https://remix.run/file-conventions/entry.server
@@ -43,8 +43,8 @@ async function handleRequest(request, responseStatusCode, responseHeaders, remix
43
43
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
44
44
  loadContext) {
45
45
  const instance = createInstance();
46
- const lng = await i18next.getLocale(request);
47
- const ns = i18next.getRouteNamespaces(remixContext);
46
+ const lng = await i18nextInstance.getLocale(request);
47
+ const ns = i18nextInstance.getRouteNamespaces(remixContext);
48
48
  // First, we create a new instance of i18next so every request will have a
49
49
  // completely unique instance and not share any state.
50
50
  if (config.i18n.enabled) {
@@ -56,7 +56,6 @@ loadContext) {
56
56
  defaultNS: config.i18n.defaultNS,
57
57
  react: config.i18n.react,
58
58
  supportedLngs: config.i18n.supportedLngs,
59
- // ...config.i18n, // use the same configuration as in your client side.
60
59
  lng, // The locale we detected above
61
60
  ns, // The namespaces the routes about to render want to use
62
61
  backend: {
@@ -1,5 +1,5 @@
1
- import'reflect-metadata';import*as React from'react';import {Outlet,json,useLoaderData,Meta,Links,ScrollRestoration,Scripts}from'@remix-run/react';import publicEnv from'@src/frontend-stack-react/config/public-config';import {PluginArea}from'@common-stack/client-react';import {subscribeReduxRouter}from'@common-stack/remix-router-redux';import {ApplicationErrorHandler}from'@admin-layout/ant-ui';import {ConfigProvider}from'antd';import clientModules,{plugins}from'@app/frontend-stack-react/modules.js';import {useChangeLanguage}from'remix-i18next/react';import {useTranslation}from'react-i18next';import i18next from'@app/frontend-stack-react/i18n-localization/i18next.server';export{ErrorBoundary}from'@app/frontend-stack-react/entries/antui/components/ErrorBoundary';const loader = async ({ request }) => {
2
- const locale = await i18next.getLocale(request);
1
+ import'reflect-metadata';import*as React from'react';import {Outlet,json,useLoaderData,Meta,Links,ScrollRestoration,Scripts}from'@remix-run/react';import publicEnv from'@src/config/public-config';import {PluginArea}from'@common-stack/client-react';import {subscribeReduxRouter}from'@common-stack/remix-router-redux';import {ApplicationErrorHandler}from'@admin-layout/ant-ui';import {ConfigProvider}from'antd';import clientModules,{plugins}from'@app/frontend-stack-react/modules.js';import {useChangeLanguage}from'remix-i18next/react';import {useTranslation}from'react-i18next';import {i18nextInstance}from'@app/frontend-stack-react/i18n-localization/i18next.server.js';export{ErrorBoundary}from'@app/frontend-stack-react/entries/antui/components/ErrorBoundary';const loader = async ({ request }) => {
2
+ const locale = await i18nextInstance.getLocale(request);
3
3
  return json({
4
4
  __ENV__: publicEnv,
5
5
  locale,
@@ -1,4 +1,4 @@
1
- import React__default from'react';import {PassThrough}from'node:stream';import {createReadableStreamFromReadable}from'@remix-run/node';import {RemixServer}from'@remix-run/react';import {isbot}from'isbot';import {ApolloProvider}from'@apollo/client/index.js';import {SlotFillProvider}from'@common-stack/components-pro';import {InversifyProvider}from'@common-stack/client-react';import {renderToPipeableStream,renderToString}from'react-dom/server';import {Provider}from'react-redux';import {LOCATION_CHANGE}from'@common-stack/remix-router-redux';import serialize from'serialize-javascript';import {CacheProvider}from'@emotion/react';import createEmotionServer from'@emotion/server/create-instance';import Backend from'i18next-fs-backend';import {renderHeadToString}from'remix-island';import {initReactI18next,I18nextProvider}from'react-i18next';import {createInstance}from'i18next';import {resolve}from'node:path';import {defaultCache}from'@app/frontend-stack-react/entries/common/createEmotionCache';import config from'@app/cde-webconfig.json';import {Head}from'./root.js';import {ServerStyleContext}from'@app/frontend-stack-react/entries/chakraui/context.js';import i18next from'@app/frontend-stack-react/i18n-localization/i18next.server.js';/**
1
+ import React__default from'react';import {PassThrough}from'node:stream';import {createReadableStreamFromReadable}from'@remix-run/node';import {RemixServer}from'@remix-run/react';import {isbot}from'isbot';import {ApolloProvider}from'@apollo/client/index.js';import {SlotFillProvider}from'@common-stack/components-pro';import {InversifyProvider}from'@common-stack/client-react';import {renderToPipeableStream,renderToString}from'react-dom/server';import {Provider}from'react-redux';import {LOCATION_CHANGE}from'@common-stack/remix-router-redux';import serialize from'serialize-javascript';import {CacheProvider}from'@emotion/react';import createEmotionServer from'@emotion/server/create-instance';import Backend from'i18next-fs-backend';import {renderHeadToString}from'remix-island';import publicEnv from'@src/config/public-config';import {initReactI18next,I18nextProvider}from'react-i18next';import {createInstance}from'i18next';import {resolve}from'node:path';import {defaultCache}from'@app/frontend-stack-react/entries/common/createEmotionCache.js';import config from'@app/cde-webconfig.json';import {Head}from'./root.js';import {ServerStyleContext}from'@app/frontend-stack-react/entries/chakraui/context.js';import {i18nextInstance}from'@app/frontend-stack-react/i18n-localization/i18next.server.js';/**
2
2
  * By default, Remix will handle generating the HTTP Response for you.
3
3
  * You are free to delete this file if you'd like to, but if you ever want it revealed again, you can run `npx remix reveal` ✨
4
4
  * For more information, see https://remix.run/file-conventions/entry.server
@@ -58,9 +58,9 @@ function handleBotRequest(request, responseStatusCode, responseHeaders, remixCon
58
58
  async function handleBrowserRequest(request, responseStatusCode, responseHeaders, remixContext, loadContext) {
59
59
  const instance = createInstance();
60
60
  // Then we could detect locale from the request
61
- const lng = await i18next.getLocale(request);
61
+ const lng = await i18nextInstance.getLocale(request);
62
62
  // And here we detect what namespaces the routes about to render want to use
63
- const ns = i18next.getRouteNamespaces(remixContext);
63
+ const ns = i18nextInstance.getRouteNamespaces(remixContext);
64
64
  const slotFillContext = { fills: {} };
65
65
  const { modules: clientModules, container, apolloClient: client, store, } = loadContext;
66
66
  // First, we create a new instance of i18next so every request will have a
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { ErrorBoundary } from '@app/frontend-stack-react/entries/chakraui/components/ErrorBoundary';
2
+ import { ErrorBoundary } from '@app/frontend-stack-react/entries/chakraui/components/ErrorBoundary.js';
3
3
  interface DocumentProps {
4
4
  children: React.ReactNode;
5
5
  }
@@ -13,5 +13,6 @@ export declare let loader: ({ request }: {
13
13
  export declare let handle: {
14
14
  i18n: string;
15
15
  };
16
+ export declare function shouldRevalidate(params: any): boolean;
16
17
  export default function App(): React.JSX.Element;
17
18
  export { ErrorBoundary };
@@ -1,4 +1,4 @@
1
- import*as React from'react';import {useContext}from'react';import {Meta,Links,ScrollRestoration,Scripts,useLoaderData,Outlet}from'@remix-run/react';import {json}from'@remix-run/node';import {PluginArea}from'@common-stack/client-react';import {subscribeReduxRouter}from'@common-stack/remix-router-redux';import {ApplicationErrorHandler}from'@admin-layout/chakra-ui';import clientModules,{plugins}from'@app/frontend-stack-react/modules.js';import {createHead}from'remix-island';import {ServerStyleContext,ClientStyleContext}from'./context.js';import {withEmotionCache}from'@emotion/react';import {useChangeLanguage}from'remix-i18next/react';import i18next from'@app/frontend-stack-react/i18n-localization/i18next.server';export{ErrorBoundary}from'@app/frontend-stack-react/entries/chakraui/components/ErrorBoundary';// @ts-nocheck
1
+ import*as React from'react';import {useContext}from'react';import {Meta,Links,ScrollRestoration,Scripts,useLoaderData,Outlet}from'@remix-run/react';import {json}from'@remix-run/node';import {PluginArea}from'@common-stack/client-react';import {subscribeReduxRouter}from'@common-stack/remix-router-redux';import {ApplicationErrorHandler}from'@admin-layout/chakra-ui';import clientModules,{plugins}from'@app/frontend-stack-react/modules.js';import {createHead}from'remix-island';import {ServerStyleContext,ClientStyleContext}from'./context.js';import {withEmotionCache}from'@emotion/react';import {useChangeLanguage}from'remix-i18next/react';import {i18nextInstance}from'@app/frontend-stack-react/i18n-localization/i18next.server.js';export{ErrorBoundary}from'@app/frontend-stack-react/entries/chakraui/components/ErrorBoundary.js';// @ts-nocheck
2
2
  const Head = createHead(() => (React.createElement(React.Fragment, null,
3
3
  React.createElement(Meta, null),
4
4
  React.createElement(Links, null))));
@@ -16,7 +16,6 @@ const Document = withEmotionCache(({ children }, emotionCache) => {
16
16
  });
17
17
  // reset cache to reapply global styles
18
18
  clientStyleData?.reset();
19
- subscribeReduxRouter({ store: window.__remixStore, router: window.__remixRouter });
20
19
  }, []);
21
20
  return (React.createElement(React.Fragment, null,
22
21
  React.createElement(Head, null),
@@ -28,15 +27,21 @@ const Document = withEmotionCache(({ children }, emotionCache) => {
28
27
  React.createElement(Scripts, null)));
29
28
  });
30
29
  let loader = async ({ request }) => {
31
- let locale = await i18next.getLocale(request);
30
+ let locale = await i18nextInstance.getLocale(request);
32
31
  return json({ locale });
33
32
  };
34
33
  let handle = {
35
34
  i18n: 'common',
36
35
  };
36
+ function shouldRevalidate(params) {
37
+ return params.defaultShouldRevalidate && params.currentUrl.pathname !== params.nextUrl.pathname;
38
+ }
37
39
  function App() {
38
40
  let { locale } = useLoaderData();
39
41
  useChangeLanguage(locale);
42
+ React.useEffect(() => {
43
+ subscribeReduxRouter({ store: window.__remixStore, router: window.__remixRouter });
44
+ }, []);
40
45
  return (React.createElement(ApplicationErrorHandler, { plugins: plugins },
41
46
  React.createElement(Document, null, clientModules.getWrappedRoot(React.createElement(Outlet, null)))));
42
- }export{Document,Head,App as default,handle,loader};
47
+ }export{Document,Head,App as default,handle,loader,shouldRevalidate};
@@ -0,0 +1,3 @@
1
+ import*as React from'react';import {createCache,extractStyle,StyleProvider}from'@ant-design/cssinjs';const antdCache = createCache();
2
+ const styleSheet = extractStyle(antdCache);
3
+ const AntSytles = ({ children }) => (React.createElement(StyleProvider, { cache: antdCache }, children));export{AntSytles,styleSheet};
@@ -0,0 +1,4 @@
1
+ import createCache from'@emotion/cache';const defaultCache = createEmotionCache();
2
+ function createEmotionCache() {
3
+ return createCache({ key: 'css', prepend: true });
4
+ }export{createEmotionCache as default,defaultCache};
@@ -0,0 +1,3 @@
1
+ export * from './AntStyles';
2
+ export * from './createEmotionCache';
3
+ export * from './utils';
@@ -0,0 +1 @@
1
+ export{AntSytles,styleSheet}from'./AntStyles.js';export{defaultCache}from'./createEmotionCache.js';export{jsonToString}from'./utils.js';
@@ -0,0 +1,12 @@
1
+ import {isEmpty}from'lodash-es';function jsonToString(json) {
2
+ if (isEmpty(json)) {
3
+ return '';
4
+ }
5
+ if (Array.isArray(json)) {
6
+ let arr = json.map((a) => jsonToString(a));
7
+ return arr.join(' ');
8
+ }
9
+ const str = JSON.stringify(json);
10
+ const arr = str.split(',');
11
+ return Array.isArray(arr) ? arr.join(' ') : str;
12
+ }export{jsonToString};
@@ -4,3 +4,4 @@ export * as ar from './antui/root';
4
4
  export * as cc from './chakraui/entry.client';
5
5
  export * as cs from './chakraui/entry.server';
6
6
  export * as cr from './chakraui/root';
7
+ export * as common from './common';
@@ -1,2 +1,2 @@
1
1
  declare const i18nextInstance: any;
2
- export default i18nextInstance;
2
+ export { i18nextInstance };
@@ -9,4 +9,4 @@ const i18nConfig = {
9
9
  },
10
10
  backend: Backend,
11
11
  };
12
- new RemixI18Next(i18nConfig);
12
+ const i18nextInstance = new RemixI18Next(i18nConfig);export{i18nextInstance};
package/lib/index.js CHANGED
@@ -1 +1 @@
1
- export{UtilityClass,logger}from'./utils/index.js';export{createClientContainer}from'./config/client.service.js';export{createReduxStore,epicMiddlewareFunc,persistConfig}from'./config/redux-config.js';export{clientLoaderWithMiddleware}from'./tools/clientLoaderWithMiddleware.js';export{loaderWithMiddleware}from'./tools/loaderWithMiddleware.js';export{corsMiddleware}from'./backend/middlewares/cors.js';export{TYPES,containerMiddleware}from'./backend/middlewares/container.js';export{errorMiddleware}from'./backend/middlewares/error.js';export{loadContext}from'./load-context.server.js';import*as entry_client from'./entries/antui/entry.client.js';export{entry_client as ac };import*as entry_server from'./entries/antui/entry.server.js';export{entry_server as as };import*as root from'./entries/antui/root.js';export{root as ar };import*as entry_client$1 from'./entries/chakraui/entry.client.js';export{entry_client$1 as cc };import*as entry_server$1 from'./entries/chakraui/entry.server.js';export{entry_server$1 as cs };import*as root$1 from'./entries/chakraui/root.js';export{root$1 as cr };import'./i18n-localization/i18next.server.js';import*as index from'./entries/antui/components/index.js';export{index as au };import*as index$1 from'./entries/chakraui/components/index.js';export{index$1 as cu };
1
+ export{UtilityClass,logger}from'./utils/index.js';export{createClientContainer}from'./config/client.service.js';export{createReduxStore,epicMiddlewareFunc,persistConfig}from'./config/redux-config.js';export{clientLoaderWithMiddleware}from'./tools/clientLoaderWithMiddleware.js';export{loaderWithMiddleware}from'./tools/loaderWithMiddleware.js';export{corsMiddleware}from'./backend/middlewares/cors.js';export{TYPES,containerMiddleware}from'./backend/middlewares/container.js';export{errorMiddleware}from'./backend/middlewares/error.js';export{loadContext}from'./load-context.server.js';import*as entry_client from'./entries/antui/entry.client.js';export{entry_client as ac };import*as entry_server from'./entries/antui/entry.server.js';export{entry_server as as };import*as root from'./entries/antui/root.js';export{root as ar };import*as entry_client$1 from'./entries/chakraui/entry.client.js';export{entry_client$1 as cc };import*as entry_server$1 from'./entries/chakraui/entry.server.js';export{entry_server$1 as cs };import*as root$1 from'./entries/chakraui/root.js';export{root$1 as cr };import*as index$2 from'./entries/common/index.js';export{index$2 as common };export{i18nextInstance}from'./i18n-localization/i18next.server.js';import*as index from'./entries/antui/components/index.js';export{index as au };import*as index$1 from'./entries/chakraui/components/index.js';export{index$1 as cu };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@common-stack/frontend-stack-react",
3
- "version": "4.0.2-alpha.8",
3
+ "version": "4.0.3-alpha.0",
4
4
  "description": "Client Module for react app",
5
5
  "homepage": "https://github.com/cdmbase/fullstack-pro#readme",
6
6
  "bugs": {
@@ -30,8 +30,8 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@chakra-ui/react": "^2.8.2",
33
- "@common-stack/client-react": "4.0.2-alpha.4",
34
- "@common-stack/core": "4.0.2-alpha.1",
33
+ "@common-stack/client-react": "4.0.3-alpha.0",
34
+ "@common-stack/core": "4.0.3-alpha.0",
35
35
  "i18next-browser-languagedetector": "^8.0.0",
36
36
  "i18next-fs-backend": "^2.3.1",
37
37
  "i18next-http-backend": "^2.5.2",
@@ -56,5 +56,5 @@
56
56
  "typescript": {
57
57
  "definition": "lib/index.d.ts"
58
58
  },
59
- "gitHead": "87b8e7a1217a41bb53d37273fd3859621da66f23"
59
+ "gitHead": "c411ebacd422102c481ba0633079b2f843601f78"
60
60
  }