@bizdoc/core 1.9.9 → 1.9.14

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 (74) hide show
  1. package/assets/themes/brown.min.css +1 -1
  2. package/assets/themes/dark.min.css +1 -1
  3. package/assets/themes/deep-purple-light-blue.min.css +3 -3
  4. package/assets/themes/default.min.css +1 -1
  5. package/assets/themes/green.min.css +1 -1
  6. package/assets/themes/indigo.min.css +1 -1
  7. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +3 -2
  8. package/esm2020/lib/admin/positions/positions.component.mjs +44 -5
  9. package/esm2020/lib/browse/browse-items.component.mjs +13 -4
  10. package/esm2020/lib/browse/browse.pane.component.mjs +3 -1
  11. package/esm2020/lib/browse/filter/filter.component.mjs +3 -6
  12. package/esm2020/lib/browse/folders-menu.component.mjs +2 -2
  13. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +18 -16
  14. package/esm2020/lib/compose/compose.pane.component.mjs +7 -4
  15. package/esm2020/lib/compose/document.component.mjs +9 -11
  16. package/esm2020/lib/compose/form-ref.mjs +6 -7
  17. package/esm2020/lib/compose/form.component.mjs +2 -2
  18. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  19. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +6 -8
  20. package/esm2020/lib/core/models.mjs +1 -1
  21. package/esm2020/lib/core/slots/slots.component.mjs +14 -16
  22. package/esm2020/lib/core/translations.mjs +4 -4
  23. package/esm2020/lib/cube/accum/accum.component.mjs +18 -8
  24. package/esm2020/lib/cube/chart/chart.component.mjs +18 -5
  25. package/esm2020/lib/cube/cube-view.component.mjs +9 -11
  26. package/esm2020/lib/cube/declarations.mjs +1 -1
  27. package/esm2020/lib/cube/grid/grid.component.mjs +21 -10
  28. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +123 -117
  29. package/esm2020/lib/cube/matrix/table.component.mjs +4 -4
  30. package/esm2020/lib/cube/parallel/item.mjs +2 -1
  31. package/esm2020/lib/cube/pivot/pivot.component.mjs +7 -4
  32. package/esm2020/lib/cube/sum/sum.component.mjs +2 -2
  33. package/esm2020/lib/cube/view.pane.component.mjs +2 -2
  34. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +2 -2
  35. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +1 -1
  36. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +2 -1
  37. package/esm2020/lib/home/search.service.mjs +8 -5
  38. package/esm2020/lib/modules/chart.module.mjs +6 -6
  39. package/esm2020/lib/modules/gantt.module.mjs +17 -0
  40. package/esm2020/lib/routes.desktop.mjs +8 -8
  41. package/esm2020/lib/routes.mobile.mjs +1 -1
  42. package/esm2020/lib/shared.module.mjs +9 -10
  43. package/esm2020/lib/views/cube/chart.component.mjs +1 -1
  44. package/esm2020/lib/views/cube/matrix.component.mjs +6 -6
  45. package/fesm2015/bizdoc-core.mjs +355 -247
  46. package/fesm2015/bizdoc-core.mjs.map +1 -1
  47. package/fesm2020/bizdoc-core.mjs +353 -247
  48. package/fesm2020/bizdoc-core.mjs.map +1 -1
  49. package/lib/admin/positions/positions.component.d.ts +3 -1
  50. package/lib/browse/browse-items.component.d.ts +2 -2
  51. package/lib/compose/attachments/preview/attachment-preview.component.d.ts +3 -1
  52. package/lib/compose/compose.pane.component.d.ts +1 -0
  53. package/lib/compose/document.component.d.ts +2 -4
  54. package/lib/compose/form-ref.d.ts +1 -3
  55. package/lib/compose/version-compare/version-compare.component.d.ts +2 -4
  56. package/lib/core/models.d.ts +2 -2
  57. package/lib/core/slots/slots.component.d.ts +1 -2
  58. package/lib/cube/accum/accum.component.d.ts +2 -1
  59. package/lib/cube/chart/chart.component.d.ts +5 -3
  60. package/lib/cube/cube-view.component.d.ts +3 -2
  61. package/lib/cube/declarations.d.ts +2 -0
  62. package/lib/cube/grid/grid.component.d.ts +10 -7
  63. package/lib/cube/grid/spreadsheet.component.d.ts +11 -4
  64. package/lib/cube/matrix/table.component.d.ts +1 -1
  65. package/lib/cube/parallel/item.d.ts +2 -2
  66. package/lib/cube/pivot/pivot.component.d.ts +1 -1
  67. package/lib/cube/sum/sum.component.d.ts +1 -1
  68. package/lib/dashboard/cube/accum-cube.widget.d.ts +2 -2
  69. package/lib/dashboard/cube/cube-analysis.base.d.ts +0 -4
  70. package/lib/modules/chart.module.d.ts +1 -1
  71. package/lib/modules/gantt.module.d.ts +7 -0
  72. package/lib/shared.module.d.ts +9 -10
  73. package/lib/views/cube/matrix.component.d.ts +2 -2
  74. package/package.json +1 -2
@@ -114,7 +114,7 @@ import * as i24 from '@angular/flex-layout/extended';
114
114
  import * as i4$1 from '@ctrl/ngx-emoji-mart';
115
115
  import { PickerModule } from '@ctrl/ngx-emoji-mart';
116
116
  import * as i8$2 from '@syncfusion/ej2-angular-charts';
117
- import { AccumulationChart, FunnelSeries, AccumulationDataLabel, AccumulationTooltip, AccumulationLegend, Export, PieSeries, ChartModule, AccumulationChartAllModule, BulletChartAllModule, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService, SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService, StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService, BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService, CrosshairService, CategoryService, DateTimeService, LogarithmicService, LegendService, ZoomService, DataLabelService, SelectionService, ChartAnnotationService, WaterfallSeriesService, RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService, MultiLevelLabelService, ParetoSeriesService, TooltipRenderService, ExportService, AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService, AccumulationChartComponent, Chart as Chart$1, DateTime as DateTime$1, BarSeries as BarSeries$1, AreaSeries as AreaSeries$1, BubbleSeries as BubbleSeries$1, ColumnSeries as ColumnSeries$1, LineSeries as LineSeries$1, PolarSeries as PolarSeries$1, RadarSeries as RadarSeries$1, SplineSeries as SplineSeries$1, SplineAreaSeries as SplineAreaSeries$1, ScatterSeries as ScatterSeries$1, StackingLineSeries as StackingLineSeries$1, StackingAreaSeries as StackingAreaSeries$1, StackingColumnSeries as StackingColumnSeries$1, StackingBarSeries as StackingBarSeries$1, StepAreaSeries as StepAreaSeries$1, StepLineSeries as StepLineSeries$1, ChartComponent, SparklineAllModule } from '@syncfusion/ej2-angular-charts';
117
+ import { AccumulationChart, FunnelSeries, AccumulationDataLabel, AccumulationTooltip, AccumulationLegend, Export, PieSeries, ChartModule, AccumulationChartAllModule, SparklineAllModule, LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService, SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService, StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService, BarSeriesService, StackingBarSeriesService, RangeColumnSeriesService, BubbleSeriesService, TooltipService, CrosshairService, CategoryService, DateTimeService, LogarithmicService, LegendService, ZoomService, DataLabelService, SelectionService, ChartAnnotationService, WaterfallSeriesService, RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService, MultiLevelLabelService, ParetoSeriesService, TooltipRenderService, ExportService, AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService, AccumulationChartComponent, Chart as Chart$1, DateTime as DateTime$1, BarSeries as BarSeries$1, AreaSeries as AreaSeries$1, BubbleSeries as BubbleSeries$1, ColumnSeries as ColumnSeries$1, LineSeries as LineSeries$1, PolarSeries as PolarSeries$1, RadarSeries as RadarSeries$1, SplineSeries as SplineSeries$1, SplineAreaSeries as SplineAreaSeries$1, ScatterSeries as ScatterSeries$1, StackingLineSeries as StackingLineSeries$1, StackingAreaSeries as StackingAreaSeries$1, StackingColumnSeries as StackingColumnSeries$1, StackingBarSeries as StackingBarSeries$1, StepAreaSeries as StepAreaSeries$1, StepLineSeries as StepLineSeries$1, ChartComponent } from '@syncfusion/ej2-angular-charts';
118
118
  import * as XLSX from 'xlsx';
119
119
  import { Chart, Category, DateTime, Tooltip, Export as Export$1, BarSeries, AreaSeries, StackingStepAreaSeries, BubbleSeries, ColumnSeries, LineSeries, Legend, PolarSeries, RadarSeries, SplineSeries, SplineAreaSeries, ScatterSeries, StackingLineSeries, StackingAreaSeries, StackingColumnSeries, StackingBarSeries, StepAreaSeries, StepLineSeries } from '@syncfusion/ej2-charts';
120
120
  import * as i6$5 from '@syncfusion/ej2-angular-grids';
@@ -131,7 +131,7 @@ import { KanbanComponent, KanbanModule } from '@syncfusion/ej2-angular-kanban';
131
131
  import { CircularGaugeModule, AnnotationsService, GaugeTooltipService, LegendService as LegendService$1, CircularGauge, Annotations, GaugeTooltip, CircularGaugeComponent, Legend as Legend$1 } from '@syncfusion/ej2-angular-circulargauge';
132
132
  import { PivotViewModule, ExcelExportService as ExcelExportService$1, GroupingBarService, NumberFormattingService, GroupingService, PivotChartService, ConditionalFormattingService, PivotView as PivotView$1, ExcelExport as ExcelExport$2, PivotViewComponent } from '@syncfusion/ej2-angular-pivotview';
133
133
  import * as i7$6 from '@syncfusion/ej2-angular-gantt';
134
- import { Gantt, SelectionService as SelectionService$3, DayMarkersService, GanttModule } from '@syncfusion/ej2-angular-gantt';
134
+ import { GanttModule, Gantt, SelectionService as SelectionService$3, DayMarkersService } from '@syncfusion/ej2-angular-gantt';
135
135
  import { __decorate } from 'tslib';
136
136
  import player from 'lottie-web/build/player/lottie';
137
137
 
@@ -795,6 +795,9 @@ function getParameterByName(name, url = window.location.href) {
795
795
  return decodeURIComponent(results[2].replace(/\+/g, ' '));
796
796
  }
797
797
 
