@wavemaker/angular-codegen 11.0.1-next.139046 → 11.0.1-next.139247

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. angular-codegen/angular-app/package-lock.json +32318 -52446
  2. angular-codegen/angular-app/package.json +17 -17
  3. angular-codegen/angular-app/src/assets/styles/css/wm-responsive.css +1 -1
  4. angular-codegen/angular-app/src/assets/styles/css/wm-style.css +1 -1
  5. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.eot +0 -0
  6. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.ttf +0 -0
  7. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-light-icon.woff +0 -0
  8. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.eot +0 -0
  9. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.ttf +0 -0
  10. angular-codegen/angular-app/src/assets/styles/fonts/wm-streamline-regular-icon.woff +0 -0
  11. angular-codegen/dependencies/expression-parser.cjs.js +17761 -0
  12. angular-codegen/dependencies/pipe-provider.cjs.js +69033 -0
  13. angular-codegen/dependencies/transpilation-mobile.cjs.js +181 -51
  14. angular-codegen/dependencies/transpilation-web.cjs.js +181 -51
  15. angular-codegen/package.json +1 -1
  16. angular-codegen/src/codegen-cli.js +1 -1
  17. angular-codegen/src/expr-parser-utils.js +1 -0
  18. angular-codegen/src/gen-app-variables.js +1 -1
  19. angular-codegen/src/gen-components.js +1 -1
  20. angular-codegen/src/handlebar-helpers.js +1 -1
  21. angular-codegen/src/pages-util.js +1 -1
  22. angular-codegen/src/wm-utils.js +1 -1
  23. angular-codegen/templates/app.component.script.js.hbs +6 -1
  24. angular-codegen/templates/component.expressions.ts.hbs +3 -0
  25. angular-codegen/templates/expr-vs-fn.hbs +3 -0
  26. angular-codegen/templates/page/page.component.ts.hbs +7 -1
  27. angular-codegen/templates/partial/partial.component.ts.hbs +6 -0
  28. angular-codegen/templates/prefab/prefab.component.ts.hbs +6 -0
