Migration from CUBA Platform
Update packages
Open the root directory of the front module.
Remove cuba packages:
npm uninstall @cuba-platform/react-core @cuba-platform/react-ui @cuba-platform/rest
Update third-party dependencies.
npm install @ant-design/icons@^4.0.0 antd@^4.12.3 mobx@^6.1.8 mobx-react@^7.1.0 moment@^2.25.3 react@^17.0.1 react-dom@^17.0.1 react-input-mask@^2.0.4 react-intl@^5.3.0 react-router-dom@^5.2.0
Install Jmix packages:
npm install @haulmont/jmix-react-core@^0.9.0 @haulmont/jmix-react-ui@^0.9.0 @haulmont/jmix-rest@^0.9.0
Change environment
Open package.json
and add a proxy server to http://localhost:8080/
:
{ ... "proxy": "http://localhost:8080/", ... }
Open src/config.ts
and remove CUBA_APP_URL
constant and add JMIX_REST_URL
constant this way:
// Before: export const CUBA_APP_URL = process.env.REACT_APP_CUBA_URL ?? "/app/rest/"; // After: export const JMIX_REST_URL = process.env.REACT_APP_JMIX_REST_URL ?? "/rest/";
Сhange environment variables.
Open .env.development.local
and .env.production.local
and rename varaibles in both files this way:
PUBLIC_URL=/front/ REACT_APP_JMIX_REST_URL=/rest/ REACT_APP_REST_CLIENT_ID=client REACT_APP_REST_CLIENT_SECRET=secret
Generate TypeScript SDK
Open the root directory of the front module.
Remove cuba generator package.
npm uninstall @cuba-platform/front-generator
Install Jmix generator package.
npm install --save-dev @haulmont/jmix-front-generator@^0.9.0
Open package.json
and rewrite update-model
script:
// Before: { "scripts": { ... "update-model": "gen-cuba-front sdk:all --dest src/cuba" ... } } // After: { "scripts": { ... "update-model": "gen-jmix-front sdk:all --dest src/jmix" ... } }
Remove src/cuba/
directory.
Generate new Jmix model classes (the project must be open in Jmix Studio for this to work):
npm run update-model
If this fails with an error indicating that a connection to Studio cannot be established, go to Jmix Plugin Settings and ensure that "Enable integration with frontend generator" checkbox is ticked.
Rename imports from src/cuba/
to src/jmix/
everywhere in the project.
// Before: import {...} "../cuba/.." // After: import {...} "../jmix/.."
Changes in src/index.tsx
Add this import for fix mobx Observer batching warning:
After: import 'mobx-react-lite/batchingForReactDom';
Change Jmix REST initialization.
Import JMIX_REST_URL
constant from src/config.ts
.
Remove cubaREST initialization. After that add jmixREST initialization this way:
// Before: import { CUBA_APP_URL, REST_CLIENT_ID, REST_CLIENT_SECRET } from "./config"; // After: import { JMIX_REST_URL, REST_CLIENT_ID, REST_CLIENT_SECRET } from "./config"; // Before: export const cubaREST = initializeApp({ name: {project name}, apiUrl: CUBA_APP_URL, restClientId: REST_CLIENT_ID, restClientSecret: REST_CLIENT_SECRET, storage: window.localStorage, defaultLocale: "en" }); // After: export const jmixREST = initializeApp({ name: {project name}, apiUrl: JMIX_REST_URL, restClientId: REST_CLIENT_ID, restClientSecret: REST_CLIENT_SECRET, storage: window.localStorage, defaultLocale: "en" });
Replace CubaAppProvider
with JmixAppProvider
.
// Before: ReactDOM.render( <CubaAppProvider cubaREST={cubaREST}> ... </CubaAppProvider>, document.getElementById("root") as HTMLElement ); // After: ReactDOM.render( <JmixAppProvider jmixREST={jmixREST}> ... </JmixAppProvider>, document.getElementById("root") as HTMLElement );
Rename imports / types / functions, fix breaking changes
Run application for TypeScript hints.
npm run start
Replace the following code in all generated editors:
// Before useReaction( () => mainStore.security.isDataLoaded, (isDataLoaded, permsReaction) => { // After useReaction( () => mainStore.security.isDataLoaded, (isDataLoaded, _prev, permsReaction) => {
Replace the following code in LanguageSwitcher.tsx
:
// Before defaultValue={getMainStore().locale} // After defaultValue={getMainStore().locale ?? undefined}
Replace all imports of CUBA packages to the corresponding Jmix packages. Rename the types / functions everywhere in the project.
Imports:
-
@cuba-platform/react-core
→@haulmont/jmix-react-core
-
@cuba-platform/react-ui
→@haulmont/jmix-react-ui
-
@cuba-platform/rest
→@haulmont/jmix-rest
Types / functions:
-
CubaAppProvider
→JmixAppProvider
-
CubaApp
→JmixRestConnection
-
CubaRestError
→JmixRestError
-
loginMapCubaRestErrorToIntlId
→loginMapJmixRestErrorToIntlId
// Before: import { CubaAppProvider } from "@cuba-platform/react-core"; import { CubaApp } from "@cuba-platform/rest"; import { ... } from "@cuba-platform/react-ui"; // After: import { JmixAppProvider } from "@haulmont/jmix-react-core"; import { JmixRestConnection } from "@haulmont/jmix-rest"; import { ... } from "@haulmont/jmix-react-ui";