@wavemaker/rn-codegen 11.7.0-next.24863 → 11.7.0-next.26328
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.
- rn-codegen/command.js +12 -1
- rn-codegen/command.js.map +1 -1
- rn-codegen/index.js +1 -28
- rn-codegen/index.js.map +1 -1
- rn-codegen/package.json +1 -1
- rn-codegen/src/app.generator.js +37 -16
- rn-codegen/src/app.generator.js.map +1 -1
- rn-codegen/src/increment-builder.js +3 -0
- rn-codegen/src/increment-builder.js.map +1 -1
- rn-codegen/src/project.service.js +14 -0
- rn-codegen/src/project.service.js.map +1 -1
- rn-codegen/src/templates/app.template +22 -2
- rn-codegen/src/templates/app.theme.template +9 -2
- rn-codegen/src/templates/bootstrap.template +7 -0
- rn-codegen/src/templates/component/component.template +1 -1
- rn-codegen/src/templates/package.web.json +7 -3
- rn-codegen/src/templates/project/component/dynamic/component-generator.js +77 -0
- rn-codegen/src/templates/project/component/dynamic/form.generator.js +45 -0
- rn-codegen/src/templates/project/esbuild/jsconfig.json +2 -1
- rn-codegen/src/templates/project/package.json +8 -4
- rn-codegen/src/templates/project/revert-to-1.0.styles.js +433 -0
- rn-codegen/src/templates/theme/wavemaker/assets/fonts/font.config.js.hbs +4 -1
- rn-codegen/src/templates/theme/wavemaker/variables.less.template +1 -1
- rn-codegen/src/theme/components/data/list.styledef.js +13 -1
- rn-codegen/src/theme/components/data/list.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/checkbox.styledef.js +12 -1
- rn-codegen/src/theme/components/input/checkbox.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/checkboxset.styledef.js +14 -9
- rn-codegen/src/theme/components/input/checkboxset.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/epoch/datetime.styledef.js +16 -0
- rn-codegen/src/theme/components/input/epoch/datetime.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/radioset.styledef.js +10 -0
- rn-codegen/src/theme/components/input/radioset.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/text.styledef.js +5 -0
- rn-codegen/src/theme/components/input/text.styledef.js.map +1 -1
- rn-codegen/src/theme/components/input/textarea.styledef.js +5 -0
- rn-codegen/src/theme/components/input/textarea.styledef.js.map +1 -1
- rn-codegen/src/theme/components/navigation/appnavbar.styledef.js +7 -0
- rn-codegen/src/theme/components/navigation/appnavbar.styledef.js.map +1 -1
- rn-codegen/src/theme/font-stylesheet.transpiler.js +3 -0
- rn-codegen/src/theme/font-stylesheet.transpiler.js.map +1 -1
- rn-codegen/src/theme/rn-stylesheet.transpiler.js +15 -1
- rn-codegen/src/theme/rn-stylesheet.transpiler.js.map +1 -1
- rn-codegen/src/theme/theme.service.js +34 -4
- rn-codegen/src/theme/theme.service.js.map +1 -1
- rn-codegen/src/theme/variables.js +29 -15
- rn-codegen/src/theme/variables.js.map +1 -1
- rn-codegen/src/transpile/components/basic/buttongroup.transformer.js +3 -3
- rn-codegen/src/transpile/components/basic/buttongroup.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/basic/search.transformer.js +1 -0
- rn-codegen/src/transpile/components/basic/search.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/data/form/form-action.transformer.js +5 -5
- rn-codegen/src/transpile/components/data/form/form-action.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/data/form/form-field.transformer.js +36 -8
- rn-codegen/src/transpile/components/data/form/form-field.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/data/form.transformer.js +14 -1
- rn-codegen/src/transpile/components/data/form.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/data/list.transformer.js +10 -6
- rn-codegen/src/transpile/components/data/list.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/input/checkboxset.transformer.js +1 -1
- rn-codegen/src/transpile/components/input/checkboxset.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/input/radioset.transformer.js +1 -1
- rn-codegen/src/transpile/components/input/radioset.transformer.js.map +1 -1
- rn-codegen/src/transpile/components/utils.js +9 -1
- rn-codegen/src/transpile/components/utils.js.map +1 -1
- rn-codegen/src/transpile/property/property-parser.js +14 -3
- rn-codegen/src/transpile/property/property-parser.js.map +1 -1
- rn-codegen/src/transpile/transpile.js +9 -8
- rn-codegen/src/transpile/transpile.js.map +1 -1
- rn-codegen/src/utils.js +4 -3
- rn-codegen/src/utils.js.map +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isIos} from '@wavemaker/app-rn-runtime/core/utils';
|
|
2
2
|
import themeVariables from '@wavemaker/app-rn-runtime/styles/theme.variables';
|
|
3
3
|
import BASE_THEME from '@wavemaker/app-rn-runtime/styles/theme';
|
|
4
|
+
import { clone } from 'lodash-es';
|
|
4
5
|
import fontConfig from './font.config';
|
|
5
6
|
|
|
6
7
|
const themes = {
|
|
@@ -24,12 +25,18 @@ let selectedTheme = null;
|
|
|
24
25
|
let selectedThemeName = null;
|
|
25
26
|
let getAsset = null;
|
|
26
27
|
const appTheme = BASE_THEME.$new('app-theme', {});
|
|
27
|
-
|
|
28
|
+
const defaultVariables = clone(themeVariables.INSTANCE);
|
|
29
|
+
export const setAppTheme = (themeName, variables) => {
|
|
28
30
|
return Promise.resolve().then(() => {
|
|
29
31
|
selectedTheme = (themes[themeName]||{})[isIos() ? 'ios': 'android'];
|
|
30
32
|
if (selectedTheme) {
|
|
31
33
|
selectedThemeName = themeName;
|
|
32
|
-
|
|
34
|
+
const styles = selectedTheme.style();
|
|
35
|
+
themeVariables.INSTANCE = Object.assign({},
|
|
36
|
+
defaultVariables,
|
|
37
|
+
selectedTheme.variables(),
|
|
38
|
+
styles['theme-variables'],
|
|
39
|
+
variables);
|
|
33
40
|
getAsset = selectedTheme.getAsset();
|
|
34
41
|
if (fontConfig.baseFont) {
|
|
35
42
|
themeVariables.baseFont = fontConfig.baseFont;
|
|
@@ -15,6 +15,7 @@ import * as config from './wm_rn_config.json';
|
|
|
15
15
|
export const appConfig = {
|
|
16
16
|
url : config.serverPath !== 'http://NOSERVERREQUIRED.com' ? config.serverPath : null,
|
|
17
17
|
theme: appTheme,
|
|
18
|
+
preferences: config.preferences,
|
|
18
19
|
splash: {animationSrc: config.splash.animationSrc, src: config.splash.src},
|
|
19
20
|
spinner: {loader: config.loader, json:{}},
|
|
20
21
|
refresh: () => {},
|
|
@@ -29,6 +30,7 @@ appConfig.url = location.href.split('/rn-bundle')[0];
|
|
|
29
30
|
injector.set('APP_CONFIG', appConfig);
|
|
30
31
|
injector.I18nService.set(AppI18nService);
|
|
31
32
|
|
|
33
|
+
LogBox.ignoreLogs(['VirtualizedLists should never be nested']);
|
|
32
34
|
global.wm = WM;
|
|
33
35
|
{{#if enableLogs}}
|
|
34
36
|
{{else}}
|
|
@@ -37,6 +39,11 @@ LogBox.ignoreAllLogs();
|
|
|
37
39
|
axios.defaults.withCredentials = true;
|
|
38
40
|
StorageService.target = config.id;
|
|
39
41
|
|
|
42
|
+
if(config.initScript){
|
|
43
|
+
const initScript = ResourceResolver.resolve(config.initScript, appConfig.url);
|
|
44
|
+
initScript.default && initScript.default();
|
|
45
|
+
}
|
|
46
|
+
|
|
40
47
|
const bootstrap = () => {
|
|
41
48
|
Logger.init();
|
|
42
49
|
injector.set('AppConfig', appConfig);
|
|
@@ -55,7 +55,6 @@ export default class {{name}}{{typeLabel}} extends Base{{typeLabel}} {
|
|
|
55
55
|
this.pageParams = this.state.props;
|
|
56
56
|
{{/ifEquals}}
|
|
57
57
|
const _this = this.proxy;
|
|
58
|
-
add{{typeLabel}}Script(this.App, this.proxy);
|
|
59
58
|
this.theme = (props.themeToUse || this.appConfig.theme);
|
|
60
59
|
const styleOverrides = this.theme.getStyle(props.classname);
|
|
61
60
|
this.theme = this.theme.$new('{{name}}-styles', styles);
|
|
@@ -82,6 +81,7 @@ export default class {{name}}{{typeLabel}} extends Base{{typeLabel}} {
|
|
|
82
81
|
this.startUpVariables = [{{#each startUpVariables}}'{{this}}',{{/each}}];
|
|
83
82
|
this.startUpActions = [{{#each startUpActions}}'{{this}}',{{/each}}];
|
|
84
83
|
this.autoUpdateVariables = [{{#each autoUpdateVariables}}'{{this}}',{{/each}}];
|
|
84
|
+
add{{typeLabel}}Script(this.App, this.proxy);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
provideAsset = (path) => this.handleUrl(path);
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@unimodules/react-native-adapter": "6.3.9",
|
|
13
|
-
"@wavemaker/app-rn-runtime": "11.7.0-next.
|
|
14
|
-
"@wavemaker/variables": "11.7.0-next.
|
|
13
|
+
"@wavemaker/app-rn-runtime": "11.7.0-next.26328",
|
|
14
|
+
"@wavemaker/variables": "11.7.0-next.26328",
|
|
15
|
+
"@wavemaker/rn-codegen": "11.7.0-next.26328",
|
|
15
16
|
"axios": "^1.4.0",
|
|
16
17
|
"css-mediaquery": "^0.1.2",
|
|
17
18
|
"deprecated-react-native-prop-types": "~4.1.0",
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"expo-constants": "14.4.2",
|
|
35
36
|
"@react-native/assets": "1.0.0",
|
|
36
37
|
"hermes-engine": "0.11.0",
|
|
38
|
+
"imask": "^7.5.0",
|
|
37
39
|
"react": "18.2.0",
|
|
38
40
|
"react-dom": "18.2.0",
|
|
39
41
|
"react-native": "0.72.4",
|
|
@@ -66,6 +68,8 @@
|
|
|
66
68
|
"react-native-restart": "0.0.27",
|
|
67
69
|
"@expo/webpack-config": "18.0.1",
|
|
68
70
|
"@babel/core": "7.20.2",
|
|
71
|
+
"@babel/standalone": "^7.23.10",
|
|
72
|
+
"@babel/plugin-syntax-jsx": "7.21.4",
|
|
69
73
|
"victory": "^36.5.3"
|
|
70
74
|
},
|
|
71
75
|
"devDependencies": {
|
|
@@ -79,7 +83,7 @@
|
|
|
79
83
|
"babel-plugin-transform-remove-console": "6.9.4",
|
|
80
84
|
"@babel/plugin-proposal-optional-chaining": "7.21.0",
|
|
81
85
|
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
|
|
82
|
-
"@
|
|
86
|
+
"@types/babel__standalone": "^7.1.7"
|
|
83
87
|
},
|
|
84
88
|
"resolutions": {
|
|
85
89
|
"react-error-overlay": "6.0.9",
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import WmText from "@wavemaker/app-rn-runtime/components/input/text/text.component";
|
|
2
|
+
import WmTextarea from '@wavemaker/app-rn-runtime/components/input/textarea/textarea.component';
|
|
3
|
+
import WmNumber from "@wavemaker/app-rn-runtime/components/input/number/number.component";
|
|
4
|
+
import WmCurrency from '@wavemaker/app-rn-runtime/components/input/currency/currency.component';
|
|
5
|
+
import WmSelect from '@wavemaker/app-rn-runtime/components/input/select/select.component';
|
|
6
|
+
import WmSearch from '@wavemaker/app-rn-runtime/components/basic/search/search.component';
|
|
7
|
+
import WmChips from '@wavemaker/app-rn-runtime/components/input/chips/chips.component';
|
|
8
|
+
import WmCheckbox from '@wavemaker/app-rn-runtime/components/input/checkbox/checkbox.component';
|
|
9
|
+
import WmCheckboxset from '@wavemaker/app-rn-runtime/components/input/checkboxset/checkboxset.component';
|
|
10
|
+
import WmToggle from '@wavemaker/app-rn-runtime/components/input/toggle/toggle.component';
|
|
11
|
+
import WmSwitch from '@wavemaker/app-rn-runtime/components/input/switch/switch.component';
|
|
12
|
+
import WmRadioset from '@wavemaker/app-rn-runtime/components/input/radioset/radioset.component';
|
|
13
|
+
import WmDate from '@wavemaker/app-rn-runtime/components/input/epoch/date/date.component';
|
|
14
|
+
import WmDatetime from '@wavemaker/app-rn-runtime/components/input/epoch/datetime/datetime.component';
|
|
15
|
+
import WmTime from '@wavemaker/app-rn-runtime/components/input/epoch/time/time.component';
|
|
16
|
+
import WmSlider from '@wavemaker/app-rn-runtime/components/input/slider/slider.component';
|
|
17
|
+
import WmRating from '@wavemaker/app-rn-runtime/components/input/rating/rating.component';
|
|
18
|
+
import WmLayoutgrid from '@wavemaker/app-rn-runtime/components/container/layoutgrid/layoutgrid.component';
|
|
19
|
+
import WmGridrow from '@wavemaker/app-rn-runtime/components/container/layoutgrid/gridrow/gridrow.component';
|
|
20
|
+
import WmGridcolumn from '@wavemaker/app-rn-runtime/components/container/layoutgrid/gridcolumn/gridcolumn.component';
|
|
21
|
+
import registerTransformers from '@wavemaker/rn-codegen/src/transpile/components/transform-register';
|
|
22
|
+
import WmFormField from '@wavemaker/app-rn-runtime/components/data/form/form-field/form-field.component';
|
|
23
|
+
import WmLabel from '@wavemaker/app-rn-runtime/components/basic/label/label.component';
|
|
24
|
+
|
|
25
|
+
import {transpileMarkup} from '@wavemaker/rn-codegen/src/transpile/transpile';
|
|
26
|
+
import {transform} from '@babel/standalone';
|
|
27
|
+
import React from "react";
|
|
28
|
+
|
|
29
|
+
// this is to avoid tree shaking
|
|
30
|
+
export const components = {WmText};
|
|
31
|
+
|
|
32
|
+
registerTransformers();
|
|
33
|
+
|
|
34
|
+
export const generate = (wavemakerMarkup, fragment) => {
|
|
35
|
+
// transpile wavemaker markup into react markup
|
|
36
|
+
const transpiledComponents = transpileMarkup(wavemakerMarkup, false, false);
|
|
37
|
+
try {
|
|
38
|
+
// use babel library convert it into React.creatElement
|
|
39
|
+
const transformedCode = transform(transpiledComponents.markup, {
|
|
40
|
+
presets: ['react']
|
|
41
|
+
}).code;
|
|
42
|
+
|
|
43
|
+
const importedComponents = {
|
|
44
|
+
'WmText': WmText,
|
|
45
|
+
'WmTextarea': WmTextarea,
|
|
46
|
+
'WmNumber': WmNumber,
|
|
47
|
+
'WmCurrency': WmCurrency,
|
|
48
|
+
'WmSelect': WmSelect,
|
|
49
|
+
'WmSearch': WmSearch,
|
|
50
|
+
'WmChips': WmChips,
|
|
51
|
+
'WmCheckbox': WmCheckbox,
|
|
52
|
+
'WmCheckboxset': WmCheckboxset,
|
|
53
|
+
'WmToggle': WmToggle,
|
|
54
|
+
'WmSwitch': WmSwitch,
|
|
55
|
+
'WmRadioset': WmRadioset,
|
|
56
|
+
'WmDate': WmDate,
|
|
57
|
+
'WmDatetime': WmDatetime,
|
|
58
|
+
'WmTime': WmTime,
|
|
59
|
+
'WmSlider': WmSlider,
|
|
60
|
+
'WmRating': WmRating,
|
|
61
|
+
'WmLayoutgrid': WmLayoutgrid,
|
|
62
|
+
'WmGridrow': WmGridrow,
|
|
63
|
+
'WmGridcolumn': WmGridcolumn,
|
|
64
|
+
'WmFormField': WmFormField,
|
|
65
|
+
'WmLabel': WmLabel
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Evaluate the transformed code synchronously
|
|
69
|
+
const dynamicComponentFunction = new Function(['React, fragment', ...Object.keys(importedComponents)].join(', '), `return ${transformedCode}`);
|
|
70
|
+
const dynamicComponent = dynamicComponentFunction(React, fragment, ...Object.values(importedComponents));
|
|
71
|
+
return dynamicComponent;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error('Error generating component:', error);
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {generate} from './component-generator';
|
|
2
|
+
import {forEach, isArray} from "lodash";
|
|
3
|
+
|
|
4
|
+
// Generate the form field with given field definition. Add a grid column wrapper around the form field.
|
|
5
|
+
const setMarkupForFormField = (field, columnWidth) => {
|
|
6
|
+
let propsTmpl = '';
|
|
7
|
+
forEach(field, (value, key) => {
|
|
8
|
+
propsTmpl = `${propsTmpl} ${key}="${value}"`;
|
|
9
|
+
});
|
|
10
|
+
return `<wm-gridcolumn columnwidth="${columnWidth}"><wm-form-field ${propsTmpl}></wm-form-field></wm-gridcolumn>`;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// Function to generate and compile the form fields from the metadata
|
|
14
|
+
const generateFormFields = (metadata, formName) => {
|
|
15
|
+
let noOfColumns = 1;
|
|
16
|
+
const columnWidth = 12 / noOfColumns;
|
|
17
|
+
let fieldTemplate = '';
|
|
18
|
+
let colCount = 0;
|
|
19
|
+
let fields = metadata;
|
|
20
|
+
|
|
21
|
+
if (!isArray(fields)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
while (fields[colCount]) {
|
|
26
|
+
let colTmpl = '';
|
|
27
|
+
if (fields[colCount]) {
|
|
28
|
+
colTmpl += setMarkupForFormField(fields[colCount], columnWidth);
|
|
29
|
+
}
|
|
30
|
+
colCount++;
|
|
31
|
+
fieldTemplate += `<wm-gridrow>${colTmpl}</wm-gridrow>`;
|
|
32
|
+
}
|
|
33
|
+
fieldTemplate = `<wm-layoutgrid type="dynamic" dynamicForm = "${formName}">${fieldTemplate}</wm-layoutgrid>`;
|
|
34
|
+
|
|
35
|
+
return fieldTemplate;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
export const dynamicForm = (metadata, formName, fragment) => {
|
|
40
|
+
// convert metadata into wavemaker markup
|
|
41
|
+
const wmMarkup = generateFormFields(metadata, formName);
|
|
42
|
+
|
|
43
|
+
// using component generator transform wavemaker markup into react elements
|
|
44
|
+
return generate(wmMarkup, fragment);
|
|
45
|
+
}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
"react-native": ["../node_modules/react-native-web"],
|
|
8
8
|
"react-native-web/src/*": ["../node_modules/react-native-web/dist/*"],
|
|
9
9
|
"@wavemaker/app-rn-runtime/*": ["../node_modules/@wavemaker/app-rn-runtime/*"],
|
|
10
|
-
"@wavemaker/variables/*": ["../node_modules/@wavemaker/variables/*"]
|
|
10
|
+
"@wavemaker/variables/*": ["../node_modules/@wavemaker/variables/*"],
|
|
11
|
+
"@wavemaker/rn-codegen/*": ["../node_modules/@wavemaker/rn-codegen/*"]
|
|
11
12
|
}
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@unimodules/react-native-adapter": "6.3.9",
|
|
13
|
-
"@wavemaker/app-rn-runtime": "11.7.0-next.
|
|
14
|
-
"@wavemaker/variables": "11.7.0-next.
|
|
13
|
+
"@wavemaker/app-rn-runtime": "11.7.0-next.26328",
|
|
14
|
+
"@wavemaker/variables": "11.7.0-next.26328",
|
|
15
|
+
"@wavemaker/rn-codegen": "11.7.0-next.26328",
|
|
15
16
|
"axios": "^1.4.0",
|
|
16
17
|
"css-mediaquery": "^0.1.2",
|
|
17
18
|
"deprecated-react-native-prop-types": "~4.1.0",
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"expo-constants": "14.4.2",
|
|
35
36
|
"@react-native/assets": "1.0.0",
|
|
36
37
|
"hermes-engine": "0.11.0",
|
|
38
|
+
"imask": "^7.5.0",
|
|
37
39
|
"react": "18.2.0",
|
|
38
40
|
"react-dom": "18.2.0",
|
|
39
41
|
"react-native": "0.72.4",
|
|
@@ -65,7 +67,9 @@
|
|
|
65
67
|
"setimmediate": "1.0.5",
|
|
66
68
|
"react-native-restart": "0.0.27",
|
|
67
69
|
"@expo/webpack-config": "18.0.1",
|
|
68
|
-
"@babel/core": "7.20.2"
|
|
70
|
+
"@babel/core": "7.20.2",
|
|
71
|
+
"@babel/standalone": "^7.23.10",
|
|
72
|
+
"@babel/plugin-syntax-jsx": "7.21.4"
|
|
69
73
|
},
|
|
70
74
|
"devDependencies": {
|
|
71
75
|
"webpack-dev-middleware": "6.1.1",
|
|
@@ -78,7 +82,7 @@
|
|
|
78
82
|
"babel-plugin-transform-remove-console": "6.9.4",
|
|
79
83
|
"@babel/plugin-proposal-optional-chaining": "7.21.0",
|
|
80
84
|
"@babel/plugin-proposal-nullish-coalescing-operator": "7.18.6",
|
|
81
|
-
"@
|
|
85
|
+
"@types/babel__standalone": "^7.1.7"
|
|
82
86
|
},
|
|
83
87
|
"resolutions": {
|
|
84
88
|
"react-error-overlay": "6.0.9",
|