@@ -38622,9 +38622,12 @@ class ASTCompiler {
38622
38622
  cleanup() {
38623
38623
  this.ast = this.cAst = this.stmts = this.cStmts = this.declarations = this.pipes = this.pipeNameVsIsPureMap = undefined;
38624
38624
  }
38625
- compile() {
38625
+ compile(defOnly) {
38626
38626
  this.extendCtxWithLocals();
38627
38627
  this.addReturnStmt(this.build(this.ast));
38628
+ if (defOnly) {
38629
+ return { fnBody: this.fnBody(), fnArgs: this.fnArgs(), pipes: this.pipes };
38630
+ }
38628
38631
  const fn = new Function(this.fnArgs(), this.fnBody());
38629
38632
  let boundFn;
38630
38633
  if (this.exprType === ExpressionType$1.Binding) {
@@ -38649,7 +38652,7 @@ var ExpressionType$1;
38649
38652
  ExpressionType$$1[ExpressionType$$1["Binding"] = 0] = "Binding";
38650
38653
  ExpressionType$$1[ExpressionType$$1["Action"] = 1] = "Action";
38651
38654
  })(ExpressionType$1 || (ExpressionType$1 = {}));
38652
- function $parseExpr(expr) {
38655
+ function $parseExpr(expr, defOnly) {
38653
38656
  if (!pipeProvider) {
38654
38657
  console.log('set pipe provider');
38655
38658
  return noop$1$1;
@@ -38668,51 +38671,60 @@ function $parseExpr(expr) {
38668
38671
  if (fn) {
38669
38672
  return fn;
38670
38673
  }
38671
- const parser = new Parser$1(new Lexer);
38672
- const ast = parser.parseBinding(expr, '', 0);
38673
38674
  let boundFn;
38674
- if (ast.errors.length) {
38675
- fn = noop$1$1;
38676
- boundFn = fn;
38675
+ if (!defOnly) {
38676
+ boundFn = getFnForBindExpr(expr);
38677
38677
  }
38678
- else {
38679
- const pipeNameVsIsPureMap = pipeProvider.getPipeNameVsIsPureMap();
38680
- const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Binding, pipeNameVsIsPureMap);
38681
- fn = astCompiler.compile();
38682
- if (fn.usedPipes.length) {
38683
- const pipeArgs = [];
38684
- let hasPurePipe = false;
38685
- for (const [pipeName] of fn.usedPipes) {
38686
- const pipeInfo = pipeProvider.meta(pipeName);
38687
- let pipeInstance;
38688
- if (!pipeInfo) {
38689
- pipeInstance = nullPipe;
38690
- }
38691
- else {
38692
- if (pipeInfo.pure) {
38693
- hasPurePipe = true;
38694
- pipeInstance = purePipes.get(pipeName);
38695
- }
38696
- if (!pipeInstance) {
38697
- pipeInstance = pipeProvider.getInstance(pipeName);
38678
+ // fallback to generate function in runtime. This will break if CSP is enabled
38679
+ if (!boundFn) {
38680
+ const parser = new Parser$1(new Lexer);
38681
+ const ast = parser.parseBinding(expr, '', 0);
38682
+ if (ast.errors.length) {
38683
+ fn = noop$1$1;
38684
+ boundFn = fn;
38685
+ }
38686
+ else {
38687
+ const pipeNameVsIsPureMap = pipeProvider.getPipeNameVsIsPureMap();
38688
+ const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Binding, pipeNameVsIsPureMap);
38689
+ fn = astCompiler.compile(defOnly);
38690
+ if (defOnly) {
38691
+ return fn;
38692
+ }
38693
+ if (fn.usedPipes.length) {
38694
+ const pipeArgs = [];
38695
+ let hasPurePipe = false;
38696
+ for (const [pipeName] of fn.usedPipes) {
38697
+ const pipeInfo = pipeProvider.meta(pipeName);
38698
+ let pipeInstance;
38699
+ if (!pipeInfo) {
38700
+ pipeInstance = nullPipe;
38698
38701
  }
38699
- if (pipeInfo.pure) {
38700
- purePipes.set(pipeName, pipeInstance);
38702
+ else {
38703
+ if (pipeInfo.pure) {
38704
+ hasPurePipe = true;
38705
+ pipeInstance = purePipes.get(pipeName);
38706
+ }
38707
+ if (!pipeInstance) {
38708
+ pipeInstance = pipeProvider.getInstance(pipeName);
38709
+ }
38710
+ if (pipeInfo.pure) {
38711
+ purePipes.set(pipeName, pipeInstance);
38712
+ }
38701
38713
  }
38714
+ pipeArgs.push(pipeInstance);
38702
38715
  }
38703
- pipeArgs.push(pipeInstance);
38716
+ pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
38717
+ boundFn = fn.bind(undefined, ...pipeArgs);
38718
+ }
38719
+ else {
38720
+ boundFn = fn.bind(undefined, undefined);
38704
38721
  }
38705
- pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
38706
- boundFn = fn.bind(undefined, ...pipeArgs);
38707
- }
38708
- else {
38709
- boundFn = fn.bind(undefined, undefined);
38710
38722
  }
38711
38723
  }
38712
38724
  exprFnCache.set(expr, boundFn);
38713
38725
  return boundFn;
38714
38726
  }
38715
- function $parseEvent(expr) {
38727
+ function $parseEvent(expr, defOnly) {
38716
38728
  if (!isString$1(expr)) {
38717
38729
  return noop$1$1;
38718
38730
  }
@@ -38724,16 +38736,76 @@ function $parseEvent(expr) {
38724
38736
  if (fn) {
38725
38737
  return fn;
38726
38738
  }
38727
- const parser = new Parser$1(new Lexer);
38728
- const ast = parser.parseAction(expr, '', 0);
38729
- if (ast.errors.length) {
38730
- return noop$1$1;
38739
+ if (!defOnly) {
38740
+ fn = getFnForEventExpr(expr);
38741
+ }
38742
+ // fallback to generate function in runtime. This will break if CSP is enabled
38743
+ if (!fn) {
38744
+ const parser = new Parser$1(new Lexer);
38745
+ const ast = parser.parseAction(expr, '', 0);
38746
+ if (ast.errors.length) {
38747
+ return noop$1$1;
38748
+ }
38749
+ const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Action);
38750
+ fn = astCompiler.compile(defOnly);
38731
38751
  }
38732
- const astCompiler = new ASTCompiler(ast.ast, ExpressionType$1.Action);
38733
- fn = astCompiler.compile();
38734
38752
  eventFnCache.set(expr, fn);
38735
38753
  return fn;
38736
38754
  }
38755
+ const fnNameMap = new Map();
38756
+ const getFnByExpr = (expr) => fnNameMap.get(expr);
38757
+ const fnExecutor = (expr, exprType) => {
38758
+ let fn = getFnByExpr(expr);
38759
+ if (!fn) {
38760
+ console.warn("didn't find fn for the expr: ", expr, ". Falling back to runtime evaluation");
38761
+ return;
38762
+ }
38763
+ const usedPipes = fn.usedPipes || [];
38764
+ if (exprType === ExpressionType$1.Binding) {
38765
+ fn = fn.bind(undefined, plus, minus, isDef, getPurePipeVal);
38766
+ }
38767
+ else {
38768
+ fn = fn.bind(undefined, plus, minus, isDef);
38769
+ }
38770
+ if (usedPipes.length) {
38771
+ const pipeArgs = [];
38772
+ let hasPurePipe = false;
38773
+ for (const [pipeName] of usedPipes) {
38774
+ const pipeInfo = pipeProvider.meta(pipeName);
38775
+ let pipeInstance;
38776
+ if (!pipeInfo) {
38777
+ pipeInstance = nullPipe;
38778
+ }
38779
+ else {
38780
+ if (pipeInfo.pure) {
38781
+ hasPurePipe = true;
38782
+ pipeInstance = purePipes.get(pipeName);
38783
+ }
38784
+ if (!pipeInstance) {
38785
+ pipeInstance = pipeProvider.getInstance(pipeName);
38786
+ }
38787
+ if (pipeInfo.pure) {
38788
+ purePipes.set(pipeName, pipeInstance);
38789
+ }
38790
+ }
38791
+ pipeArgs.push(pipeInstance);
38792
+ }
38793
+ pipeArgs.unshift(hasPurePipe ? new Map() : undefined);
38794
+ fn = fn.bind(undefined, ...pipeArgs);
38795
+ }
38796
+ else {
38797
+ if (exprType === ExpressionType$1.Binding) {
38798
+ fn = fn.bind(undefined, undefined);
38799
+ }
38800
+ }
38801
+ return fn;
38802
+ };
38803
+ const getFnForBindExpr = (expr) => {
38804
+ return fnExecutor(expr, ExpressionType$1.Binding);
38805
+ };
38806
+ const getFnForEventExpr = (expr) => {
38807
+ return fnExecutor(expr, ExpressionType$1.Action);
38808
+ };
38737
38809
 
38738
38810
  const registry = new Map();
38739
38811
  const watchIdGenerator = new IDGenerator('watch-id-');
@@ -38868,6 +38940,7 @@ var Operation;
38868
38940
  Operation["IS_BOUND_TO_LOCALE"] = "isBoundToLocale";
38869
38941
  Operation["GET_DEFAULT_LOCALE"] = "getDefaultLocale";
38870
38942
  Operation["CANCEL"] = "cancel";
38943
+ Operation["SET_PAGINATION"] = "setPagination";
38871
38944
  })(Operation || (Operation = {}));
38872
38945
  const DataSource = {
38873
38946
  Operation
@@ -39627,7 +39700,8 @@ const setSessionStorageItem = (key, value) => {
39627
39700
  * @param key string
39628
39701
  */
39629
39702
  const getSessionStorageItem = key => {
39630
- let item = window.sessionStorage.getItem(_WM_APP_PROJECT.id);
39703
+ // sanity check for this to work with ng-codegen
39704
+ let item = window && window.sessionStorage && window.sessionStorage.getItem(_WM_APP_PROJECT.id);
39631
39705
  if (item) {
39632
39706
  item = JSON.parse(item);
39633
39707
  return item[key];
@@ -39851,6 +39925,7 @@ const processFilterExpBindNode = (context, filterExpressions) => {
39851
39925
  const filter$ = new Subject();
39852
39926
  const bindFilExpObj = (obj, targetNodeKey) => {
39853
39927
  if (stringStartsWith(obj[targetNodeKey], 'bind:')) {
39928
+ // [Todo-CSP]: needs a check, where is this used
39854
39929
  destroyFn($watch(obj[targetNodeKey].replace('bind:', ''), context, {}, (newVal, oldVal) => {
39855
39930
  if ((newVal === oldVal && _.isUndefined(newVal)) || (_.isUndefined(newVal) && !_.isUndefined(oldVal))) {
39856
39931
  return;
@@ -40094,6 +40169,7 @@ const triggerItemAction = (scope, item) => {
40094
40169
  const linkTarget = item.target;
40095
40170
  if (itemAction) {
40096
40171
  if (!scope.itemActionFn) {
40172
+ //[Todo-CSP]: This will not work as function will be dynamic
40097
40173
  scope.itemActionFn = $parseEvent(itemAction);
40098
40174
  }
40099
40175
  scope.itemActionFn(scope.userDefinedExecutionContext, Object.create(item));
@@ -41205,6 +41281,16 @@ class PaginationService {
41205
41281
  */
41206
41282
  updateFieldsOnPagination(parent, newVal) {
41207
41283
  let fieldDefs = parent.widgetType === 'wm-table' ? parent.gridData : parent.fieldDefs;
41284
+ // remove the deleted row from the list
41285
+ if (parent.widgetType === 'wm-table' && (parent.gridOptions.isNavTypeScrollOrOndemand()) && parent.gridOptions.deletedRowIndex !== -1) {
41286
+ fieldDefs.splice(parent.gridOptions.deletedRowIndex, 1);
41287
+ parent.gridOptions.setDeletedRowIndex(-1);
41288
+ }
41289
+ // reset fieldDefs if last action performed is search or sort
41290
+ if (parent.widgetType === 'wm-table' && (parent.gridOptions.isNavTypeScrollOrOndemand()) && (parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.SEARCH_OR_SORT || parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.FILTER_CRITERIA)) {
41291
+ fieldDefs = [];
41292
+ parent.gridOptions.setCurrentPage(1);
41293
+ }
41208
41294
  let currentPage = parent.currentPage;
41209
41295
  const dataNavigator = parent.dataNavigator;
41210
41296
  const pagesize = parent.pagesize;
@@ -41225,11 +41311,11 @@ class PaginationService {
41225
41311
  newVal = [];
41226
41312
  }
41227
41313
  else if (dataNavigator.dataSize < currentPage * pagesize) {
41228
- // if number of elements added to datanavigator is less than product of currentpage and pagesize we only add elements extra elements added
41314
+ // if number of elements added to dataNavigator is less than product of currentPage and pageSize we only add elements extra elements added
41229
41315
  itemsLength = dataNavigator.dataSize - fieldDefs.length;
41230
41316
  }
41231
41317
  else {
41232
- // if number of elements added to datanavigator is greater than product of currentpage and pagesize we add elements the extra elements in newVal
41318
+ // if number of elements added to dataNavigator is greater than product of currentPage and pageSize we add elements the extra elements in newVal
41233
41319
  itemsLength = currentPage * pagesize - fieldDefs.length;
41234
41320
  currentPage++;
41235
41321
  }
@@ -41242,9 +41328,36 @@ class PaginationService {
41242
41328
  }
41243
41329
  newVal = itemsToPush;
41244
41330
  }
41245
- fieldDefs = [...fieldDefs, ...newVal];
41331
+ // Add unique records to fieldDefs
41332
+ if (parent.widgetType === 'wm-table' && (parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.DELETE || parent.gridOptions.lastActionPerformed === parent.gridOptions.ACTIONS.EDIT)) {
41333
+ fieldDefs = this.getUniqueRecordsInFieldDef(fieldDefs, newVal);
41334
+ }
41335
+ else {
41336
+ fieldDefs = [...fieldDefs, ...newVal];
41337
+ }
41246
41338
  return [fieldDefs, currentPage];
41247
41339
  }
41340
+ // Add the unique records to fieldDefs
41341
+ getUniqueRecordsInFieldDef(fieldDefs, newVal) {
41342
+ let flag = false;
41343
+ if (!fieldDefs.length) {
41344
+ fieldDefs = newVal;
41345
+ }
41346
+ else {
41347
+ newVal.forEach(function (newObj) {
41348
+ flag = false;
41349
+ fieldDefs.forEach(function (obj) {
41350
+ if (_.isEqual(newObj, obj)) {
41351
+ flag = true;
41352
+ }
41353
+ });
41354
+ if (flag === false) {
41355
+ fieldDefs.push(newObj);
41356
+ }
41357
+ });
41358
+ }
41359
+ return fieldDefs;
41360
+ }
41248
41361
  /**
41249
41362
  * @description
41250
41363
  * This function registers scroll events on the scrollable el, if the page doesn't have a scroll el then wheel event is registered on the requested node
@@ -41287,6 +41400,9 @@ class PaginationService {
41287
41400
  let scrollTop;
41288
41401
  // scrollingElement is undefined for IE, safari. use body as target Element
41289
41402
  target = target === document ? (target.scrollingElement || document.body) : target;
41403
+ if (parent.widgetType === 'wm-table' && parent.gridOptions.isNavTypeScrollOrOndemand()) {
41404
+ evt.stopPropagation();
41405
+ }
41290
41406
  clientHeight = target.clientHeight;
41291
41407
  totalHeight = target.scrollHeight;
41292
41408
  scrollTop = target === document.body ? $(window).scrollTop() : target.scrollTop;
@@ -41301,6 +41417,9 @@ class PaginationService {
41301
41417
  else {
41302
41418
  // if there is no scrollable element register wheel event on ul element
41303
41419
  $rootEl.on('wheel.scroll_evt', e => {
41420
+ if (parent.widgetType === 'wm-table' && parent.gridOptions.isNavTypeScrollOrOndemand()) {
41421
+ e.stopPropagation();
41422
+ }
41304
41423
  if (e.originalEvent.deltaY > 0) {
41305
41424
  $rootEl.off('wheel.scroll_evt');
41306
41425
  this.debouncedFetchNextDatasetOnScroll(dataNavigator, debounceNum, parent)();
@@ -41766,7 +41885,7 @@ const getRequiredProviders = (nodeDef, providers, nodeAttrs) => {
41766
41885
  }
41767
41886
  });
41768
41887
  };
41769
- const ɵ11 = getRequiredProviders;
41888
+ const ɵ11$1 = getRequiredProviders;
41770
41889
  const DIMENSION_PROPS = ['padding', 'borderwidth', 'margin'];
41771
41890
  const SEPARATOR = ' ', UNSET = 'unset';
41772
41891
  const setDimensionProp = (cssObj, key, nv) => {
@@ -42381,7 +42500,7 @@ var search_build$1 = /*#__PURE__*/Object.freeze({
42381
42500
  const tagName$1m = 'div';
42382
42501
  register('wm-tree', () => {
42383
42502
  return {
42384
- pre: attrs => `<${tagName$1m} wmTree redrawable ${getAttrMarkup(attrs)}>`,
42503
+ pre: attrs => `<${tagName$1m} wmTree ${getAttrMarkup(attrs)}>`,
42385
42504
  post: () => `</${tagName$1m}>`
42386
42505
  };
42387
42506
  });
@@ -44793,10 +44912,21 @@ var video_build$1 = /*#__PURE__*/Object.freeze({
44793
44912
  });
44794
44913
 
44795
44914
  const tagName$1 = 'div';
44915
+ const SPACING_KEY = 'parentLinearLayout.spacing';
44796
44916
  register('wm-linearlayout', () => {
44797
44917
  return {
44798
- pre: attrs => `<${tagName$1} wmLinearLayout ${getAttrMarkup(attrs)}>`,
44799
- post: () => `</${tagName$1}>`
44918
+ requires: ['wm-linearlayout'],
44919
+ pre: (attrs, shared, provider) => {
44920
+ let spacing = attrs.get('spacing');
44921
+ attrs.set('spacing', (!spacing || spacing === '0') && provider ? provider.get(SPACING_KEY) : spacing);
44922
+ return `<${tagName$1} wmLinearLayout ${getAttrMarkup(attrs)}>`;
44923
+ },
44924
+ post: () => `</${tagName$1}>`,
44925
+ provide: (attrs, shared) => {
44926
+ const provider = new Map();
44927
+ provider.set(SPACING_KEY, attrs.get('spacing'));
44928
+ return provider;
44929
+ }
44800
44930
  };
44801
44931
  });
44802
44932
  var linearLayout_build = () => { };
@@ -44943,7 +45073,7 @@ exports.transpile = transpile;
44943
45073
  exports.ɵ0 = ɵ0$h;
44944
45074
  exports.ɵ1 = ɵ1$5;
44945
45075
  exports.ɵ10 = ɵ10$1;
44946
- exports.ɵ11 = ɵ11;
45076
+ exports.ɵ11 = ɵ11$1;
44947
45077
  exports.ɵ12 = ɵ12;
44948
45078
  exports.ɵ13 = ɵ13;
44949
45079
  exports.ɵ14 = ɵ14;