798
+ class AuthenticationImpl {
799
+ }
800
+
798
801
  class PopupRef {
799
802
  constructor(_data) {
800
803
  this._data = _data;
@@ -911,9 +914,6 @@ class FirebaseService {
911
914
  }
912
915
  }
913
916
 
914
- class AuthenticationImpl {
915
- }
916
-
917
917
  /** Listen to hub contracts */
918
918
  class HubService {
919
919
  constructor(_auth) {
@@ -1703,8 +1703,8 @@ const STRINGS = {
1703
1703
  MailVersionUpdate: '#{0} updated by {1}',
1704
1704
  NewComment: 'Someone commented...',
1705
1705
  Commented: '{0} commented',
1706
- DeleteFile: 'Delete File',
1707
- DeleteFileAsk: 'Are you sure you want to delete this file?',
1706
+ DeleteFile: 'Delete Attachment',
1707
+ DeleteFileAsk: 'Are you sure you want to delete this attachment?',
1708
1708
  DeleteCommentAsk: 'Are you sure you want to delete this comment?',
1709
1709
  GrantAccess: 'Grant Access',
1710
1710
  GrantTip: 'May sign in on your behalf, view and take action',
@@ -1810,7 +1810,7 @@ const STRINGS = {
1810
1810
  Form: 'Form',
1811
1811
  ActionAsk: 'Are you sure you want to {0}?',
1812
1812
  Discard: 'Discard',
1813
- DiscardAsk: 'Are you sure you want to permenently discard form?',
1813
+ DiscardAsk: 'Are you sure you want to permenently discard this document?',
1814
1814
  DiscardSelected: 'Discard {0} item(s)',
1815
1815
  TypeHere: 'Type here',
1816
1816
  ChatHere: 'Chat here',
@@ -2688,16 +2688,17 @@ const IMAGE_TYPE = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
2688
2688
  function isImage(contentType) {
2689
2689
  return IMAGE_TYPE.indexOf(contentType) > -1;
2690
2690
  }
2691
- function formatUrl(documentId, fileId) {
2692
- return `/api/mailbox/download/${documentId}?fileId=${fileId}`;
2691
+ function formatUrl(documentId, fileId, token) {
2692
+ return `/api/mailbox/download/${documentId}?fileId=${fileId}&access_token=${token}`;
2693
2693
  }
2694
2694
  const ANIMATION_TIMINGS = '400ms cubic-bezier(0.25, 0.8, 0.25, 1)';
2695
2695
  /** attachment-preview component*/
2696
2696
  class AttachmentPreview {
2697
2697
  /** attachment-preview ctor */
2698
- constructor(_directionality, _renderer, data, sanitizer, _overlayRef) {
2698
+ constructor(_directionality, _renderer, data, sanitizer, _auth, _overlayRef) {
2699
2699
  this._renderer = _renderer;
2700
2700
  this.data = data;
2701
+ this._auth = _auth;
2701
2702
  this._overlayRef = _overlayRef;
2702
2703
  this.loading = true;
2703
2704
  this.animationState = 'enter';
@@ -2727,7 +2728,7 @@ class AttachmentPreview {
2727
2728
  location.assign(this._url());
2728
2729
  }
2729
2730
  _url() {
2730
- return formatUrl(this.data.documentId, this.data.file.id);
2731
+ return formatUrl(this.data.documentId, this.data.file.id, this._auth.getAccessToken());
2731
2732
  }
2732
2733
  rotate() {
2733
2734
  const elem = (this.isImage ? this.img : this.obj).nativeElement;
@@ -2769,7 +2770,7 @@ class AttachmentPreview {
2769
2770
  this.animationState = 'leave';
2770
2771
  }
2771
2772
  }
2772
- AttachmentPreview.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: AttachmentPreview, deps: [{ token: i7.Directionality }, { token: i0.Renderer2 }, { token: FILE_PREVIEW_DIALOG_DATA }, { token: i1$2.DomSanitizer }, { token: i1$1.OverlayRef }], target: i0.ɵɵFactoryTarget.Component });
2773
+ AttachmentPreview.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: AttachmentPreview, deps: [{ token: i7.Directionality }, { token: i0.Renderer2 }, { token: FILE_PREVIEW_DIALOG_DATA }, { token: i1$2.DomSanitizer }, { token: AuthenticationImpl }, { token: i1$1.OverlayRef }], target: i0.ɵɵFactoryTarget.Component });
2773
2774
  AttachmentPreview.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: AttachmentPreview, selector: "bizdoc-attachment-preview", host: { listeners: { "document:resize": "resize()", "document:keydown.escape": "close()" } }, viewQueries: [{ propertyName: "obj", first: true, predicate: ["obj"], descendants: true }, { propertyName: "img", first: true, predicate: ["img"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"overlay-content\" [@slideContent]=\"animationState\" (@slideContent.start)=\"onAnimationStart($event)\"\r\n [dir]=\"dir\" (@slideContent.done)=\"onAnimationDone($event)\">\r\n <div class=\"toolbar-wrapper\" fxLayout=\"row\" [@slideDown]=\"slideDown\" *ngIf=\"!loading\">\r\n <button mat-icon-button (click)=\"close()\" bizdocTooltip=\"{{'Back' | translate}}\"><mat-icon class=\"mat-icon-rtl-mirror\">keyboard_arrow_left</mat-icon></button>\r\n <span class=\"mat-body-1\">{{data.file.fileName}}</span>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"rotate()\" bizdocTooltip=\"{{'Rotate' | translate }}\"><mat-icon>screen_rotation</mat-icon></button>\r\n <button mat-icon-button (click)=\"download()\" bizdocTooltip=\"{{'Download' | translate}}\"><mat-icon>save_alt</mat-icon></button>\r\n </div>\r\n <div class=\"spinner-wrapper\" *ngIf=\"loading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n <object (load)=\"onLoad($event)\" [data]=\"objectData\" [type]=\"data.file.contentType\" *ngIf=\"!isImage\" #obj></object>\r\n <img *ngIf=\"isImage\" (load)=\"onLoad($event)\" [style.opacity]=\"loading ? 0 : 1\" [@fade]=\"loading ? 'fadeOut' : 'fadeIn'\" [src]=\"objectData\" #img>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;align-items:center}.spinner-wrapper{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:-1}img{width:100%;max-width:500px;height:auto}.overlay-content{padding:1em}.overlay-content .toolbar-wrapper{align-items:center;color:#f5f5f5}.divider{flex:1 1 auto}\n"], components: [{ type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": TranslatePipe }, animations: [
2774
2775
  trigger('fade', [
2775
2776
  state('fadeOut', style({ opacity: 0 })),
@@ -2813,7 +2814,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
2813
2814
  }], ctorParameters: function () { return [{ type: i7.Directionality }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
2814
2815
  type: Inject,
2815
2816
  args: [FILE_PREVIEW_DIALOG_DATA]
2816
- }] }, { type: i1$2.DomSanitizer }, { type: i1$1.OverlayRef }]; }, propDecorators: { obj: [{
2817
+ }] }, { type: i1$2.DomSanitizer }, { type: AuthenticationImpl }, { type: i1$1.OverlayRef }]; }, propDecorators: { obj: [{
2817
2818
  type: ViewChild,
2818
2819
  args: ['obj', { static: false }]
2819
2820
  }], img: [{
@@ -5954,12 +5955,9 @@ class BrowseFilterComponent {
5954
5955
  const folder = this._session.profile.folders.find(f => f.name === this.folderId);
5955
5956
  if (folder.filters)
5956
5957
  this.filters = folder.filters;
5957
- else if (this._config.folders.axes) {
5958
- const { axes, cube } = this._config.folders;
5959
- this.filters = { axes, cube };
5960
- }
5958
+ return;
5961
5959
  }
5962
- else if (this._config.folders.axes) {
5960
+ if (this._config.folders && this._config.folders.axes) {
5963
5961
  const { axes, cube } = this._config.folders;
5964
5962
  this.filters = { axes, cube };
5965
5963
  }
@@ -6831,7 +6829,7 @@ class BrowseItemsComponent {
6831
6829
  this._loading$.pipe(takeUntil(this._destroy), debounceTime$1(100)).
6832
6830
  subscribe(e => this.loading = e);
6833
6831
  }
6834
- ngOnChanges(changes) {
6832
+ ngOnChanges(_) {
6835
6833
  this.displayedColumns = this._columns();
6836
6834
  this.refresh();
6837
6835
  }
@@ -7022,7 +7020,7 @@ class BrowseItemsComponent {
7022
7020
  }
7023
7021
  }
7024
7022
  /**
7025
- * execute function per item in collection
7023
+ * execute function per selected item
7026
7024
  * @param fn
7027
7025
  * @param error
7028
7026
  */
@@ -7069,6 +7067,11 @@ class BrowseItemsComponent {
7069
7067
  const columns = ['select'];
7070
7068
  if (this.folder && this.folder.columns)
7071
7069
  this._appendcolumns(this.folder.columns, columns);
7070
+ else if (!this.folder) {
7071
+ const folder = this._session.profile.folders.find(f => f.name === 'fav');
7072
+ if (folder && folder.columns)
7073
+ this._appendcolumns(folder.columns, columns);
7074
+ }
7072
7075
  else if (this._config.folders && this._config.folders.columns)
7073
7076
  this._appendcolumns(this._config.folders.columns, columns);
7074
7077
  else {
@@ -7092,7 +7095,11 @@ class BrowseItemsComponent {
7092
7095
  }
7093
7096
  sendAll(action, args) {
7094
7097
  const params = queryParams(args);
7095
- this._forEach(i => this._mailbox.send(i.id, i.version, i.formId, null, action, params).pipe(tap(() => (i.folderId !== this.folderId) && this.dataSource.data.remove(i))), 'SendErr').
7098
+ this._forEach(i => this._mailbox.send(i.id, i.version, i.formId, null, action, params).
7099
+ pipe(tap(() => {
7100
+ if (i.folderId !== this.folderId)
7101
+ this.dataSource.data.remove(i);
7102
+ })), 'SendErr').
7096
7103
  subscribe(is => is.length > 1 ? this._sb.toast('SentMany', is.length.toString(), this._actionAdjective(action, true)) :
7097
7104
  this._sb.toast('Sent', is[0].number, this._actionAdjective(action)));
7098
7105
  }
@@ -8271,8 +8278,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
8271
8278
  }] } });
8272
8279
 
8273
8280
  class FormRef {
8274
- constructor(_router) {
8275
- this._router = _router;
8281
+ constructor( /*private _router: RouterImpl*/) {
8276
8282
  this._saving = new Subject();
8277
8283
  this._stateChange = new Subject();
8278
8284
  this._modelChange = new Subject();
@@ -8301,10 +8307,10 @@ class FormRef {
8301
8307
  * @param page
8302
8308
  */
8303
8309
  navigate(page) {
8304
- this._router.navigate([], {
8305
- queryParams: { page },
8306
- state: { paging: true }
8307
- });
8310
+ //this._router.navigate([], {
8311
+ // queryParams: { page },
8312
+ // state: { paging: true }
8313
+ //});
8308
8314
  this._navigating.next(page);
8309
8315
  }
8310
8316
  /** release events */
@@ -8773,7 +8779,7 @@ class ComposeFormComponent {
8773
8779
  if (!this.form.template)
8774
8780
  throw (`Form '${this.form.name}' model missing '[Template()]' attribute.`);
8775
8781
  const factory = this._cf.resolve(this.form.template);
8776
- this._formRef = new FormRef(this._router);
8782
+ this._formRef = new FormRef();
8777
8783
  this._formRef._navigating.
8778
8784
  subscribe(p => this.page = p);
8779
8785
  this._formRef._stateChange.pipe(startWith()).
@@ -9119,7 +9125,7 @@ class ComposePaneComponent {
9119
9125
  this._pane.icon = form.icon;
9120
9126
  if (this.model.draft) {
9121
9127
  this.mode = 'compose';
9122
- //this._pane.expand();
9128
+ //setTimeout(()=>this._pane.expand());
9123
9129
  }
9124
9130
  else
9125
9131
  this.mode = 'preview';
@@ -9157,6 +9163,9 @@ class ComposePaneComponent {
9157
9163
  });
9158
9164
  this._pane.fullscreenChange.subscribe(f => this.expendable = !f);
9159
9165
  }
9166
+ close() {
9167
+ this._pane.close();
9168
+ }
9160
9169
  edit() {
9161
9170
  this.mode = 'compose';
9162
9171
  this.expendable && this.expand();
@@ -9243,12 +9252,12 @@ class ComposePaneComponent {
9243
9252
  }
9244
9253
  }
9245
9254
  ComposePaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposePaneComponent, deps: [{ token: SessionService }, { token: MailboxService }, { token: PaneRef }, { token: PanesRouter }], target: i0.ɵɵFactoryTarget.Component });
9246
- ComposePaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: ComposePaneComponent, selector: "bizdoc-compose.pane", host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)", "document:keydown": "handleKeydown($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "dropableElement", first: true, predicate: ["dropable"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button color=\"primary\" (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" *ngIf=\"form.page !== undefined\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.draft\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.actions?.length === 1\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n </button>\r\n <button mat-stroked-button data-help=\"send\" color=\"primary\" *ngIf=\"model.actions?.length > 1\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n <ng-container *ngFor=\"let a of form.actions; let i = index\">\r\n <mat-divider *ngIf=\"i > 0 && form.actions[i - 1].group !== a.group\"></mat-divider>\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n </ng-container>\r\n </ng-template>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\" *ngIf=\"mode === 'compose'\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon class=\"filled\">{{model.tags && model.tags.length ?'bookmark':'bookmark_border'}}</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.document-flag]=\"model.flag\">{{model.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\" *ngIf=\"mode !== 'compose' && model.pending && !model.completed\"><mat-icon>create</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.copy()\" data-help=\"copy\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"working\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-icon-button (click)=\"discard()\" [bizdocTooltip]=\"'Discard' | translate\" *ngIf=\"model.draft && !model.issued\" [disabled]=\"working\"><mat-icon>delete_outlined</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\" [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\">\r\n <mat-icon [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"view()\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.guide(form.help)\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"form.help\" tabindex=\"1\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" *ngIf=\"expendable\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n</mat-toolbar>\r\n<div class=\"file-dropable\" #dropable>\r\n <bizdoc-form [model]=model #form\r\n (modelChange)=\"change()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [".nav-toolbar{position:sticky;top:0;z-index:1}.file-dropable.drag{opacity:.5;overflow:hidden;margin:8px;border-style:dashed;border-color:#777;border-width:5px;background-color:#f5f5f5;z-index:2;top:0;left:0;right:0;bottom:0}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: ComposeFormComponent, selector: "bizdoc-form", inputs: ["model", "working", "dirty", "valid", "mode", "contacts"], outputs: ["modelChange", "workingChange", "dirtyChange", "validChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i8$1.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": TranslatePipe } });
9255
+ ComposePaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: ComposePaneComponent, selector: "bizdoc-compose.pane", host: { listeners: { "document:drop": "handleDocumentDrop($event)", "drop": "handleDrop($event)", "dragenter": "handleEnter($event)", "dragleave": "handleLeave($event)", "dragover": "handleOver($event)", "document:keydown": "handleKeydown($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "form", first: true, predicate: ComposeFormComponent, descendants: true, static: true }, { propertyName: "dropableElement", first: true, predicate: ["dropable"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button color=\"primary\" (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" *ngIf=\"form.page !== undefined\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.draft\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.actions?.length === 1\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n </button>\r\n <button mat-stroked-button data-help=\"send\" color=\"primary\" *ngIf=\"model.actions?.length > 1\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n <ng-container *ngFor=\"let a of form.actions; let i = index\">\r\n <mat-divider *ngIf=\"i > 0 && form.actions[i - 1].group !== a.group\"></mat-divider>\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n </ng-container>\r\n </ng-template>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\" *ngIf=\"mode === 'compose'\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon class=\"filled\">{{model.tags && model.tags.length ?'bookmark':'bookmark_border'}}</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.document-flag]=\"model.flag\">{{model.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\" *ngIf=\"mode !== 'compose' && model.pending && !model.completed\"><mat-icon>create</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\" [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\">\r\n <mat-icon [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"view()\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" *ngIf=\"expendable\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"discard()\" *ngIf=\"model.draft && !model.issued\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n <ng-container *ngIf=\"form.help\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable\" #dropable>\r\n <bizdoc-form [model]=model #form\r\n (modelChange)=\"change()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [".nav-toolbar{position:sticky;top:0;z-index:1}.file-dropable.drag{opacity:.5;overflow:hidden;margin:8px;border-style:dashed;border-color:#777;border-width:5px;background-color:#f5f5f5;z-index:2;top:0;left:0;right:0;bottom:0}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: ComposeFormComponent, selector: "bizdoc-form", inputs: ["model", "working", "dirty", "valid", "mode", "contacts"], outputs: ["modelChange", "workingChange", "dirtyChange", "validChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i8$1.MatMenuContent, selector: "ng-template[matMenuContent]" }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": TranslatePipe } });
9247
9256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposePaneComponent, decorators: [{
9248
9257
  type: Component,
9249
9258
  args: [{ selector: 'bizdoc-compose.pane', host: {
9250
9259
  class: 'pane'
9251
- }, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button color=\"primary\" (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" *ngIf=\"form.page !== undefined\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.draft\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.actions?.length === 1\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n </button>\r\n <button mat-stroked-button data-help=\"send\" color=\"primary\" *ngIf=\"model.actions?.length > 1\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n <ng-container *ngFor=\"let a of form.actions; let i = index\">\r\n <mat-divider *ngIf=\"i > 0 && form.actions[i - 1].group !== a.group\"></mat-divider>\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n </ng-container>\r\n </ng-template>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\" *ngIf=\"mode === 'compose'\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon class=\"filled\">{{model.tags && model.tags.length ?'bookmark':'bookmark_border'}}</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.document-flag]=\"model.flag\">{{model.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\" *ngIf=\"mode !== 'compose' && model.pending && !model.completed\"><mat-icon>create</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.copy()\" data-help=\"copy\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"working\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-icon-button (click)=\"discard()\" [bizdocTooltip]=\"'Discard' | translate\" *ngIf=\"model.draft && !model.issued\" [disabled]=\"working\"><mat-icon>delete_outlined</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\" [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\">\r\n <mat-icon [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"view()\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.guide(form.help)\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"form.help\" tabindex=\"1\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" *ngIf=\"expendable\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n</mat-toolbar>\r\n<div class=\"file-dropable\" #dropable>\r\n <bizdoc-form [model]=model #form\r\n (modelChange)=\"change()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [".nav-toolbar{position:sticky;top:0;z-index:1}.file-dropable.drag{opacity:.5;overflow:hidden;margin:8px;border-style:dashed;border-color:#777;border-width:5px;background-color:#f5f5f5;z-index:2;top:0;left:0;right:0;bottom:0}\n"] }]
9260
+ }, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button color=\"primary\" (click)=\"form.back()\" [bizdocTooltip]=\"'Back'|translate\" *ngIf=\"form.page !== undefined\" tabindex=\"1\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.draft\" data-help=\"submit\"\r\n (click)=\"submit()\" [disabled]=\"!valid||working\">\r\n <span>{{'Submit' | translate}}</span>\r\n </button>\r\n <button mat-stroked-button color=\"primary\" *ngIf=\"model.actions?.length === 1\" [attr.data-help]=\"'action-'+form.actions[0].name\" (click)=\"send(model.actions[0])\" [disabled]=\"!valid||working\">\r\n <span>{{form.actions[0].title}}</span>\r\n </button>\r\n <button mat-stroked-button data-help=\"send\" color=\"primary\" *ngIf=\"model.actions?.length > 1\" [matMenuTriggerFor]=\"actionMenu\" [disabled]=\"!valid||working\" [bizdocTooltip]=\"'Send' | translate\">\r\n <span>{{'Send' | translate}}</span>\r\n </button>\r\n <!-- action -->\r\n <mat-menu #actionMenu>\r\n <ng-template matMenuContent>\r\n <ng-container *ngFor=\"let a of form.actions; let i = index\">\r\n <mat-divider *ngIf=\"i > 0 && form.actions[i - 1].group !== a.group\"></mat-divider>\r\n <button mat-menu-item (click)=\"send(a.name)\">{{a.title}}</button>\r\n </ng-container>\r\n </ng-template>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"save()\" data-help=\"save\" [disabled]=\"!dirty||working\" [bizdocTooltip]=\"'Save'|translate\" *ngIf=\"mode === 'compose'\">\r\n <mat-icon>save</mat-icon>\r\n </button>\r\n <button mat-icon-button data-help=\"tag\" (click)=\"form.tag($event)\" [bizdocTooltip]=\"'Tags' | translate\" [disabled]=\"working\"><mat-icon class=\"filled\">{{model.tags && model.tags.length ?'bookmark':'bookmark_border'}}</mat-icon></button>\r\n <button mat-icon-button data-help=\"flag\" [bizdocTooltip]=\"'Flagged'| translate\" [disabled]=\"working\" (click)=\"form.flag()\"><mat-icon [class.document-flag]=\"model.flag\">{{model.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"form.attach()\" data-help=\"attach\" [bizdocTooltip]=\"'AttachFile' | translate\" [disabled]=\"working\"><mat-icon>attach_file</mat-icon></button>\r\n <button mat-icon-button [disabled]=\"working\" data-help=\"edit\" (click)=\"edit()\" [bizdocTooltip]=\"'Edit' | translate\" *ngIf=\"mode !== 'compose' && model.pending && !model.completed\"><mat-icon>create</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"navTrace()\" [bizdocTooltip]=\"'Trace' | translate\" tabindex=\"1\"><mat-icon>timeline</mat-icon></button>\r\n <button mat-icon-button (click)=\"navComments()\" data-help=\"comments\" [bizdocTooltip]=\"'Comments' | translate\" [matBadge]=\"newCommentsCount\" [matBadgeHidden]=\"!newCommentsCount\" matBadgeColor=\"accent\">\r\n <mat-icon [class.filled]=\"model.comments.length > 0\">format_quote</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"view()\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"optionsMenu\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\"><mat-icon>more_vert</mat-icon></button>\r\n <button mat-icon-button (click)=\"expand()\" [bizdocTooltip]=\"'Expand' | translate\" *ngIf=\"expendable\" [attr.aria-label]=\"'Expand' | translate\"><mat-icon>open_in_new</mat-icon></button>\r\n <mat-menu #optionsMenu=\"matMenu\">\r\n <ng-template matMenuContent>\r\n <button mat-menu-item (click)=\"form.copy()\" [disabled]=\"working\">\r\n <!--<mat-icon>content_copy</mat-icon>-->\r\n <span>{{'Copy' | translate}}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"discard()\" *ngIf=\"model.draft && !model.issued\" [disabled]=\"working\">\r\n <!--<mat-icon>delete_outlined</mat-icon>-->\r\n <span>{{'Discard' | translate}}</span>\r\n </button>\r\n <ng-container *ngIf=\"form.help\">\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"form.guide(form.help)\">\r\n <!--<mat-icon>help_outline</mat-icon>-->\r\n <span>{{'Help' | translate}}</span>\r\n </button>\r\n </ng-container>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"close()\"><!--<mat-icon></mat-icon>--><span>{{'Close'| translate}}</span></button>\r\n </ng-template>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"file-dropable\" #dropable>\r\n <bizdoc-form [model]=model #form\r\n (modelChange)=\"change()\"\r\n (validChange)=\"valid=$event\"\r\n (workingChange)=\"working=$event\"\r\n (dirtyChange)=\"dirty=$event\" [mode]=\"mode\"></bizdoc-form>\r\n</div>\r\n", styles: [".nav-toolbar{position:sticky;top:0;z-index:1}.file-dropable.drag{opacity:.5;overflow:hidden;margin:8px;border-style:dashed;border-color:#777;border-width:5px;background-color:#f5f5f5;z-index:2;top:0;left:0;right:0;bottom:0}\n"] }]
9252
9261
  }], ctorParameters: function () { return [{ type: SessionService }, { type: MailboxService }, { type: PaneRef }, { type: PanesRouter }]; }, propDecorators: { form: [{
9253
9262
  type: ViewChild,
9254
9263
  args: [ComposeFormComponent, { static: true }]
@@ -9300,6 +9309,8 @@ class BrowsePaneComponent {
9300
9309
  this.filterType = p['type'];
9301
9310
  if (this.filterType === 'flagged')
9302
9311
  this._pane.title = this._translate.get('Flagged');
9312
+ else if (p['tag'])
9313
+ this._pane.title = this._translate.get('Tags');
9303
9314
  this.filters = p;
9304
9315
  });
9305
9316
  const events = this._router.events.pipe(takeUntil(this._destroy));
@@ -9452,6 +9463,7 @@ class CubeAccumulationChartComponent {
9452
9463
  this.endAngle = 360;
9453
9464
  this.innerRadius = '0';
9454
9465
  }
9466
+ this.execute();
9455
9467
  }
9456
9468
  textRender(e) {
9457
9469
  e.text = e.point.x;
@@ -9474,10 +9486,13 @@ class CubeAccumulationChartComponent {
9474
9486
  *
9475
9487
  */
9476
9488
  ngOnChanges(changes) {
9477
- if (changes['filters'])
9489
+ if (changes['filters'] && !changes['filters'].firstChange)
9478
9490
  this.execute();
9479
9491
  else if (changes['height'])
9480
- this.accumchart && this.accumchart.accumulationResize();
9492
+ this.resize();
9493
+ }
9494
+ resize() {
9495
+ this.accumchart && this.accumchart.accumulationResize();
9481
9496
  }
9482
9497
  execute() {
9483
9498
  this.loadingChange.emit(true);
@@ -9507,11 +9522,17 @@ class CubeAccumulationChartComponent {
9507
9522
  height: this.height,
9508
9523
  currencyCode: this.currencyCode,
9509
9524
  series: [{
9510
- dataSource: this.dataSource, xName: 'name', yName: 'y',
9511
- startAngle: this.startAngle, endAngle: this.endAngle,
9512
- radius: "70%", dataLabel: this.dataLabel,
9513
- explode: true, explodeOffset: '10%',
9514
- explodeIndex: 0, innerRadius: this.innerRadius,
9525
+ dataSource: this.dataSource,
9526
+ xName: 'name',
9527
+ yName: 'y',
9528
+ startAngle: this.startAngle,
9529
+ endAngle: this.endAngle,
9530
+ radius: "70%",
9531
+ dataLabel: this.dataLabel,
9532
+ explode: true,
9533
+ explodeOffset: '10%',
9534
+ explodeIndex: 0,
9535
+ innerRadius: this.innerRadius,
9515
9536
  palettes: this.palettes
9516
9537
  }]
9517
9538
  }, this._elementRef.nativeElement);
@@ -9613,6 +9634,8 @@ class CubeChartComponent {
9613
9634
  };
9614
9635
  this.tooltip = {
9615
9636
  enable: true,
9637
+ enableAnimation: false,
9638
+ border: { width: 0 },
9616
9639
  textStyle: {
9617
9640
  fontFamily: FONT_FAMILY
9618
9641
  }
@@ -9643,26 +9666,35 @@ class CubeChartComponent {
9643
9666
  set series(value) {
9644
9667
  if (value)
9645
9668
  this._series = isArray(value) ? value : [value];
9669
+ else
9670
+ this._series = null;
9646
9671
  }
9647
9672
  get indices() {
9648
9673
  return this._indices;
9649
9674
  }
9650
9675
  set indices(value) {
9651
- this._indices = isArray(value) ? value : [value];
9676
+ if (value)
9677
+ this._indices = isArray(value) ? value : [value];
9678
+ else
9679
+ this._indices = null;
9652
9680
  }
9653
9681
  ngOnInit() {
9654
9682
  if (this.chartType === 'Line' || this.chartType === 'Spline')
9655
9683
  this.crosshair.enable = true;
9656
9684
  this.primaryYAxis.labelFormat = this.currencyCode ? 'c0' : 'n0';
9685
+ this.execute();
9657
9686
  }
9658
9687
  /**
9659
9688
  *
9660
9689
  */
9661
9690
  ngOnChanges(changes) {
9662
- if (changes['filters'])
9691
+ if (changes['filters'] && !changes['filters'].firstChange)
9663
9692
  this.execute();
9664
9693
  else if (changes['height'])
9665
- this.chart && this.chart.chartResize();
9694
+ this.resize();
9695
+ }
9696
+ resize() {
9697
+ this.chart && this.chart.chartResize();
9666
9698
  }
9667
9699
  execute() {
9668
9700
  this.loadingChange.emit(true);
@@ -9774,7 +9806,7 @@ class CubeChartComponent {
9774
9806
  }
9775
9807
  CubeChartComponent.nextId = 0;
9776
9808
  CubeChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeChartComponent, deps: [{ token: CubeService }, { token: PromptService }, { token: TranslateService }, { token: SessionService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
9777
- CubeChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeChartComponent, selector: "bizdoc-cube-chart", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", series: "series", indices: "indices", filters: "filters", chartType: "chartType", indexChartType: "indexChartType", scope: "scope", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { attributes: { "dir": "ltr" }, properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
9809
+ CubeChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeChartComponent, selector: "bizdoc-cube-chart", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", series: "series", indices: "indices", filters: "filters", yAxis: "yAxis", chartType: "chartType", indexChartType: "indexChartType", scope: "scope", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { attributes: { "dir": "ltr" }, properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
9778
9810
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeChartComponent, decorators: [{
9779
9811
  type: Component,
9780
9812
  args: [{
@@ -9799,6 +9831,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
9799
9831
  type: Input
9800
9832
  }], filters: [{
9801
9833
  type: Input
9834
+ }], yAxis: [{
9835
+ type: Input
9802
9836
  }], chartType: [{
9803
9837
  type: Input
9804
9838
  }], indexChartType: [{
@@ -9834,9 +9868,20 @@ class CubeGridComponent {
9834
9868
  this._rows = [];
9835
9869
  this._columns = [];
9836
9870
  }
9871
+ set xAxis(val) {
9872
+ this._xAxis = isArray(val) ? val : [val];
9873
+ }
9874
+ set series(val) {
9875
+ if (val)
9876
+ this._series = isArray(val) ? val : [val];
9877
+ }
9878
+ set indices(val) {
9879
+ if (val)
9880
+ this._indices = isArray(val) ? val : [val];
9881
+ }
9837
9882
  ngOnInit() {
9838
- const cube = this._session.profile.cubes.find(c => c.name === this.cube);
9839
- const x = cube.axes.find(a => a.name === this.xAxis[0]), y = cube.axes.find(a => a.name === this.series[0]);
9883
+ this._cube = this.cube ? this._session.profile.cubes.find(c => c.name === this.cube) : this._session.profile.cubes[0];
9884
+ const x = this._cube.axes.find(a => a.name === this._xAxis[0]), y = this._cube.axes.find(a => a.name === this._series[0]);
9840
9885
  const promises = [];
9841
9886
  // aquire columns source
9842
9887
  let observe = this._ds.all(x.dataType).
@@ -9876,17 +9921,18 @@ class CubeGridComponent {
9876
9921
  // prepare
9877
9922
  this._prepare =
9878
9923
  forkJoin(promises).toPromise();
9924
+ this.execute();
9879
9925
  }
9880
9926
  /** */
9881
9927
  ngOnChanges(changes) {
9882
- if (changes['filters'])
9928
+ if (changes['filters'] && !changes['filters'].firstChange)
9883
9929
  this.execute();
9884
9930
  else if (changes['height'])
9885
9931
  this.resize();
9886
9932
  }
9887
9933
  execute() {
9888
9934
  this.loadingChange.emit(true);
9889
- this._service.series(this.cube, this.xAxis, { series: this.series, filters: this.filters, indices: this.indices }).
9935
+ this._service.series(this._cube.name, this._xAxis, { series: this._series, filters: this.filters, indices: this._indices }).
9890
9936
  subscribe(series => {
9891
9937
  this._prepare.then(() => {
9892
9938
  const rows = [];
@@ -9957,9 +10003,9 @@ class CubeGridComponent {
9957
10003
  if (data[`_${column}`] === 0)
9958
10004
  return;
9959
10005
  const axes = {};
9960
- axes[this.xAxis[0]] = column;
10006
+ axes[this._xAxis[0]] = column;
9961
10007
  if (type !== 'Index')
9962
- axes[this.series[0]] = row;
10008
+ axes[this._series[0]] = row;
9963
10009
  this.explore.emit({ axes, index: type === 'Index' ? row : null });
9964
10010
  }
9965
10011
  customAggregate(_, column) {
@@ -9981,7 +10027,7 @@ class CubeGridComponent {
9981
10027
  }
9982
10028
  CubeGridComponent.nextId = 0;
9983
10029
  CubeGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeGridComponent, deps: [{ token: SessionService }, { token: PromptService }, { token: DatasourceService }, { token: CubeService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
9984
- CubeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeGridComponent, selector: "bizdoc-cube-grid", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [".nowrap{white-space:nowrap;word-wrap:normal}::ng-deep .e-rowcell:not(.e-headertext){cursor:pointer}::ng-deep .e-grid td.e-cellselectionbackground{background-color:none}\n"] });
10030
+ CubeGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeGridComponent, selector: "bizdoc-cube-grid", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", series: "series", indices: "indices", filters: "filters", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: [".nowrap{white-space:nowrap;word-wrap:normal}::ng-deep .e-rowcell:not(.e-headertext){cursor:pointer}::ng-deep .e-grid td.e-cellselectionbackground{background-color:none}\n"] });
9985
10031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeGridComponent, decorators: [{
9986
10032
  type: Component,
9987
10033
  args: [{ selector: 'bizdoc-cube-grid', template: '', host: {
@@ -9995,8 +10041,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
9995
10041
  type: Input
9996
10042
  }], xAxis: [{
9997
10043
  type: Input
9998
- }], yAxis: [{
9999
- type: Input
10000
10044
  }], series: [{
10001
10045
  type: Input
10002
10046
  }], indices: [{
@@ -10120,6 +10164,8 @@ class CubePivotComponent {
10120
10164
  }
10121
10165
  },
10122
10166
  tooltip: {
10167
+ enableAnimation: false,
10168
+ border: { width: 0 },
10123
10169
  textStyle: {
10124
10170
  fontFamily: FONT_FAMILY
10125
10171
  }
@@ -10165,6 +10211,7 @@ class CubePivotComponent {
10165
10211
  currency: this.currencyCode,
10166
10212
  });
10167
10213
  });
10214
+ this.execute();
10168
10215
  }
10169
10216
  _getIndexTitle(name) {
10170
10217
  return this._cube.indices.find(i => i.name === name).title;
@@ -10177,7 +10224,7 @@ class CubePivotComponent {
10177
10224
  *
10178
10225
  */
10179
10226
  ngOnChanges(changes) {
10180
- if (changes['filters'])
10227
+ if (changes['filters'] && !changes['filters'].firstChange)
10181
10228
  this.execute();
10182
10229
  else if (changes['height'] || changes['width'])
10183
10230
  this.resize();
@@ -10200,7 +10247,7 @@ class CubePivotComponent {
10200
10247
  // columns
10201
10248
  const columns = xAxis2.concat(series2);
10202
10249
  // query
10203
- this._service.table(this.cube, columns, { filters: this.filters, indices: this.indices }).subscribe(r => {
10250
+ this._service.table(this._cube.name, columns, { filters: this.filters, indices: this.indices }).subscribe(r => {
10204
10251
  this._presets(xAxis2, series2, r);
10205
10252
  this._draw();
10206
10253
  this.loadingChange.emit(false);
@@ -10362,9 +10409,9 @@ class CubePivotComponent {
10362
10409
  }
10363
10410
  }
10364
10411
  ngOnDestroy() {
10412
+ this.pivot && this.pivot.destroy();
10365
10413
  this._destroy.next();
10366
10414
  this._destroy.complete();
10367
- this.pivot && this.pivot.destroy();
10368
10415
  }
10369
10416
  }
10370
10417
  CubePivotComponent.nextId = 0;
@@ -10425,6 +10472,8 @@ class CubeSpreadsheetComponent {
10425
10472
  this.loadingChange = new EventEmitter();
10426
10473
  this.id = `cube-spreadsheet-${CubeSpreadsheetComponent.nextId++}`;
10427
10474
  this.dataSource = [];
10475
+ this.numberStyle = { textAlign: 'right' };
10476
+ this.autoFillSettings = { showFillOptions: false };
10428
10477
  this._yrows = [];
10429
10478
  this._xcolumns = [];
10430
10479
  this._intl = new Internationalization();
@@ -10448,7 +10497,7 @@ class CubeSpreadsheetComponent {
10448
10497
  maximumFractionDigits: this._service.fractionDigits,
10449
10498
  minimumFractionDigits: this._service.fractionDigits
10450
10499
  });
10451
- this._cube = this._session.profile.cubes.find(c => c.name === this.cube);
10500
+ this._cube = this.cube ? this._session.profile.cubes.find(c => c.name === this.cube) : this._session.profile.cubes[0];
10452
10501
  if (!this._series) {
10453
10502
  this._axes = this._xAxis.map(c => this._cube.axes.find(a => a.name == c));
10454
10503
  if (this._indices)
@@ -10486,52 +10535,27 @@ class CubeSpreadsheetComponent {
10486
10535
  promises.push(observe);
10487
10536
  this._prepare = Promise.all(promises);
10488
10537
  }
10538
+ this.execute();
10489
10539
  }
10490
10540
  ngOnChanges(changes) {
10491
- if (changes['filters'])
10541
+ if (changes['filters'] && !changes['filters'].firstChange)
10492
10542
  this.execute();
10493
10543
  else if (changes['height'] || changes['width'])
10494
- if (this.spreadsheet) {
10495
- this.spreadsheet.height = this.height;
10496
- this.spreadsheet.width = this.width;
10497
- this.spreadsheet.resize();
10498
- }
10544
+ this.resize();
10545
+ }
10546
+ resize() {
10547
+ if (this.spreadsheet) {
10548
+ this.spreadsheet.height = this.height;
10549
+ this.spreadsheet.width = this.width;
10550
+ this.spreadsheet.resize();
10551
+ }
10499
10552
  }
10500
10553
  execute() {
10501
10554
  this.loadingChange.emit(true);
10502
- const numberStyle = { textAlign: 'right' };
10503
10555
  if (!this._series)
10504
- this._service.table(this.cube, this._xAxis, { filters: this.filters, indices: this._indices }).
10556
+ this._service.table(this._cube.name, this._xAxis, { filters: this.filters, indices: this._indices }).
10505
10557
  subscribe(data => {
10506
- const cells = [], style = { fontWeight: 'bold', textAlign: 'center' };
10507
- this._axes.forEach(c => cells.push({
10508
- value: c.title, style
10509
- }));
10510
- this._indices && this._cindices.forEach(i => cells.push({ value: i.title, style }));
10511
- cells.push({
10512
- value: this.yAxis ? this.yAxis.title : this._translate.get('Value'),
10513
- style
10514
- });
10515
- this.dataSource = [{
10516
- cells, height: 20
10517
- }];
10518
- data.forEach(d => {
10519
- const cells = [];
10520
- this._xAxis.forEach(c => cells.push({
10521
- value: d[c],
10522
- }));
10523
- this._indices && this._indices.forEach(i => cells.push({
10524
- style: numberStyle,
10525
- format: this._numberFormat,
10526
- value: (d[i] || 0).toString(),
10527
- }));
10528
- cells.push({
10529
- style: numberStyle,
10530
- format: this._numberFormat,
10531
- value: (d.value || 0).toString(),
10532
- });
10533
- this.dataSource.push({ cells, source: d, height: 20 });
10534
- });
10558
+ this._datatable(data);
10535
10559
  this._draw();
10536
10560
  this.loadingChange.emit(false);
10537
10561
  }, (e) => {
@@ -10540,39 +10564,9 @@ class CubeSpreadsheetComponent {
10540
10564
  });
10541
10565
  else
10542
10566
  this._service.series(this.cube, this._xAxis, { series: this._series, filters: this.filters }).
10543
- subscribe(d => {
10567
+ subscribe(data => {
10544
10568
  this._prepare.then(() => {
10545
- const style = { fontWeight: 'bold', textAlign: 'center' };
10546
- const cells = [{ value: '' }];
10547
- this._xcolumns.forEach(c => cells.push({ value: c.value, style }));
10548
- this.dataSource = [{ cells, height: 20 }];
10549
- this._indices && this._cube.indices.filter(i => this._indices.indexOf(i.name) > 0).
10550
- forEach(i => {
10551
- const cells = [{ value: i.title, style }], serie = d.find(s => s.index === i.name), map = {};
10552
- if (serie) {
10553
- serie.points.forEach(p => map[p.x] = p.y);
10554
- this._xcolumns.forEach(c => cells.push({
10555
- value: (map[c.key] || 0).toString(),
10556
- format: this._numberFormat,
10557
- style: numberStyle
10558
- }));
10559
- this.dataSource.push({ cells, height: 20 });
10560
- }
10561
- });
10562
- this._yrows.forEach(r => {
10563
- const cells = [{ value: r.value, style }], serie = d.find(s => s.name === r.key), map = {};
10564
- if (serie) {
10565
- serie.points.forEach(p => map[p.x] = p.y);
10566
- this._xcolumns.forEach(c => cells.push({
10567
- value: (map[c.key] || 0).toString(),
10568
- format: this._numberFormat,
10569
- style: numberStyle
10570
- }));
10571
- }
10572
- else
10573
- this._xcolumns.forEach(_ => cells.push({ value: '0' }));
10574
- this.dataSource.push({ cells, height: 20 });
10575
- });
10569
+ this._dataseries(data);
10576
10570
  this._draw();
10577
10571
  this.loadingChange.emit(false);
10578
10572
  });
@@ -10581,6 +10575,70 @@ class CubeSpreadsheetComponent {
10581
10575
  this.loadingChange.emit(false);
10582
10576
  });
10583
10577
  }
10578
+ _datatable(data) {
10579
+ const cells = [], style = { fontWeight: 'bold', textAlign: 'center' };
10580
+ this._axes.forEach(c => cells.push({
10581
+ value: c.title, style
10582
+ }));
10583
+ this._indices && this._cindices.forEach(i => cells.push({ value: i.title, style }));
10584
+ cells.push({
10585
+ value: this.yAxis ? this.yAxis.title : this._translate.get('Value'),
10586
+ style
10587
+ });
10588
+ this.dataSource = [{
10589
+ cells, height: 25
10590
+ }];
10591
+ data.forEach(d => {
10592
+ const cells = [];
10593
+ this._xAxis.forEach(c => cells.push({
10594
+ value: d[c],
10595
+ }));
10596
+ this._indices && this._indices.forEach(i => cells.push({
10597
+ style: this.numberStyle,
10598
+ format: this._numberFormat,
10599
+ value: (d[i] || 0).toString(),
10600
+ }));
10601
+ cells.push({
10602
+ style: this.numberStyle,
10603
+ format: this._numberFormat,
10604
+ value: (d.value || 0).toString(),
10605
+ });
10606
+ this.dataSource.push({ cells, source: d, height: 25 });
10607
+ });
10608
+ }
10609
+ _dataseries(d) {
10610
+ const style = { fontWeight: 'bold', textAlign: 'center' };
10611
+ const cells = [{ value: '' }];
10612
+ this._xcolumns.forEach(c => cells.push({ value: c.value, style }));
10613
+ this.dataSource = [{ cells, height: 25 }];
10614
+ this._indices && this._cindices.
10615
+ forEach(i => {
10616
+ const cells = [{ value: i.title, style }], serie = d.find(s => s.index === i.name), map = {};
10617
+ if (serie) {
10618
+ serie.points.forEach(p => map[p.x] = p.y);
10619
+ this._xcolumns.forEach(c => cells.push({
10620
+ value: (map[c.key] || 0).toString(),
10621
+ format: this._numberFormat,
10622
+ style: this.numberStyle
10623
+ }));
10624
+ this.dataSource.push({ cells, height: 25 });
10625
+ }
10626
+ });
10627
+ this._yrows.forEach(r => {
10628
+ const cells = [{ value: r.value, style }], serie = d.find(s => s.name === r.key), map = {};
10629
+ if (serie) {
10630
+ serie.points.forEach(p => map[p.x] = p.y);
10631
+ this._xcolumns.forEach(c => cells.push({
10632
+ value: (map[c.key] || 0).toString(),
10633
+ format: this._numberFormat,
10634
+ style: this.numberStyle
10635
+ }));
10636
+ }
10637
+ else
10638
+ this._xcolumns.forEach(_ => cells.push({ value: '0' }));
10639
+ this.dataSource.push({ cells, height: 25 });
10640
+ });
10641
+ }
10584
10642
  _draw() {
10585
10643
  this.spreadsheet && this.spreadsheet.destroy();
10586
10644
  this.spreadsheet = new Spreadsheet({
@@ -10589,19 +10647,13 @@ class CubeSpreadsheetComponent {
10589
10647
  allowDelete: false,
10590
10648
  allowInsert: false,
10591
10649
  allowSorting: true,
10592
- //allowSave: false,
10593
10650
  showRibbon: false,
10594
10651
  allowAutoFill: false,
10595
- autoFillSettings: { showFillOptions: false },
10596
- //enableClipboard: true,
10597
- //allowChart: false,
10598
- //allowFiltering: false,
10599
- //allowDataValidation: false,
10600
- //allowFindAndReplace: false,
10652
+ autoFillSettings: this.autoFillSettings,
10653
+ enableClipboard: true,
10601
10654
  enableContextMenu: false,
10602
10655
  showFormulaBar: false,
10603
10656
  showSheetTabs: false,
10604
- //scrollSettings: { isFinite: true },
10605
10657
  select: this.select.bind(this),
10606
10658
  sheets: [{
10607
10659
  columns: this.columns,
@@ -10635,8 +10687,10 @@ class CubeSpreadsheetComponent {
10635
10687
  const key = this.dataSource[i].source['_' + a.name];
10636
10688
  if (!axes[a.name])
10637
10689
  axes[a.name] = key;
10638
- else if (isString(axes[a.name]))
10639
- axes[a.name] = [axes[a.name], key];
10690
+ else if (isString(axes[a.name])) {
10691
+ if (axes[a.name] !== key)
10692
+ axes[a.name] = [axes[a.name], key];
10693
+ }
10640
10694
  else if (axes[a.name].indexOf(key) < 0)
10641
10695
  axes[a.name].push(key);
10642
10696
  });
@@ -10646,18 +10700,14 @@ class CubeSpreadsheetComponent {
10646
10700
  }
10647
10701
  else {
10648
10702
  if (y === 0) {
10649
- if (y < y1) {
10650
- const { key } = this._xcolumns[x - 1], xName = this._xAxis[0];
10651
- axes[xName] = key;
10652
- }
10703
+ if (y < y1)
10704
+ this._fillx(x, x1, axes);
10653
10705
  else
10654
10706
  return;
10655
10707
  }
10656
10708
  else if (x === 0) {
10657
- if (x < x1) {
10658
- const { key } = this._yrows[y - 1], yName = this._series[0];
10659
- axes[yName] = key;
10660
- }
10709
+ if (x < x1)
10710
+ this._filly(y, y1, axes);
10661
10711
  else
10662
10712
  return;
10663
10713
  }
@@ -10666,34 +10716,41 @@ class CubeSpreadsheetComponent {
10666
10716
  else if (y > this.dataSource.length - 1 || x > this.dataSource[y].cells.length - 1)
10667
10717
  return;
10668
10718
  else {
10669
- const xName = this._xAxis[0], yName = this._series[0];
10670
- let i = y - 1, j = x - 1;
10671
- while (j < x1) {
10672
- let { key } = this._xcolumns[j];
10673
- if (!axes[xName])
10674
- axes[xName] = key;
10675
- else if (isString(axes[xName]))
10676
- axes[xName] = [axes[xName], key];
10677
- else if (axes[xName].indexOf(key) < 0)
10678
- axes[xName].push(key);
10679
- j++;
10680
- }
10681
- while (i < y1) {
10682
- let { key } = this._yrows[i];
10683
- if (!axes[yName])
10684
- axes[yName] = key;
10685
- else if (isString(axes[yName]))
10686
- axes[yName] = [axes[yName], key];
10687
- else if (axes[yName].indexOf(key) < 0)
10688
- axes[yName].push(key);
10689
- i++;
10690
- }
10719
+ this._fillx(x, x1, axes);
10720
+ this._filly(y, y1, axes);
10691
10721
  }
10692
10722
  this.explore.emit({ axes });
10693
10723
  }
10694
10724
  }
10725
+ _filly(y, y1, axes) {
10726
+ const yName = this._series[0];
10727
+ let i = y - 1;
10728
+ while (i < y1) {
10729
+ let { key } = this._yrows[i];
10730
+ if (!axes[yName])
10731
+ axes[yName] = key;
10732
+ else if (isString(axes[yName]))
10733
+ axes[yName] = [axes[yName], key];
10734
+ else if (axes[yName].indexOf(key) < 0)
10735
+ axes[yName].push(key);
10736
+ i++;
10737
+ }
10738
+ }
10739
+ _fillx(x, x1, axes) {
10740
+ const xName = this._xAxis[0];
10741
+ let i = x - 1;
10742
+ while (i < x1) {
10743
+ let { key } = this._xcolumns[i];
10744
+ if (!axes[xName])
10745
+ axes[xName] = key;
10746
+ else if (isString(axes[xName]))
10747
+ axes[xName] = [axes[xName], key];
10748
+ else if (axes[xName].indexOf(key) < 0)
10749
+ axes[xName].push(key);
10750
+ i++;
10751
+ }
10752
+ }
10695
10753
  exportToExcel(title) {
10696
- //this.spreadsheet.save({ saveType: 'Xlsx', fileName: `${title}.xlsx`})
10697
10754
  const wb = XLSX.utils.book_new();
10698
10755
  const rows = this.spreadsheet.sheets[0].rows.map(r => r.cells.map(c => c.value));
10699
10756
  const ws = XLSX.utils.aoa_to_sheet(rows);
@@ -10708,16 +10765,12 @@ class CubeSpreadsheetComponent {
10708
10765
  }
10709
10766
  CubeSpreadsheetComponent.nextId = 0;
10710
10767
  CubeSpreadsheetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeSpreadsheetComponent, deps: [{ token: SessionService }, { token: PromptService }, { token: CubeService }, { token: TranslateService }, { token: DatasourceService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
10711
- CubeSpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeSpreadsheetComponent, selector: "bizdoc-cube-spreadsheet", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, styles: ["::ng-deep .e-spreadsheet .e-dragfill-ddb{display:none!important}\n"] });
10768
+ CubeSpreadsheetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeSpreadsheetComponent, selector: "bizdoc-cube-spreadsheet", inputs: { width: "width", height: "height", cube: "cube", xAxis: "xAxis", yAxis: "yAxis", series: "series", indices: "indices", filters: "filters", currencyCode: "currencyCode", loading: "loading" }, outputs: { explore: "explore", loadingChange: "loadingChange" }, host: { properties: { "id": "this.id" }, classAttribute: "cube-view" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
10712
10769
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeSpreadsheetComponent, decorators: [{
10713
10770
  type: Component,
10714
10771
  args: [{
10715
10772
  selector: 'bizdoc-cube-spreadsheet',
10716
10773
  template: '',
10717
- styles: [`::ng-deep .e-spreadsheet .e-dragfill-ddb {
10718
- display: none !important;
10719
- }
10720
- `],
10721
10774
  host: {
10722
10775
  class: 'cube-view'
10723
10776
  }
@@ -10776,13 +10829,11 @@ class CubeViewComponent {
10776
10829
  this._instance.ngOnChanges({ 'height': {}, 'width': {} });
10777
10830
  });
10778
10831
  }
10832
+ ngAfterViewInit() {
10833
+ setTimeout(this._createView.bind(this));
10834
+ }
10779
10835
  ngOnChanges(changes) {
10780
- if (changes['view']) {
10781
- // dom
10782
- setTimeout(this._createView.bind(this));
10783
- }
10784
- else if (changes['axes'])
10785
- this.refresh();
10836
+ changes['axes'] && !changes['axes'].firstChange && this.refresh();
10786
10837
  }
10787
10838
  _createView() {
10788
10839
  this._viewDestroy.next();
@@ -10806,7 +10857,6 @@ class CubeViewComponent {
10806
10857
  comp.width = `${dim.width - 4}px`;
10807
10858
  comp.series = this.view.series;
10808
10859
  comp.indices = this.view.indices;
10809
- comp.yAxis = this.cube.yAxis;
10810
10860
  break;
10811
10861
  }
10812
10862
  case 'Spreadsheet':
@@ -10834,15 +10884,15 @@ class CubeViewComponent {
10834
10884
  default:
10835
10885
  {
10836
10886
  let comp = this._attach(CubeChartComponent);
10837
- comp.height = `${dim.height}px`;
10887
+ //comp.height = `${dim.height}px`;
10838
10888
  comp.chartType = this.view.chartType;
10839
10889
  comp.series = this.view.series;
10840
10890
  comp.indices = this.view.indices;
10891
+ comp.yAxis = this.cube.yAxis;
10841
10892
  comp.indexChartType = this.view.indexChartType;
10842
10893
  }
10843
10894
  }
10844
10895
  }
10845
- this.refresh();
10846
10896
  }
10847
10897
  _attach(comp) {
10848
10898
  const factory = this._factoryResolver.resolveComponentFactory(comp);
@@ -10860,6 +10910,7 @@ class CubeViewComponent {
10860
10910
  instance.cube = this.cube.name;
10861
10911
  instance.xAxis = this.view.xAxis;
10862
10912
  instance.currencyCode = this.cube.currencyCode;
10913
+ instance.filters = { ...this.view.filters, ...this.axes };
10863
10914
  instance.loadingChange.pipe(takeUntil(this._viewDestroy), debounceTime(150)).subscribe(e => this.loadingChange.emit(this.loading = e));
10864
10915
  return instance;
10865
10916
  }
@@ -10875,7 +10926,7 @@ class CubeViewComponent {
10875
10926
  }
10876
10927
  refresh() {
10877
10928
  this._instance.filters = { ...this.view.filters, ...this.axes };
10878
- this._instance.ngOnChanges({ 'filters': {} });
10929
+ this._instance.execute();
10879
10930
  }
10880
10931
  exportToExcel() {
10881
10932
  this._instance.exportToExcel(this.view.title);
@@ -11050,12 +11101,12 @@ class CubeViewPaneComponent extends ViewBase {
11050
11101
  }
11051
11102
  }
11052
11103
  CubeViewPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeViewPaneComponent, deps: [{ token: SessionService }, { token: PaneRef }, { token: Popup }, { token: RouterImpl }, { token: CubeService }, { token: GuideService }], target: i0.ɵɵFactoryTarget.Component });
11053
- CubeViewPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeViewPaneComponent, selector: "ng-component", host: { listeners: { "window:keydown.f1": "guide($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "viewPane", first: true, predicate: CubeViewComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"view.guide\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"vp.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"vp.exportToExcel()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"pmenu\" [bizdocTooltip]=\"'Patterns' | translate\" [disabled]=\"!patterns?.length\" data-help=\"pattern\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #pmenu>\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">\r\n {{p.title}}\r\n </button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"clearFilter()\" [bizdocTooltip]=\"'Clear' | translate\" [disabled]=\"!anyFilters\"><mat-icon>clear_all</mat-icon></button>\r\n <button mat-icon-button (click)=\"filterToggle($event)\" [bizdocTooltip]=\"'Filter' | translate\" [disabled]=\"!anyAxes\" data-help=\"filter\"><mat-icon>filter_list</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<!--<bizdoc-filter-tags [(filters)]=\"axes\" [cube]=\"cube\"></bizdoc-filter-tags>-->\r\n<bizdoc-cube-view [axes]=\"axes\" #vp\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube\"\r\n [view]=\"view\"\r\n [(loading)]=\"loading\"></bizdoc-cube-view>\r\n<!--<ng-lottie options=\"{path: 'assets/8318-loader.json'}\" *ngIf=\"loading\"></ng-lottie>-->\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-width:650px}:host ::ng-deep .cube-view{flex:1 auto}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: CubeViewComponent, selector: "bizdoc-cube-view", inputs: ["axes", "cube", "view", "loading"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: MatIconAnimate, selector: "[matAnimate]" }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": TranslatePipe } });
11104
+ CubeViewPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeViewPaneComponent, selector: "ng-component", host: { listeners: { "window:keydown.f1": "guide($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "viewPane", first: true, predicate: CubeViewComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"view.guide\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"vp.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"vp.exportToExcel()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"pmenu\" [bizdocTooltip]=\"'Patterns' | translate\" [disabled]=\"!patterns?.length\" data-help=\"pattern\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #pmenu>\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">\r\n {{p.title}}\r\n </button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"clearFilter()\" [bizdocTooltip]=\"'Clear' | translate\" [disabled]=\"!anyFilters\"><mat-icon>clear_all</mat-icon></button>\r\n <button mat-icon-button (click)=\"filterToggle($event)\" [bizdocTooltip]=\"'Filter' | translate\" [disabled]=\"!anyAxes\" data-help=\"filter\"><mat-icon>filter_list</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<!--<bizdoc-filter-tags [(filters)]=\"axes\" [cube]=\"cube\"></bizdoc-filter-tags>-->\r\n<bizdoc-cube-view [axes]=\"axes\" #vp\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube\"\r\n [view]=\"view\"\r\n [(loading)]=\"loading\"></bizdoc-cube-view>\r\n<!--<ng-lottie options=\"{path: 'assets/8318-loader.json'}\" *ngIf=\"loading\"></ng-lottie>-->\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host ::ng-deep .cube-view{flex:1 auto}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: CubeViewComponent, selector: "bizdoc-cube-view", inputs: ["axes", "cube", "view", "loading"], outputs: ["explore", "loadingChange"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: MatIconAnimate, selector: "[matAnimate]" }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": TranslatePipe } });
11054
11105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeViewPaneComponent, decorators: [{
11055
11106
  type: Component,
11056
11107
  args: [{ host: {
11057
11108
  class: 'pane'
11058
- }, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"view.guide\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"vp.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"vp.exportToExcel()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"pmenu\" [bizdocTooltip]=\"'Patterns' | translate\" [disabled]=\"!patterns?.length\" data-help=\"pattern\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #pmenu>\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">\r\n {{p.title}}\r\n </button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"clearFilter()\" [bizdocTooltip]=\"'Clear' | translate\" [disabled]=\"!anyFilters\"><mat-icon>clear_all</mat-icon></button>\r\n <button mat-icon-button (click)=\"filterToggle($event)\" [bizdocTooltip]=\"'Filter' | translate\" [disabled]=\"!anyAxes\" data-help=\"filter\"><mat-icon>filter_list</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<!--<bizdoc-filter-tags [(filters)]=\"axes\" [cube]=\"cube\"></bizdoc-filter-tags>-->\r\n<bizdoc-cube-view [axes]=\"axes\" #vp\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube\"\r\n [view]=\"view\"\r\n [(loading)]=\"loading\"></bizdoc-cube-view>\r\n<!--<ng-lottie options=\"{path: 'assets/8318-loader.json'}\" *ngIf=\"loading\"></ng-lottie>-->\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;min-width:650px}:host ::ng-deep .cube-view{flex:1 auto}\n"] }]
11109
+ }, template: "<mat-toolbar class=\"nav-toolbar\">\r\n <button mat-icon-button (click)=\"guide()\" [bizdocTooltip]=\"'Help' | translate\" *ngIf=\"view.guide\"><mat-icon>help_outline</mat-icon></button>\r\n <button mat-icon-button (click)=\"vp.refresh()\" [bizdocTooltip]=\"'Refresh' | translate\"><mat-icon matAnimate=\"rotate\">autorenew</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\"\r\n data-help=\"download\" (click)=\"vp.exportToExcel()\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"pmenu\" [bizdocTooltip]=\"'Patterns' | translate\" [disabled]=\"!patterns?.length\" data-help=\"pattern\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #pmenu>\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">\r\n {{p.title}}\r\n </button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"clearFilter()\" [bizdocTooltip]=\"'Clear' | translate\" [disabled]=\"!anyFilters\"><mat-icon>clear_all</mat-icon></button>\r\n <button mat-icon-button (click)=\"filterToggle($event)\" [bizdocTooltip]=\"'Filter' | translate\" [disabled]=\"!anyAxes\" data-help=\"filter\"><mat-icon>filter_list</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<!--<bizdoc-filter-tags [(filters)]=\"axes\" [cube]=\"cube\"></bizdoc-filter-tags>-->\r\n<bizdoc-cube-view [axes]=\"axes\" #vp\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube\"\r\n [view]=\"view\"\r\n [(loading)]=\"loading\"></bizdoc-cube-view>\r\n<!--<ng-lottie options=\"{path: 'assets/8318-loader.json'}\" *ngIf=\"loading\"></ng-lottie>-->\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host ::ng-deep .cube-view{flex:1 auto}\n"] }]
11059
11110
  }], ctorParameters: function () { return [{ type: SessionService }, { type: PaneRef }, { type: Popup }, { type: RouterImpl }, { type: CubeService }, { type: GuideService }]; }, propDecorators: { viewPane: [{
11060
11111
  type: ViewChild,
11061
11112
  args: [CubeViewComponent, { static: true }]
@@ -12043,7 +12094,8 @@ class WorkflowComponent {
12043
12094
  nodes, connectors
12044
12095
  },
12045
12096
  policy: OpenPolicy.Tab,
12046
- expandable: false
12097
+ expandable: false,
12098
+ group: ''
12047
12099
  }).then(p => {
12048
12100
  p.instance.change.
12049
12101
  pipe(takeUntil(this._destroy)).subscribe(() => {
@@ -13329,17 +13381,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
13329
13381
  /** component*/
13330
13382
  class VersionCompareComponent {
13331
13383
  /** ctor */
13332
- constructor(_session, _cf, _container, _router, _injector) {
13384
+ constructor(_session, _cf, _container, _injector) {
13333
13385
  this._session = _session;
13334
13386
  this._cf = _cf;
13335
13387
  this._container = _container;
13336
- this._router = _router;
13337
13388
  this._injector = _injector;
13338
13389
  }
13339
13390
  get form() { return this._form; }
13340
13391
  get currentVersion() { return this._currentVersion; }
13341
13392
  get baseVersion() { return this._baseVersion; }
13342
- ngOnChanges(changes) {
13393
+ ngOnChanges(_) {
13343
13394
  this._form = this._session.profile.forms.find(f => f.name === this.model.formId);
13344
13395
  const log = this.model.log.find(l => l.type === 'ModelChange' && l.time === this.version);
13345
13396
  const idx = this.model.log.indexOf(log);
@@ -13349,7 +13400,7 @@ class VersionCompareComponent {
13349
13400
  const componentFactory = this._cf.resolve(this._form.template);
13350
13401
  const injector = Injector.create([
13351
13402
  { provide: VersionCompareComponent, useValue: this },
13352
- { provide: FormRef, useValue: new FormRef(this._router) },
13403
+ { provide: FormRef, useValue: new FormRef() },
13353
13404
  { provide: DOCUMENT_MODEL, useValue: this.model }
13354
13405
  ], this._injector);
13355
13406
  this._container.clear();
@@ -13360,7 +13411,7 @@ class VersionCompareComponent {
13360
13411
  instance.onBind(newModel, this._baseVersion);
13361
13412
  }
13362
13413
  }
13363
- VersionCompareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: VersionCompareComponent, deps: [{ token: SessionService }, { token: BizDocComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: PanesRouter }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
13414
+ VersionCompareComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: VersionCompareComponent, deps: [{ token: SessionService }, { token: BizDocComponentFactoryResolver }, { token: i0.ViewContainerRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
13364
13415
  VersionCompareComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: VersionCompareComponent, selector: "bizdoc-version-compare", inputs: { model: "model", version: "version" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
13365
13416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: VersionCompareComponent, decorators: [{
13366
13417
  type: Component,
@@ -13368,7 +13419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
13368
13419
  selector: 'bizdoc-version-compare',
13369
13420
  template: ''
13370
13421
  }]
13371
- }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: PanesRouter }, { type: i0.Injector }]; }, propDecorators: { model: [{
13422
+ }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { model: [{
13372
13423
  type: Input
13373
13424
  }], version: [{
13374
13425
  type: Input
@@ -15542,16 +15593,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
15542
15593
  }], ctorParameters: function () { return [{ type: SessionService }, { type: TranslateService }, { type: PaneRef }]; } });
15543
15594
 
15544
15595
  class DocumentInfoComponent {
15545
- constructor(_session, _cf, _router, _injector) {
15596
+ constructor(_session, _cf, _injector) {
15546
15597
  this._session = _session;
15547
15598
  this._cf = _cf;
15548
- this._router = _router;
15549
15599
  this._injector = _injector;
15550
15600
  }
15551
- ngOnChanges(changes) {
15601
+ ngOnChanges(_) {
15552
15602
  const form = this._session.profile.forms.find(f => f.name === this.model.formId);
15553
15603
  this._formRef && this._formRef._destroy();
15554
- this._formRef = new FormRef(this._router);
15604
+ this._formRef = new FormRef();
15555
15605
  const factory = this._cf.resolve(form.template);
15556
15606
  const injector = Injector.create([{
15557
15607
  provide: DOCUMENT_MODEL, useValue: this.model
@@ -15567,12 +15617,12 @@ class DocumentInfoComponent {
15567
15617
  this._formRef._destroy();
15568
15618
  }
15569
15619
  }
15570
- DocumentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DocumentInfoComponent, deps: [{ token: SessionService }, { token: BizDocComponentFactoryResolver }, { token: RouterImpl }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
15620
+ DocumentInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DocumentInfoComponent, deps: [{ token: SessionService }, { token: BizDocComponentFactoryResolver }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
15571
15621
  DocumentInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: DocumentInfoComponent, selector: "bizdoc-document", inputs: { model: "model" }, viewQueries: [{ propertyName: "_container", first: true, predicate: ["component"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"form-header\">\r\n <bizdoc-people [model]=\"model\"></bizdoc-people>\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"false\" [viewedIndicator]=\"true\"></bizdoc-attachments>\r\n</div>\r\n<ng-container #component></ng-container>\r\n", components: [{ type: PeopleComponent, selector: "bizdoc-people", inputs: ["model"] }, { type: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }] });
15572
15622
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DocumentInfoComponent, decorators: [{
15573
15623
  type: Component,
15574
15624
  args: [{ selector: 'bizdoc-document', template: "<div class=\"form-header\">\r\n <bizdoc-people [model]=\"model\"></bizdoc-people>\r\n <bizdoc-attachments [model]=\"model\" [includeDeleted]=\"false\" [viewedIndicator]=\"true\"></bizdoc-attachments>\r\n</div>\r\n<ng-container #component></ng-container>\r\n" }]
15575
- }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: RouterImpl }, { type: i0.Injector }]; }, propDecorators: { _container: [{
15625
+ }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { _container: [{
15576
15626
  type: ViewChild,
15577
15627
  args: ['component', { read: ViewContainerRef, static: true }]
15578
15628
  }], model: [{
@@ -16286,10 +16336,10 @@ class ComposeMenuComponent {
16286
16336
  }
16287
16337
  }
16288
16338
  ComposeMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposeMenuComponent, deps: [{ token: SessionService }, { token: MailboxService }, { token: PromptService }, { token: PanesRouter }], target: i0.ɵɵFactoryTarget.Component });
16289
- ComposeMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: { change: "change" }, ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <span class=\"mat-subheader\">BizDoc</span>\r\n <h1 class=\"mat-display-1\">{{'New'|translate}}</h1>\r\n\r\n <mat-nav-list>\r\n <mat-list-item *ngFor=\"let f of forms\" (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\r\n <mat-icon matListIcon>{{f.icon}}</mat-icon>\r\n <span matLine>{{f.title}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n\r\n <!--<hr />\r\n\r\n <form>\r\n <mat-form-field floatLabel=\"never\" data-help=\"copy\">\r\n <input matInput type=\"search\" [placeholder]=\"'Copy'|translate\" [formControl]=\"search\" autocomplete=\"off\" />\r\n <mat-icon class=\"mat-icon-rtl-mirror\" matSuffix aria-disabled=\"true\">search</mat-icon>\r\n </mat-form-field>\r\n <ul class=\"mat-body-2\">\r\n <li *ngFor=\"let i of items | async\" (click)=\"copy(i)\">\r\n <a>\r\n {{i.number}}\r\n <ng-container *ngIf=\"i.subject\">&nbsp;{{i.subject}}</ng-container>\r\n </a>\r\n </li>\r\n </ul>\r\n </form>-->\r\n</div>\r\n", styles: ["h1{margin:0 16px}form{padding:8px}hr{opacity:.4}\n"], components: [{ type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i2$3.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$3.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { type: i6$1.MatLine, selector: "[mat-line], [matLine]" }], pipes: { "translate": TranslatePipe }, animations: [] });
16339
+ ComposeMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: ComposeMenuComponent, selector: "bizdoc-new-menu", outputs: { change: "change" }, ngImport: i0, template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <span class=\"mat-subheader\">BizDoc</span>\r\n <h1 class=\"mat-display-1\">{{'New'|translate}}</h1>\r\n\r\n <mat-nav-list>\r\n <mat-list-item *ngFor=\"let f of forms\" (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\r\n <mat-icon matListIcon>{{f.icon}}</mat-icon>\r\n <span matLine>{{f.title}}</span>\r\n <!--<mat-spinner radius=\"25\" *ngIf=\"creating===f.name\"></mat-spinner>-->\r\n </mat-list-item>\r\n </mat-nav-list>\r\n</div>\r\n", styles: ["h1{margin:0 16px}form{padding:8px}hr{opacity:.4}\n"], components: [{ type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i2$3.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i2$3.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$3.MatListIconCssMatStyler, selector: "[mat-list-icon], [matListIcon]" }, { type: i6$1.MatLine, selector: "[mat-line], [matLine]" }], pipes: { "translate": TranslatePipe }, animations: [] });
16290
16340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposeMenuComponent, decorators: [{
16291
16341
  type: Component,
16292
- args: [{ selector: 'bizdoc-new-menu', animations: [], template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <span class=\"mat-subheader\">BizDoc</span>\r\n <h1 class=\"mat-display-1\">{{'New'|translate}}</h1>\r\n\r\n <mat-nav-list>\r\n <mat-list-item *ngFor=\"let f of forms\" (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\r\n <mat-icon matListIcon>{{f.icon}}</mat-icon>\r\n <span matLine>{{f.title}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n\r\n <!--<hr />\r\n\r\n <form>\r\n <mat-form-field floatLabel=\"never\" data-help=\"copy\">\r\n <input matInput type=\"search\" [placeholder]=\"'Copy'|translate\" [formControl]=\"search\" autocomplete=\"off\" />\r\n <mat-icon class=\"mat-icon-rtl-mirror\" matSuffix aria-disabled=\"true\">search</mat-icon>\r\n </mat-form-field>\r\n <ul class=\"mat-body-2\">\r\n <li *ngFor=\"let i of items | async\" (click)=\"copy(i)\">\r\n <a>\r\n {{i.number}}\r\n <ng-container *ngIf=\"i.subject\">&nbsp;{{i.subject}}</ng-container>\r\n </a>\r\n </li>\r\n </ul>\r\n </form>-->\r\n</div>\r\n", styles: ["h1{margin:0 16px}form{padding:8px}hr{opacity:.4}\n"] }]
16342
+ args: [{ selector: 'bizdoc-new-menu', animations: [], template: "<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"working ? 'visible':'hidden'\"></mat-progress-bar>\r\n<div class=\"container\">\r\n <span class=\"mat-subheader\">BizDoc</span>\r\n <h1 class=\"mat-display-1\">{{'New'|translate}}</h1>\r\n\r\n <mat-nav-list>\r\n <mat-list-item *ngFor=\"let f of forms\" (click)=\"create(f.name)\" [attr.data-help]=\"f.name + '-form'\">\r\n <mat-icon matListIcon>{{f.icon}}</mat-icon>\r\n <span matLine>{{f.title}}</span>\r\n <!--<mat-spinner radius=\"25\" *ngIf=\"creating===f.name\"></mat-spinner>-->\r\n </mat-list-item>\r\n </mat-nav-list>\r\n</div>\r\n", styles: ["h1{margin:0 16px}form{padding:8px}hr{opacity:.4}\n"] }]
16293
16343
  }], ctorParameters: function () { return [{ type: SessionService }, { type: MailboxService }, { type: PromptService }, { type: PanesRouter }]; }, propDecorators: { change: [{
16294
16344
  type: Output
16295
16345
  }] } });
@@ -16368,7 +16418,7 @@ class FoldersMenuComponent {
16368
16418
  //folder.group;
16369
16419
  return true;
16370
16420
  };
16371
- this.folders = this._session.profile.folders;
16421
+ this.folders = this._session.profile.folders.filter(f => f.name !== 'fav');
16372
16422
  }
16373
16423
  /**
16374
16424
  * Mail drop
@@ -16524,11 +16574,14 @@ class SearchService {
16524
16574
  if (u.title.toLowerCase().indexOf(val) > -1)
16525
16575
  xs.push({ path: `admin/utilities/${u.name}`, title: u.title, section: this._translate.get('Utilities'), icon: u.icon });
16526
16576
  });
16577
+ profile.options.tags &&
16578
+ profile.options.tags.forEach(t => {
16579
+ if (t.toLowerCase().indexOf(val) > -1)
16580
+ xs.push({ path: `mailbox/f?tag=${t}`, title: t, section: this._translate.get('Tags'), icon: 'bookmark' });
16581
+ });
16527
16582
  //profile.contacts.forEach()
16528
- //if (this._guide.guides) this._guide.guides.forEach(g => {
16529
- // if (g.mode !== 'Private' && (g.title.toLowerCase().indexOf(value) > -1 ||
16530
- // g.steps.some(s => (s.title && s.title.toLowerCase().indexOf(value) > -1) ||
16531
- // s.content.toLowerCase().indexOf(value) > -1)))
16583
+ //this._guide.guides.forEach(g => {
16584
+ // if (g.mode !== 'Private' && g.title.toLowerCase().indexOf(value) > -1)
16532
16585
  // xs.push({ fn: this._guide.start, args: [g.name], title: g.title, section: this._translate.get('Guides'), icon: 'help' })
16533
16586
  //});
16534
16587
  this._mailbox.senders(value).subscribe(r => r.forEach(s => xs.push({ path: `mailbox/f/ib?senderId=${s.id}`, title: s.name, section: this._translate.get('Senders'), icon: 'recent_actors' })));
@@ -16734,7 +16787,7 @@ class SlotsComponent {
16734
16787
  return;
16735
16788
  }
16736
16789
  else {
16737
- this._navQueryParams(tab, queryParams, state);
16790
+ this._navQueryParams(tab, queryParams);
16738
16791
  this.group = tab.group;
16739
16792
  this.selectedTabIndex = i;
16740
16793
  this._cd.detectChanges();
@@ -16766,7 +16819,7 @@ class SlotsComponent {
16766
16819
  return;
16767
16820
  }
16768
16821
  else {
16769
- this._navQueryParams(pane, queryParams, state);
16822
+ this._navQueryParams(pane, queryParams);
16770
16823
  this.scrollTo(i);
16771
16824
  this._replaceUrl();
16772
16825
  return;
@@ -16820,7 +16873,7 @@ class SlotsComponent {
16820
16873
  else {
16821
16874
  const pane = (policy & OpenPolicy.Tab) == OpenPolicy.Tab ?
16822
16875
  this.tabs[this.selectedTabIndex] : this.panes[this.selectedIndex];
16823
- this._navQueryParams(pane, queryParams, state);
16876
+ this._navQueryParams(pane, queryParams);
16824
16877
  this._replaceUrl();
16825
16878
  if ((policy & OpenPolicy.Tab) != OpenPolicy.Tab)
16826
16879
  this.select(this.selectedIndex);
@@ -16947,7 +17000,7 @@ class SlotsComponent {
16947
17000
  }
16948
17001
  else {
16949
17002
  const queryParams = this._parseQueryParams(queryString);
16950
- this._navQueryParams(pane, queryParams, state);
17003
+ this._navQueryParams(pane, queryParams);
16951
17004
  return;
16952
17005
  }
16953
17006
  }
@@ -16985,7 +17038,7 @@ class SlotsComponent {
16985
17038
  }
16986
17039
  else {
16987
17040
  const queryParams = this._parseQueryParams(queryString);
16988
- this._navQueryParams(tab, queryParams, state);
17041
+ this._navQueryParams(tab, queryParams);
16989
17042
  return;
16990
17043
  }
16991
17044
  }
@@ -17022,11 +17075,9 @@ class SlotsComponent {
17022
17075
  *
17023
17076
  * @param pane
17024
17077
  * @param queryParams
17025
- * @param data
17026
17078
  */
17027
- _navQueryParams(pane, queryParams, data) {
17079
+ _navQueryParams(pane, queryParams) {
17028
17080
  pane._queryString = this._queryString(queryParams);
17029
- pane._data$.next({ ...pane.data, ...data });
17030
17081
  pane._queryParams$.next(queryParams);
17031
17082
  this._router._events$.next(new QueryParamNavigation(queryParams, pane));
17032
17083
  }
@@ -17503,15 +17554,15 @@ class SlotsComponent {
17503
17554
  this.navigationArrows();
17504
17555
  this._resize();
17505
17556
  }
17506
- navigationArrows(evt) {
17507
- const container = this._panesContainerRef.element.nativeElement;
17508
- this.next = this._rtl ? container.clientWidth - container.scrollLeft < container.scrollWidth :
17509
- container.scrollLeft + container.clientWidth < container.scrollWidth;
17510
- this.prev = this._rtl ? container.scrollLeft < 0 : container.scrollLeft > 0;
17557
+ navigationArrows(_) {
17558
+ const container = this._panesContainerRef.element.nativeElement, scrollLeft = Math.round(container.scrollLeft);
17559
+ this.next = this._rtl ? container.clientWidth - scrollLeft < container.scrollWidth :
17560
+ scrollLeft + container.clientWidth < container.scrollWidth;
17561
+ this.prev = this._rtl ? scrollLeft < 0 : scrollLeft > 0;
17511
17562
  }
17512
17563
  scrollBy(n) {
17513
- const { nativeElement } = this._panesContainerRef.element;
17514
- nativeElement.scrollBy({ behavior: 'smooth', left: n * (this._rtl ? -1 : 1) });
17564
+ const left = n * (this._rtl ? -1 : 1);
17565
+ this._panesContainerRef.element.nativeElement.scrollBy({ behavior: 'smooth', left });
17515
17566
  }
17516
17567
  focus(index) {
17517
17568
  const el = this._children.item(index);
@@ -18089,13 +18140,13 @@ const PANES_CONFIG = [{
18089
18140
  {
18090
18141
  path: 'views',
18091
18142
  component: DocumentViewPaneComponent,
18092
- policy: OpenPolicy.Tab | OpenPolicy.Expandable
18143
+ policy: OpenPolicy.Tab
18093
18144
  },
18094
18145
  {
18095
18146
  path: 'comments',
18096
18147
  icon: 'format_quote',
18097
18148
  component: CommentsPaneComponent,
18098
- policy: OpenPolicy.Scope | OpenPolicy.Pinnable | OpenPolicy.Tab,
18149
+ policy: OpenPolicy.Scope | OpenPolicy.Tab,
18099
18150
  children: [{
18100
18151
  path: ':commentId/versions',
18101
18152
  icon: 'history',
@@ -18123,7 +18174,7 @@ const PANES_CONFIG = [{
18123
18174
  }, {
18124
18175
  path: 'd/:id',
18125
18176
  component: DocumentInfoPaneComponent,
18126
- policy: OpenPolicy.Tab | OpenPolicy.Expandable,
18177
+ policy: OpenPolicy.Tab,
18127
18178
  resolve: {
18128
18179
  item: DocumentResolver
18129
18180
  },
@@ -18153,7 +18204,7 @@ const PANES_CONFIG = [{
18153
18204
  path: ':cube/v/:view',
18154
18205
  icon: 'bar_chart',
18155
18206
  component: CubeViewPaneComponent,
18156
- policy: OpenPolicy.Clear | OpenPolicy.Expandable
18207
+ policy: OpenPolicy.Clear
18157
18208
  }, {
18158
18209
  path: ':cube/explore',
18159
18210
  icon: 'summarize',
@@ -18162,7 +18213,7 @@ const PANES_CONFIG = [{
18162
18213
  children: [{
18163
18214
  path: 'i/:template/:key',
18164
18215
  component: ExploreItemPaneComponent,
18165
- policy: OpenPolicy.Pinnable | OpenPolicy.Tab,
18216
+ policy: OpenPolicy.Tab,
18166
18217
  resolve: { item: ItemResolver }
18167
18218
  }]
18168
18219
  },
@@ -18170,7 +18221,7 @@ const PANES_CONFIG = [{
18170
18221
  path: ':cube/i/:xAxis/:serie',
18171
18222
  icon: 'bar_chart',
18172
18223
  component: CubeMatrixPaneComponent,
18173
- policy: OpenPolicy.Pinnable | OpenPolicy.Tab | OpenPolicy.Expandable
18224
+ policy: OpenPolicy.Tab
18174
18225
  }]
18175
18226
  }, {
18176
18227
  path: 'reports',
@@ -18222,7 +18273,7 @@ const PANES_CONFIG = [{
18222
18273
  path: 'chatroom/:id',
18223
18274
  icon: 'person',
18224
18275
  component: ConversationPaneComponent,
18225
- policy: OpenPolicy.Tab | OpenPolicy.Expandable,
18276
+ policy: OpenPolicy.Tab
18226
18277
  }
18227
18278
  ];
18228
18279
 
@@ -18818,7 +18869,7 @@ const ROUTES = [
18818
18869
  class SyncfusionChartModule {
18819
18870
  }
18820
18871
  SyncfusionChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18821
- SyncfusionChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, imports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule], exports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule] });
18872
+ SyncfusionChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule], exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule] });
18822
18873
  SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
18823
18874
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
18824
18875
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
@@ -18828,12 +18879,12 @@ SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", v
18828
18879
  RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService,
18829
18880
  MultiLevelLabelService, ParetoSeriesService, TooltipRenderService,
18830
18881
  ExportService,
18831
- AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService], imports: [[ChartModule, AccumulationChartAllModule, BulletChartAllModule], ChartModule, AccumulationChartAllModule, BulletChartAllModule] });
18882
+ AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService], imports: [[ChartModule, AccumulationChartAllModule, SparklineAllModule], ChartModule, AccumulationChartAllModule, SparklineAllModule] });
18832
18883
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, decorators: [{
18833
18884
  type: NgModule,
18834
18885
  args: [{
18835
- imports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule],
18836
- exports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule],
18886
+ imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
18887
+ exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
18837
18888
  providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
18838
18889
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
18839
18890
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
@@ -18973,6 +19024,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
18973
19024
  }]
18974
19025
  }] });
18975
19026
 
19027
+ class SyncfusionGanttModule {
19028
+ }
19029
+ SyncfusionGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19030
+ SyncfusionGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, imports: [GanttModule], exports: [GanttModule] });
19031
+ SyncfusionGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, providers: [], imports: [[GanttModule], GanttModule] });
19032
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, decorators: [{
19033
+ type: NgModule,
19034
+ args: [{
19035
+ imports: [GanttModule],
19036
+ exports: [GanttModule],
19037
+ providers: []
19038
+ }]
19039
+ }] });
19040
+
18976
19041
  let AssignActionComponent = class AssignActionComponent {
18977
19042
  constructor(_fb, _session, _accounts) {
18978
19043
  this._fb = _fb;
@@ -19581,7 +19646,7 @@ class CubeAccumAnalysisWidget extends CubeAnalysisBase {
19581
19646
  visible: true,
19582
19647
  position: 'Outside',
19583
19648
  connectorStyle: { length: '10%' },
19584
- name: 'x',
19649
+ name: 'name',
19585
19650
  font: {
19586
19651
  size: '14px',
19587
19652
  fontFamily: FONT_FAMILY,
@@ -19727,6 +19792,7 @@ class CubeChartAnalysisWidget extends CubeAnalysisBase {
19727
19792
  };
19728
19793
  this.tooltip = {
19729
19794
  enable: true,
19795
+ enableAnimation: false,
19730
19796
  shared: false,
19731
19797
  textStyle: {
19732
19798
  fontFamily: FONT_FAMILY
@@ -23387,8 +23453,8 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
23387
23453
  const { xAxis, serie, indices, sum, scope, filters } = this._viewRef.options;
23388
23454
  if (!xAxis || !serie)
23389
23455
  throw 'xAxis and serie required';
23390
- this.xAxis = xAxis;
23391
- this.serie = serie;
23456
+ this.xAxis = isArray(xAxis) ? xAxis[0] : xAxis;
23457
+ this.serie = isArray(serie) ? serie[0] : serie;
23392
23458
  this.indices = indices;
23393
23459
  this.sum = sum;
23394
23460
  this.scope = scope;
@@ -23435,7 +23501,7 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
23435
23501
  }
23436
23502
  };
23437
23503
  CubeDocumentMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeDocumentMatrixComponent, deps: [{ token: DocumentViewRef }, { token: RouterImpl }, { token: CubeService }, { token: DatasourceService }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component });
23438
- CubeDocumentMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeDocumentMatrixComponent, selector: "ng-component", host: { classAttribute: "view" }, viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [serie]=\"serie\" [indices]=\"indices\" [sum]=sum\r\n [axes]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"], components: [{ type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i10.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["cube", "xAxis", "serie", "indices", "scope", "sum", "axes", "loading", "interactive"], outputs: ["explore", "loadingChange"] }, { type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": TranslatePipe, "async": i10$1.AsyncPipe, "typeValue": TypeValuePipe } });
23504
+ CubeDocumentMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeDocumentMatrixComponent, selector: "ng-component", host: { classAttribute: "view" }, viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [serie]=\"serie\" [indices]=\"indices\" [sum]=\"sum\"\r\n [axes]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"], components: [{ type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i10.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["cube", "xAxis", "serie", "indices", "scope", "sum", "axes", "loading", "interactive"], outputs: ["explore", "loadingChange"] }, { type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": TranslatePipe, "async": i10$1.AsyncPipe, "typeValue": TypeValuePipe } });
23439
23505
  CubeDocumentMatrixComponent = __decorate([
23440
23506
  BizDoc({
23441
23507
  selector: 'bizdoc-cube-matrix'
@@ -23443,7 +23509,7 @@ CubeDocumentMatrixComponent = __decorate([
23443
23509
  ], CubeDocumentMatrixComponent);
23444
23510
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeDocumentMatrixComponent, decorators: [{
23445
23511
  type: Component,
23446
- args: [{ host: { class: 'view' }, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [serie]=\"serie\" [indices]=\"indices\" [sum]=sum\r\n [axes]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"] }]
23512
+ args: [{ host: { class: 'view' }, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"patterns && patterns.length\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #options xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [serie]=\"serie\" [indices]=\"indices\" [sum]=\"sum\"\r\n [axes]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"] }]
23447
23513
  }], ctorParameters: function () { return [{ type: DocumentViewRef }, { type: RouterImpl }, { type: CubeService }, { type: DatasourceService }, { type: SessionService }]; }, propDecorators: { table: [{
23448
23514
  type: ViewChild,
23449
23515
  args: [CubeMatrixComponent, { static: true }]
@@ -23873,7 +23939,7 @@ class CubeSumComponent {
23873
23939
  this.forward = false;
23874
23940
  this.Math = Math;
23875
23941
  }
23876
- ngOnChanges(changes) {
23942
+ ngOnChanges(_) {
23877
23943
  this._cube = this._session.profile.cubes.find(c => c.name === this.cube) || this._session.profile.cubes[0];
23878
23944
  this.currencyCode = this._cube.currencyCode;
23879
23945
  this.digitsInfo = this._service.digitsInfo;
@@ -24351,7 +24417,7 @@ let CubeChartViewComponent = class CubeChartViewComponent extends CubeBase {
24351
24417
  }
24352
24418
  };
24353
24419
  CubeChartViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeChartViewComponent, deps: [{ token: SessionService }, { token: DocumentViewRef }, { token: CubeService }, { token: RouterImpl }], target: i0.ɵɵFactoryTarget.Component });
24354
- CubeChartViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeChartViewComponent, selector: "ng-component", host: { classAttribute: "view" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; \">\r\n <!--else none-->\r\n <ng-container [ngSwitch]=\"isAccum\">\r\n <bizdoc-cube-accum *ngSwitchCase=\"true\" [chartType]=\"chartType\" [width]=\"width\" [scope]=\"scope\"\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube.name\"\r\n [filters]=\"filters\"\r\n [xAxis]=\"xAxis\"></bizdoc-cube-accum>\r\n <bizdoc-cube-chart *ngSwitchDefault [cube]=\"cube.name\"\r\n [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [filters]=\"filters\"\r\n [chartType]=\"chartType\" [indexChartType]=\"indexChartType\"\r\n [width]=\"width\" [scope]=\"scope\"\r\n (explore)=\"explore($event)\"></bizdoc-cube-chart>\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", components: [{ type: CubeAccumulationChartComponent, selector: "bizdoc-cube-accum", inputs: ["height", "width", "cube", "xAxis", "indices", "filters", "chartType", "scope", "loading"], outputs: ["loadingChange", "explore"] }, { type: CubeChartComponent, selector: "bizdoc-cube-chart", inputs: ["width", "height", "cube", "xAxis", "series", "indices", "filters", "chartType", "indexChartType", "scope", "currencyCode", "loading"], outputs: ["explore", "loadingChange"] }, { type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
24420
+ CubeChartViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeChartViewComponent, selector: "ng-component", host: { classAttribute: "view" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; \">\r\n <!--else none-->\r\n <ng-container [ngSwitch]=\"isAccum\">\r\n <bizdoc-cube-accum *ngSwitchCase=\"true\" [chartType]=\"chartType\" [width]=\"width\" [scope]=\"scope\"\r\n (explore)=\"explore($event)\"\r\n [cube]=\"cube.name\"\r\n [filters]=\"filters\"\r\n [xAxis]=\"xAxis\"></bizdoc-cube-accum>\r\n <bizdoc-cube-chart *ngSwitchDefault [cube]=\"cube.name\"\r\n [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\"\r\n [filters]=\"filters\"\r\n [chartType]=\"chartType\" [indexChartType]=\"indexChartType\"\r\n [width]=\"width\" [scope]=\"scope\"\r\n (explore)=\"explore($event)\"></bizdoc-cube-chart>\r\n </ng-container>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", components: [{ type: CubeAccumulationChartComponent, selector: "bizdoc-cube-accum", inputs: ["height", "width", "cube", "xAxis", "indices", "filters", "chartType", "scope", "loading"], outputs: ["loadingChange", "explore"] }, { type: CubeChartComponent, selector: "bizdoc-cube-chart", inputs: ["width", "height", "cube", "xAxis", "series", "indices", "filters", "yAxis", "chartType", "indexChartType", "scope", "currencyCode", "loading"], outputs: ["explore", "loadingChange"] }, { type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }], directives: [{ type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
24355
24421
  CubeChartViewComponent = __decorate([
24356
24422
  BizDoc({
24357
24423
  selector: 'bizdoc-chart-view'
@@ -24429,6 +24495,7 @@ class Item {
24429
24495
  this.fill = fill;
24430
24496
  this.tooltipSettings = {
24431
24497
  visible: true,
24498
+ border: { width: 0 },
24432
24499
  format: '${name} : ${y}',
24433
24500
  trackLineSettings: {},
24434
24501
  textStyle: {
@@ -24681,7 +24748,7 @@ const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, Cu
24681
24748
  ];
24682
24749
  class SharedModule {
24683
24750
  static forChild(config) {
24684
- const { formats, maps } = config || {};
24751
+ const { formats } = config || {};
24685
24752
  registerComponents(CORE_COMPONENTS);
24686
24753
  const providers = [{
24687
24754
  provide: RouterImpl, useClass: !config || !config.routing || config.routing === 'ng' ? NgRouter : PaneRouter
@@ -24768,11 +24835,11 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
24768
24835
  RouterModule,
24769
24836
  MomentModule,
24770
24837
  PickerModule,
24771
- GanttModule,
24838
+ SyncfusionGanttModule,
24772
24839
  SyncfusionScheduleModule,
24773
24840
  SyncfusionCircularGaugeModule,
24774
24841
  SyncfusionChartModule,
24775
- SparklineAllModule,
24842
+ SyncfusionGanttModule,
24776
24843
  SyncfusionGridModule,
24777
24844
  RichTextEditorModule,
24778
24845
  SyncfusionSpreadsheetModule,
@@ -24828,11 +24895,11 @@ SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
24828
24895
  RouterModule,
24829
24896
  MomentModule,
24830
24897
  PickerModule,
24831
- GanttModule,
24898
+ SyncfusionGanttModule,
24832
24899
  SyncfusionScheduleModule,
24833
24900
  SyncfusionCircularGaugeModule,
24834
24901
  SyncfusionChartModule,
24835
- SparklineAllModule,
24902
+ SyncfusionGanttModule,
24836
24903
  SyncfusionGridModule,
24837
24904
  RichTextEditorModule,
24838
24905
  SyncfusionSpreadsheetModule,
@@ -24908,11 +24975,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
24908
24975
  RouterModule,
24909
24976
  MomentModule,
24910
24977
  PickerModule,
24911
- GanttModule,
24978
+ SyncfusionGanttModule,
24912
24979
  SyncfusionScheduleModule,
24913
24980
  SyncfusionCircularGaugeModule,
24914
24981
  SyncfusionChartModule,
24915
- SparklineAllModule,
24982
+ SyncfusionGanttModule,
24916
24983
  SyncfusionGridModule,
24917
24984
  RichTextEditorModule,
24918
24985
  SyncfusionSpreadsheetModule,
@@ -26836,7 +26903,7 @@ let PositionsComponent = class PositionsComponent {
26836
26903
  let positions = model.positions;
26837
26904
  if (!positions || !Object.keys(positions).length)
26838
26905
  continue;
26839
- const roles = this.roles = this._session.profile.roles.filter(r => r.dataType === type.name && positions[r.name]);
26906
+ const roles = this._session.profile.roles.filter(r => r.dataType === type.name && positions[r.name]);
26840
26907
  const rows = [];
26841
26908
  rows.push([this._translate.get('Type'), this._translate.get('Value'), '', ...roles.map(r => r.title)]);
26842
26909
  model.patterns && model.patterns.forEach(p => {
@@ -26875,24 +26942,63 @@ let PositionsComponent = class PositionsComponent {
26875
26942
  }
26876
26943
  XLSX.writeFile(wb, `${this._translate.get('Positions')}.xlsx`);
26877
26944
  }
26945
+ async upload(evt) {
26946
+ const { files } = evt.srcElement;
26947
+ if (files && files.length) {
26948
+ const file = files.item(0);
26949
+ var reader = new FileReader();
26950
+ reader.onload = e => { };
26951
+ const text = await file.text();
26952
+ //reader.readAs(text);
26953
+ const wb = XLSX.readFile(file.name, {});
26954
+ for (let i = 0; i < wb.SheetNames.length; i++) {
26955
+ let title = wb.SheetNames[i], ws = wb.Sheets[title];
26956
+ let type = this.types.find(t => t.title === title);
26957
+ if (!type)
26958
+ throw '';
26959
+ let roles = this._session.profile.roles.filter(r => r.dataType === type.name);
26960
+ let row = ws['!rows'][0];
26961
+ for (let c = 0; c < ws['!cols'].length; c++) {
26962
+ let col = ws['!cols'][c];
26963
+ //let role = roles.find(r => r.title === ws.);
26964
+ // if (!role) {
26965
+ // this._everything[type.name].roles.push({name: '', title: ''});
26966
+ // }
26967
+ }
26968
+ for (let r = 0; r < ws['!rows'].length; r++) {
26969
+ let row = ws['!rows'][r];
26970
+ for (let c = 0; c < ws['!cols'].length; c++) {
26971
+ let col = ws['!cols'][c], content = '';
26972
+ if (content) {
26973
+ //let users = content.split(', ').map(name=> this.profiles.find(u=> u.name === name));
26974
+ }
26975
+ else { }
26976
+ }
26977
+ }
26978
+ }
26979
+ }
26980
+ }
26878
26981
  ngOnDestroy() {
26879
26982
  this._destroy.next();
26880
26983
  this._destroy.complete();
26881
26984
  }
26882
26985
  };
26883
26986
  PositionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: PositionsComponent, deps: [{ token: SessionService }, { token: UtilityRef }, { token: DatasourceService }, { token: PromptService }, { token: AccountService }, { token: WindowTitleService }, { token: TranslateService }, { token: Popup }, { token: i3$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
26884
- PositionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: PositionsComponent, selector: "ng-component", viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "noRoleTpl", first: true, predicate: ["noRoleTpl"], descendants: true, static: true }, { propertyName: "roleTpl", first: true, predicate: ["roleTpl"], descendants: true, static: true }, { propertyName: "patternTpl", first: true, predicate: ["patternTpl"], descendants: true, static: true }, { propertyName: "newGroupTpl", first: true, predicate: ["groupTpl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"typeMenu\">{{type?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #typeMenu>\r\n <button mat-menu-item *ngFor=\"let t of types\" (click)=\"change(t.name)\">{{t.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button [matMenuTriggerFor]=\"newMenu\" [bizdocTooltip]=\"'Add'|translate\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #newMenu>\r\n <button mat-menu-item (click)=\"newRole()\">{{'Role'|translate}}</button>\r\n <button mat-menu-item (click)=\"newPattern()\">{{'Pattern'|translate}}</button>\r\n <button mat-menu-item (click)=\"newGroup()\">{{'Group'|translate}} </button>\r\n </mat-menu>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\" (click)=\"download()\" [disabled]=\"dirty\"><mat-icon>save_alt</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table matSort [dataSource]=\"dataSource\" [style.display]=\"dataSource ? '': 'none'\">\r\n <ng-container *ngFor=\"let column of (type?.columns ||[])\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{column.label}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element[column.name]}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"key\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span [ngSwitch]=\"element.type\">\r\n <ng-container *ngSwitchCase=\"'group'\">({{'Group'|translate}})</ng-container>\r\n <ng-container *ngSwitchCase=\"'pattern'\">({{'Pattern'|translate}})</ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{element.key}}\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n {{element.value}}\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let role of roles\" [matColumnDef]=\"role.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{role.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\" [attr.data-role]=\"role.name\">\r\n <ng-container *ngIf=\"positions[role.name][element.key]\">\r\n <ng-container *ngFor=\"let u of positions[role.name][element.key]; let first = first\">\r\n <ng-container *ngIf=\"!first\">, </ng-container>\r\n {{profiles[u]?.name}}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"element.type === 'pattern' || element.type === 'group'\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-container *ngIf=\"element.type === 'pattern'\">\r\n <button mat-menu-item (click)=\"editPattern(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deletePattern(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"element.type === 'group'\">\r\n <button mat-menu-item (click)=\"editGroup(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deleteGroup(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns\" (click)=\"edit(element.key, $event)\"></tr>\r\n</table>\r\n<!-- role template -->\r\n<ng-template #roleTpl>\r\n <h2 mat-dialog-title>{{'Role' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"role\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"role.value\" color=\"primary\" [disabled]=\"!role.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- pattern template -->\r\n<ng-template #patternTpl>\r\n <h2 mat-dialog-title>{{'Pattern' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"pattern\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput formControlName=\"expression\" [placeholder]=\"'Regex'| translate\" required autocomplete=\"off\" />\r\n <mat-hint><span [innerHTML]=\"'RegexHint' | translate : 'https://regex101.com/'| sanitizeHtml\"></span></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"pattern.value\" color=\"primary\" [disabled]=\"!pattern.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- group -->\r\n<ng-template #groupTpl>\r\n <h2 mat-dialog-title>{{'Group' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"group\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Items'|translate\" multiple formControlName=\"items\" required>\r\n <mat-select-trigger>\r\n {{group.value.items ? group.value.items[0] : ''}}\r\n <span *ngIf=\"group.value.items?.length > 1\" class=\"additional-selection\">\r\n (+{{group.value.items.length - 1}} {{(group.value.items?.length === 2 ? 'Other' : 'Others')|translate}})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let v of source\" [value]=\"v.key\">\r\n <span *ngIf=\"!type.columns\">{{v.value}}</span>\r\n <span *ngIf=\"type.columns\"><span *ngFor=\"let c of type.columns\">{{v.value[c.name]}}</span></span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"group.value\" color=\"primary\" [disabled]=\"!group.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<ng-template #noRoleTpl>\r\n <mat-dialog-content>\r\n {{'NoRoles'|translate : type?.title}}\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">{{'CreateRole' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n", styles: ["table{width:100%}.form{padding:8px}table :ng-deep .mat-cell{cursor:pointer;border-left-width:1px;border-left-style:outset;padding:0 4px!important}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: SearchInput, selector: "bizdoc-search-input", outputs: ["valueChange"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i6$2.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5$1.MatCellDef, selector: "[matCellDef]" }, { type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i3$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i3$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.MatSelectTrigger, selector: "mat-select-trigger" }], pipes: { "translate": TranslatePipe, "sanitizeHtml": SanitizeHtmlPipe } });
26987
+ PositionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: PositionsComponent, selector: "ng-component", viewQueries: [{ propertyName: "_fileElement", first: true, predicate: ["file"], descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "noRoleTpl", first: true, predicate: ["noRoleTpl"], descendants: true, static: true }, { propertyName: "roleTpl", first: true, predicate: ["roleTpl"], descendants: true, static: true }, { propertyName: "patternTpl", first: true, predicate: ["patternTpl"], descendants: true, static: true }, { propertyName: "newGroupTpl", first: true, predicate: ["groupTpl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"typeMenu\">{{type?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #typeMenu>\r\n <button mat-menu-item *ngFor=\"let t of types\" (click)=\"change(t.name)\">{{t.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button [matMenuTriggerFor]=\"newMenu\" [bizdocTooltip]=\"'Add'|translate\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #newMenu>\r\n <button mat-menu-item (click)=\"newRole()\">{{'Role'|translate}}</button>\r\n <button mat-menu-item (click)=\"newPattern()\">{{'Pattern'|translate}}</button>\r\n <button mat-menu-item (click)=\"newGroup()\">{{'Group'|translate}} </button>\r\n </mat-menu>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\" (click)=\"download()\" [disabled]=\"dirty\"><mat-icon>save_alt</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table matSort [dataSource]=\"dataSource\" [style.display]=\"dataSource ? '': 'none'\">\r\n <ng-container *ngFor=\"let column of (type?.columns ||[])\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{column.label}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element[column.name]}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"key\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span [ngSwitch]=\"element.type\">\r\n <ng-container *ngSwitchCase=\"'group'\">({{'Group'|translate}})</ng-container>\r\n <ng-container *ngSwitchCase=\"'pattern'\">({{'Pattern'|translate}})</ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{element.key}}\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n {{element.value}}\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let role of roles\" [matColumnDef]=\"role.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{role.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\" [attr.data-role]=\"role.name\">\r\n <ng-container *ngIf=\"positions[role.name][element.key]\">\r\n <ng-container *ngFor=\"let u of positions[role.name][element.key]; let first = first\">\r\n <ng-container *ngIf=\"!first\">, </ng-container>\r\n {{profiles[u]?.name}}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"element.type === 'pattern' || element.type === 'group'\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-container *ngIf=\"element.type === 'pattern'\">\r\n <button mat-menu-item (click)=\"editPattern(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deletePattern(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"element.type === 'group'\">\r\n <button mat-menu-item (click)=\"editGroup(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deleteGroup(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns\" (click)=\"edit(element.key, $event)\"></tr>\r\n</table>\r\n<!-- role template -->\r\n<ng-template #roleTpl>\r\n <h2 mat-dialog-title>{{'Role' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"role\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"role.value\" color=\"primary\" [disabled]=\"!role.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- pattern template -->\r\n<ng-template #patternTpl>\r\n <h2 mat-dialog-title>{{'Pattern' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"pattern\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput formControlName=\"expression\" [placeholder]=\"'Regex'| translate\" required autocomplete=\"off\" />\r\n <mat-hint><span [innerHTML]=\"'RegexHint' | translate : 'https://regex101.com/'| sanitizeHtml\"></span></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"pattern.value\" color=\"primary\" [disabled]=\"!pattern.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- group -->\r\n<ng-template #groupTpl>\r\n <h2 mat-dialog-title>{{'Group' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"group\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Items'|translate\" multiple formControlName=\"items\" required>\r\n <mat-select-trigger>\r\n {{group.value.items ? group.value.items[0] : ''}}\r\n <span *ngIf=\"group.value.items?.length > 1\" class=\"additional-selection\">\r\n (+{{group.value.items.length - 1}} {{(group.value.items?.length === 2 ? 'Other' : 'Others')|translate}})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let v of source\" [value]=\"v.key\">\r\n <span *ngIf=\"!type.columns\">{{v.value}}</span>\r\n <span *ngIf=\"type.columns\"><span *ngFor=\"let c of type.columns\">{{v.value[c.name]}}</span></span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"group.value\" color=\"primary\" [disabled]=\"!group.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<ng-template #noRoleTpl>\r\n <mat-dialog-content>\r\n {{'NoRoles'|translate : type?.title}}\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">{{'CreateRole' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<form style=\"display:none\">\r\n <input type=\"file\" name=\"file\" (onchange)=\"upload($event)\" #file/>\r\n</form>\r\n", styles: ["table{width:100%}.form{padding:8px}table :ng-deep .mat-cell{cursor:pointer;border-left-width:1px;border-left-style:outset;padding:0 4px!important}\n"], components: [{ type: i7$4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: SearchInput, selector: "bizdoc-search-input", outputs: ["valueChange"] }, { type: i7$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i6$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i6$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i10$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i6$2.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5$1.MatCellDef, selector: "[matCellDef]" }, { type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i10$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i10$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i3$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i1$4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i3$2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.MatSelectTrigger, selector: "mat-select-trigger" }], pipes: { "translate": TranslatePipe, "sanitizeHtml": SanitizeHtmlPipe } });
26885
26988
  PositionsComponent = __decorate([
26886
26989
  BizDoc({ selector: 'bizdoc-positions' })
26887
26990
  /** positions component*/
26888
26991
  ], PositionsComponent);
26889
26992
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: PositionsComponent, decorators: [{
26890
26993
  type: Component,
26891
- args: [{ template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"typeMenu\">{{type?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #typeMenu>\r\n <button mat-menu-item *ngFor=\"let t of types\" (click)=\"change(t.name)\">{{t.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button [matMenuTriggerFor]=\"newMenu\" [bizdocTooltip]=\"'Add'|translate\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #newMenu>\r\n <button mat-menu-item (click)=\"newRole()\">{{'Role'|translate}}</button>\r\n <button mat-menu-item (click)=\"newPattern()\">{{'Pattern'|translate}}</button>\r\n <button mat-menu-item (click)=\"newGroup()\">{{'Group'|translate}} </button>\r\n </mat-menu>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\" (click)=\"download()\" [disabled]=\"dirty\"><mat-icon>save_alt</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table matSort [dataSource]=\"dataSource\" [style.display]=\"dataSource ? '': 'none'\">\r\n <ng-container *ngFor=\"let column of (type?.columns ||[])\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{column.label}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element[column.name]}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"key\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span [ngSwitch]=\"element.type\">\r\n <ng-container *ngSwitchCase=\"'group'\">({{'Group'|translate}})</ng-container>\r\n <ng-container *ngSwitchCase=\"'pattern'\">({{'Pattern'|translate}})</ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{element.key}}\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n {{element.value}}\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let role of roles\" [matColumnDef]=\"role.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{role.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\" [attr.data-role]=\"role.name\">\r\n <ng-container *ngIf=\"positions[role.name][element.key]\">\r\n <ng-container *ngFor=\"let u of positions[role.name][element.key]; let first = first\">\r\n <ng-container *ngIf=\"!first\">, </ng-container>\r\n {{profiles[u]?.name}}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"element.type === 'pattern' || element.type === 'group'\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-container *ngIf=\"element.type === 'pattern'\">\r\n <button mat-menu-item (click)=\"editPattern(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deletePattern(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"element.type === 'group'\">\r\n <button mat-menu-item (click)=\"editGroup(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deleteGroup(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns\" (click)=\"edit(element.key, $event)\"></tr>\r\n</table>\r\n<!-- role template -->\r\n<ng-template #roleTpl>\r\n <h2 mat-dialog-title>{{'Role' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"role\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"role.value\" color=\"primary\" [disabled]=\"!role.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- pattern template -->\r\n<ng-template #patternTpl>\r\n <h2 mat-dialog-title>{{'Pattern' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"pattern\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput formControlName=\"expression\" [placeholder]=\"'Regex'| translate\" required autocomplete=\"off\" />\r\n <mat-hint><span [innerHTML]=\"'RegexHint' | translate : 'https://regex101.com/'| sanitizeHtml\"></span></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"pattern.value\" color=\"primary\" [disabled]=\"!pattern.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- group -->\r\n<ng-template #groupTpl>\r\n <h2 mat-dialog-title>{{'Group' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"group\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Items'|translate\" multiple formControlName=\"items\" required>\r\n <mat-select-trigger>\r\n {{group.value.items ? group.value.items[0] : ''}}\r\n <span *ngIf=\"group.value.items?.length > 1\" class=\"additional-selection\">\r\n (+{{group.value.items.length - 1}} {{(group.value.items?.length === 2 ? 'Other' : 'Others')|translate}})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let v of source\" [value]=\"v.key\">\r\n <span *ngIf=\"!type.columns\">{{v.value}}</span>\r\n <span *ngIf=\"type.columns\"><span *ngFor=\"let c of type.columns\">{{v.value[c.name]}}</span></span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"group.value\" color=\"primary\" [disabled]=\"!group.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<ng-template #noRoleTpl>\r\n <mat-dialog-content>\r\n {{'NoRoles'|translate : type?.title}}\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">{{'CreateRole' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n", styles: ["table{width:100%}.form{padding:8px}table :ng-deep .mat-cell{cursor:pointer;border-left-width:1px;border-left-style:outset;padding:0 4px!important}\n"] }]
26994
+ args: [{ template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"typeMenu\">{{type?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #typeMenu>\r\n <button mat-menu-item *ngFor=\"let t of types\" (click)=\"change(t.name)\">{{t.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button [matMenuTriggerFor]=\"newMenu\" [bizdocTooltip]=\"'Add'|translate\"><mat-icon>add</mat-icon></button>\r\n <mat-menu #newMenu>\r\n <button mat-menu-item (click)=\"newRole()\">{{'Role'|translate}}</button>\r\n <button mat-menu-item (click)=\"newPattern()\">{{'Pattern'|translate}}</button>\r\n <button mat-menu-item (click)=\"newGroup()\">{{'Group'|translate}} </button>\r\n </mat-menu>\r\n <button mat-icon-button [bizdocTooltip]=\"'Download' | translate\" (click)=\"download()\" [disabled]=\"dirty\"><mat-icon>save_alt</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table matSort [dataSource]=\"dataSource\" [style.display]=\"dataSource ? '': 'none'\">\r\n <ng-container *ngFor=\"let column of (type?.columns ||[])\" [matColumnDef]=\"column.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{column.label}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element[column.name]}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"key\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span [ngSwitch]=\"element.type\">\r\n <ng-container *ngSwitchCase=\"'group'\">({{'Group'|translate}})</ng-container>\r\n <ng-container *ngSwitchCase=\"'pattern'\">({{'Pattern'|translate}})</ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{element.key}}\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{''}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n {{element.value}}\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let role of roles\" [matColumnDef]=\"role.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{role.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\" [attr.data-role]=\"role.name\">\r\n <ng-container *ngIf=\"positions[role.name][element.key]\">\r\n <ng-container *ngFor=\"let u of positions[role.name][element.key]; let first = first\">\r\n <ng-container *ngIf=\"!first\">, </ng-container>\r\n {{profiles[u]?.name}}\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\" *ngIf=\"element.type === 'pattern' || element.type === 'group'\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <ng-container *ngIf=\"element.type === 'pattern'\">\r\n <button mat-menu-item (click)=\"editPattern(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deletePattern(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"element.type === 'group'\">\r\n <button mat-menu-item (click)=\"editGroup(element.key)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"deleteGroup(element.key)\">{{'Remove'|translate}} </button>\r\n </ng-container>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns\" (click)=\"edit(element.key, $event)\"></tr>\r\n</table>\r\n<!-- role template -->\r\n<ng-template #roleTpl>\r\n <h2 mat-dialog-title>{{'Role' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"role\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"role.value\" color=\"primary\" [disabled]=\"!role.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- pattern template -->\r\n<ng-template #patternTpl>\r\n <h2 mat-dialog-title>{{'Pattern' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"pattern\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput formControlName=\"expression\" [placeholder]=\"'Regex'| translate\" required autocomplete=\"off\" />\r\n <mat-hint><span [innerHTML]=\"'RegexHint' | translate : 'https://regex101.com/'| sanitizeHtml\"></span></mat-hint>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"pattern.value\" color=\"primary\" [disabled]=\"!pattern.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<!-- group -->\r\n<ng-template #groupTpl>\r\n <h2 mat-dialog-title>{{'Group' | translate }}</h2>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"group\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'| translate\" required autocomplete=\"off\" />\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Items'|translate\" multiple formControlName=\"items\" required>\r\n <mat-select-trigger>\r\n {{group.value.items ? group.value.items[0] : ''}}\r\n <span *ngIf=\"group.value.items?.length > 1\" class=\"additional-selection\">\r\n (+{{group.value.items.length - 1}} {{(group.value.items?.length === 2 ? 'Other' : 'Others')|translate}})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let v of source\" [value]=\"v.key\">\r\n <span *ngIf=\"!type.columns\">{{v.value}}</span>\r\n <span *ngIf=\"type.columns\"><span *ngFor=\"let c of type.columns\">{{v.value[c.name]}}</span></span>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"group.value\" color=\"primary\" [disabled]=\"!group.valid\">{{'OK' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<ng-template #noRoleTpl>\r\n <mat-dialog-content>\r\n {{'NoRoles'|translate : type?.title}}\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">{{'CreateRole' | translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel' | translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<form style=\"display:none\">\r\n <input type=\"file\" name=\"file\" (onchange)=\"upload($event)\" #file/>\r\n</form>\r\n", styles: ["table{width:100%}.form{padding:8px}table :ng-deep .mat-cell{cursor:pointer;border-left-width:1px;border-left-style:outset;padding:0 4px!important}\n"] }]
26892
26995
  }], ctorParameters: function () { return [{ type: SessionService }, { type: UtilityRef, decorators: [{
26893
26996
  type: Inject,
26894
26997
  args: [UtilityRef]
26895
- }] }, { type: DatasourceService }, { type: PromptService }, { type: AccountService }, { type: WindowTitleService }, { type: TranslateService }, { type: Popup }, { type: i3$2.MatDialog }]; }, propDecorators: { sort: [{
26998
+ }] }, { type: DatasourceService }, { type: PromptService }, { type: AccountService }, { type: WindowTitleService }, { type: TranslateService }, { type: Popup }, { type: i3$2.MatDialog }]; }, propDecorators: { _fileElement: [{
26999
+ type: ViewChild,
27000
+ args: ['file', { static: true }]
27001
+ }], sort: [{
26896
27002
  type: ViewChild,
26897
27003
  args: [MatSort]
26898
27004
  }], noRoleTpl: [{