@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.
Files changed (71) hide show
  1. rn-codegen/command.js +12 -1
  2. rn-codegen/command.js.map +1 -1
  3. rn-codegen/index.js +1 -28
  4. rn-codegen/index.js.map +1 -1
  5. rn-codegen/package.json +1 -1
  6. rn-codegen/src/app.generator.js +37 -16
  7. rn-codegen/src/app.generator.js.map +1 -1
  8. rn-codegen/src/increment-builder.js +3 -0
  9. rn-codegen/src/increment-builder.js.map +1 -1
  10. rn-codegen/src/project.service.js +14 -0
  11. rn-codegen/src/project.service.js.map +1 -1
  12. rn-codegen/src/templates/app.template +22 -2
  13. rn-codegen/src/templates/app.theme.template +9 -2
  14. rn-codegen/src/templates/bootstrap.template +7 -0
  15. rn-codegen/src/templates/component/component.template +1 -1
  16. rn-codegen/src/templates/package.web.json +7 -3
  17. rn-codegen/src/templates/project/component/dynamic/component-generator.js +77 -0
  18. rn-codegen/src/templates/project/component/dynamic/form.generator.js +45 -0
  19. rn-codegen/src/templates/project/esbuild/jsconfig.json +2 -1
  20. rn-codegen/src/templates/project/package.json +8 -4
  21. rn-codegen/src/templates/project/revert-to-1.0.styles.js +433 -0
  22. rn-codegen/src/templates/theme/wavemaker/assets/fonts/font.config.js.hbs +4 -1
  23. rn-codegen/src/templates/theme/wavemaker/variables.less.template +1 -1
  24. rn-codegen/src/theme/components/data/list.styledef.js +13 -1
  25. rn-codegen/src/theme/components/data/list.styledef.js.map +1 -1
  26. rn-codegen/src/theme/components/input/checkbox.styledef.js +12 -1
  27. rn-codegen/src/theme/components/input/checkbox.styledef.js.map +1 -1
  28. rn-codegen/src/theme/components/input/checkboxset.styledef.js +14 -9
  29. rn-codegen/src/theme/components/input/checkboxset.styledef.js.map +1 -1
  30. rn-codegen/src/theme/components/input/epoch/datetime.styledef.js +16 -0
  31. rn-codegen/src/theme/components/input/epoch/datetime.styledef.js.map +1 -1
  32. rn-codegen/src/theme/components/input/radioset.styledef.js +10 -0
  33. rn-codegen/src/theme/components/input/radioset.styledef.js.map +1 -1
  34. rn-codegen/src/theme/components/input/text.styledef.js +5 -0
  35. rn-codegen/src/theme/components/input/text.styledef.js.map +1 -1
  36. rn-codegen/src/theme/components/input/textarea.styledef.js +5 -0
  37. rn-codegen/src/theme/components/input/textarea.styledef.js.map +1 -1
  38. rn-codegen/src/theme/components/navigation/appnavbar.styledef.js +7 -0
  39. rn-codegen/src/theme/components/navigation/appnavbar.styledef.js.map +1 -1
  40. rn-codegen/src/theme/font-stylesheet.transpiler.js +3 -0
  41. rn-codegen/src/theme/font-stylesheet.transpiler.js.map +1 -1
  42. rn-codegen/src/theme/rn-stylesheet.transpiler.js +15 -1
  43. rn-codegen/src/theme/rn-stylesheet.transpiler.js.map +1 -1
  44. rn-codegen/src/theme/theme.service.js +34 -4
  45. rn-codegen/src/theme/theme.service.js.map +1 -1
  46. rn-codegen/src/theme/variables.js +29 -15
  47. rn-codegen/src/theme/variables.js.map +1 -1
  48. rn-codegen/src/transpile/components/basic/buttongroup.transformer.js +3 -3
  49. rn-codegen/src/transpile/components/basic/buttongroup.transformer.js.map +1 -1
  50. rn-codegen/src/transpile/components/basic/search.transformer.js +1 -0
  51. rn-codegen/src/transpile/components/basic/search.transformer.js.map +1 -1
  52. rn-codegen/src/transpile/components/data/form/form-action.transformer.js +5 -5
  53. rn-codegen/src/transpile/components/data/form/form-action.transformer.js.map +1 -1
  54. rn-codegen/src/transpile/components/data/form/form-field.transformer.js +36 -8
  55. rn-codegen/src/transpile/components/data/form/form-field.transformer.js.map +1 -1
  56. rn-codegen/src/transpile/components/data/form.transformer.js +14 -1
  57. rn-codegen/src/transpile/components/data/form.transformer.js.map +1 -1
  58. rn-codegen/src/transpile/components/data/list.transformer.js +10 -6
  59. rn-codegen/src/transpile/components/data/list.transformer.js.map +1 -1
  60. rn-codegen/src/transpile/components/input/checkboxset.transformer.js +1 -1
  61. rn-codegen/src/transpile/components/input/checkboxset.transformer.js.map +1 -1
  62. rn-codegen/src/transpile/components/input/radioset.transformer.js +1 -1
  63. rn-codegen/src/transpile/components/input/radioset.transformer.js.map +1 -1
  64. rn-codegen/src/transpile/components/utils.js +9 -1
  65. rn-codegen/src/transpile/components/utils.js.map +1 -1
  66. rn-codegen/src/transpile/property/property-parser.js +14 -3
  67. rn-codegen/src/transpile/property/property-parser.js.map +1 -1
  68. rn-codegen/src/transpile/transpile.js +9 -8
  69. rn-codegen/src/transpile/transpile.js.map +1 -1
  70. rn-codegen/src/utils.js +4 -3
  71. 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
- export const setAppTheme = (themeName) => {
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
- Object.assign(themeVariables.INSTANCE, selectedTheme.variables());
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.24863",
14
- "@wavemaker/variables": "11.7.0-next.24863",
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
- "@babel/plugin-syntax-jsx": "7.21.4"
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.24863",
14
- "@wavemaker/variables": "11.7.0-next.24863",
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
- "@babel/plugin-syntax-jsx": "7.21.4"
85
+ "@types/babel__standalone": "^7.1.7"
82
86
  },
83
87
  "resolutions": {
84
88
  "react-error-overlay": "6.0.9",