@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
@@ -115,7 +115,7 @@ import * as i24 from '@angular/flex-layout/extended';
115
115
  import * as i4$1 from '@ctrl/ngx-emoji-mart';
116
116
  import { PickerModule } from '@ctrl/ngx-emoji-mart';
117
117
  import * as i8$2 from '@syncfusion/ej2-angular-charts';
118
- 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';
118
+ 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';
119
119
  import * as XLSX from 'xlsx';
120
120
  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';
121
121
  import * as i6$5 from '@syncfusion/ej2-angular-grids';
@@ -132,7 +132,7 @@ import { KanbanComponent, KanbanModule } from '@syncfusion/ej2-angular-kanban';
132
132
  import { CircularGaugeModule, AnnotationsService, GaugeTooltipService, LegendService as LegendService$1, CircularGauge, Annotations, GaugeTooltip, CircularGaugeComponent, Legend as Legend$1 } from '@syncfusion/ej2-angular-circulargauge';
133
133
  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';
134
134
  import * as i7$6 from '@syncfusion/ej2-angular-gantt';
135
- import { Gantt, SelectionService as SelectionService$3, DayMarkersService, GanttModule } from '@syncfusion/ej2-angular-gantt';
135
+ import { GanttModule, Gantt, SelectionService as SelectionService$3, DayMarkersService } from '@syncfusion/ej2-angular-gantt';
136
136
  import player from 'lottie-web/build/player/lottie';
137
137
 
138
138
  const expandListItemAnimation = trigger('detailExpand', [
@@ -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;
@@ -915,9 +918,6 @@ class FirebaseService {
915
918
  }
916
919
  }
917
920
 
918
- class AuthenticationImpl {
919
- }
920
-
921
921
  /** Listen to hub contracts */
922
922
  class HubService {
923
923
  constructor(_auth) {
@@ -1715,8 +1715,8 @@ const STRINGS = {
1715
1715
  MailVersionUpdate: '#{0} updated by {1}',
1716
1716
  NewComment: 'Someone commented...',
1717
1717
  Commented: '{0} commented',
1718
- DeleteFile: 'Delete File',
1719
- DeleteFileAsk: 'Are you sure you want to delete this file?',
1718
+ DeleteFile: 'Delete Attachment',
1719
+ DeleteFileAsk: 'Are you sure you want to delete this attachment?',
1720
1720
  DeleteCommentAsk: 'Are you sure you want to delete this comment?',
1721
1721
  GrantAccess: 'Grant Access',
1722
1722
  GrantTip: 'May sign in on your behalf, view and take action',
@@ -1822,7 +1822,7 @@ const STRINGS = {
1822
1822
  Form: 'Form',
1823
1823
  ActionAsk: 'Are you sure you want to {0}?',
1824
1824
  Discard: 'Discard',
1825
- DiscardAsk: 'Are you sure you want to permenently discard form?',
1825
+ DiscardAsk: 'Are you sure you want to permenently discard this document?',
1826
1826
  DiscardSelected: 'Discard {0} item(s)',
1827
1827
  TypeHere: 'Type here',
1828
1828
  ChatHere: 'Chat here',
@@ -2702,16 +2702,17 @@ const IMAGE_TYPE = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'];
2702
2702
  function isImage(contentType) {
2703
2703
  return IMAGE_TYPE.indexOf(contentType) > -1;
2704
2704
  }
2705
- function formatUrl(documentId, fileId) {
2706
- return `/api/mailbox/download/${documentId}?fileId=${fileId}`;
2705
+ function formatUrl(documentId, fileId, token) {
2706
+ return `/api/mailbox/download/${documentId}?fileId=${fileId}&access_token=${token}`;
2707
2707
  }
2708
2708
  const ANIMATION_TIMINGS = '400ms cubic-bezier(0.25, 0.8, 0.25, 1)';
2709
2709
  /** attachment-preview component*/
2710
2710
  class AttachmentPreview {
2711
2711
  /** attachment-preview ctor */
2712
- constructor(_directionality, _renderer, data, sanitizer, _overlayRef) {
2712
+ constructor(_directionality, _renderer, data, sanitizer, _auth, _overlayRef) {
2713
2713
  this._renderer = _renderer;
2714
2714
  this.data = data;
2715
+ this._auth = _auth;
2715
2716
  this._overlayRef = _overlayRef;
2716
2717
  this.loading = true;
2717
2718
  this.animationState = 'enter';
@@ -2741,7 +2742,7 @@ class AttachmentPreview {
2741
2742
  location.assign(this._url());
2742
2743
  }
2743
2744
  _url() {
2744
- return formatUrl(this.data.documentId, this.data.file.id);
2745
+ return formatUrl(this.data.documentId, this.data.file.id, this._auth.getAccessToken());
2745
2746
  }
2746
2747
  rotate() {
2747
2748
  const elem = (this.isImage ? this.img : this.obj).nativeElement;
@@ -2783,7 +2784,7 @@ class AttachmentPreview {
2783
2784
  this.animationState = 'leave';
2784
2785
  }
2785
2786
  }
2786
- 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 });
2787
+ 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 });
2787
2788
  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: [
2788
2789
  trigger('fade', [
2789
2790
  state('fadeOut', style({ opacity: 0 })),
@@ -2828,7 +2829,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
2828
2829
  return [{ type: i7.Directionality }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
2829
2830
  type: Inject,
2830
2831
  args: [FILE_PREVIEW_DIALOG_DATA]
2831
- }] }, { type: i1$2.DomSanitizer }, { type: i1$1.OverlayRef }];
2832
+ }] }, { type: i1$2.DomSanitizer }, { type: AuthenticationImpl }, { type: i1$1.OverlayRef }];
2832
2833
  }, propDecorators: { obj: [{
2833
2834
  type: ViewChild,
2834
2835
  args: ['obj', { static: false }]
@@ -5985,12 +5986,9 @@ class BrowseFilterComponent {
5985
5986
  const folder = this._session.profile.folders.find(f => f.name === this.folderId);
5986
5987
  if (folder.filters)
5987
5988
  this.filters = folder.filters;
5988
- else if (this._config.folders.axes) {
5989
- const { axes, cube } = this._config.folders;
5990
- this.filters = { axes, cube };
5991
- }
5989
+ return;
5992
5990
  }
5993
- else if (this._config.folders.axes) {
5991
+ if (this._config.folders && this._config.folders.axes) {
5994
5992
  const { axes, cube } = this._config.folders;
5995
5993
  this.filters = { axes, cube };
5996
5994
  }
@@ -6868,7 +6866,7 @@ class BrowseItemsComponent {
6868
6866
  this._loading$.pipe(takeUntil(this._destroy), debounceTime$1(100)).
6869
6867
  subscribe(e => this.loading = e);
6870
6868
  }
6871
- ngOnChanges(changes) {
6869
+ ngOnChanges(_) {
6872
6870
  this.displayedColumns = this._columns();
6873
6871
  this.refresh();
6874
6872
  }
@@ -7059,7 +7057,7 @@ class BrowseItemsComponent {
7059
7057
  }
7060
7058
  }
7061
7059
  /**
7062
- * execute function per item in collection
7060
+ * execute function per selected item
7063
7061
  * @param fn
7064
7062
  * @param error
7065
7063
  */
@@ -7106,6 +7104,11 @@ class BrowseItemsComponent {
7106
7104
  const columns = ['select'];
7107
7105
  if (this.folder && this.folder.columns)
7108
7106
  this._appendcolumns(this.folder.columns, columns);
7107
+ else if (!this.folder) {
7108
+ const folder = this._session.profile.folders.find(f => f.name === 'fav');
7109
+ if (folder && folder.columns)
7110
+ this._appendcolumns(folder.columns, columns);
7111
+ }
7109
7112
  else if (this._config.folders && this._config.folders.columns)
7110
7113
  this._appendcolumns(this._config.folders.columns, columns);
7111
7114
  else {
@@ -7129,7 +7132,11 @@ class BrowseItemsComponent {
7129
7132
  }
7130
7133
  sendAll(action, args) {
7131
7134
  const params = queryParams(args);
7132
- 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').
7135
+ this._forEach(i => this._mailbox.send(i.id, i.version, i.formId, null, action, params).
7136
+ pipe(tap(() => {
7137
+ if (i.folderId !== this.folderId)
7138
+ this.dataSource.data.remove(i);
7139
+ })), 'SendErr').
7133
7140
  subscribe(is => is.length > 1 ? this._sb.toast('SentMany', is.length.toString(), this._actionAdjective(action, true)) :
7134
7141
  this._sb.toast('Sent', is[0].number, this._actionAdjective(action)));
7135
7142
  }
@@ -8322,8 +8329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
8322
8329
  }] } });
8323
8330
 
8324
8331
  class FormRef {
8325
- constructor(_router) {
8326
- this._router = _router;
8332
+ constructor( /*private _router: RouterImpl*/) {
8327
8333
  this._saving = new Subject();
8328
8334
  this._stateChange = new Subject();
8329
8335
  this._modelChange = new Subject();
@@ -8352,10 +8358,10 @@ class FormRef {
8352
8358
  * @param page
8353
8359
  */
8354
8360
  navigate(page) {
8355
- this._router.navigate([], {
8356
- queryParams: { page },
8357
- state: { paging: true }
8358
- });
8361
+ //this._router.navigate([], {
8362
+ // queryParams: { page },
8363
+ // state: { paging: true }
8364
+ //});
8359
8365
  this._navigating.next(page);
8360
8366
  }
8361
8367
  /** release events */
@@ -8830,7 +8836,7 @@ class ComposeFormComponent {
8830
8836
  if (!this.form.template)
8831
8837
  throw (`Form '${this.form.name}' model missing '[Template()]' attribute.`);
8832
8838
  const factory = this._cf.resolve(this.form.template);
8833
- this._formRef = new FormRef(this._router);
8839
+ this._formRef = new FormRef();
8834
8840
  this._formRef._navigating.
8835
8841
  subscribe(p => this.page = p);
8836
8842
  this._formRef._stateChange.pipe(startWith()).
@@ -9176,7 +9182,7 @@ class ComposePaneComponent {
9176
9182
  this._pane.icon = form.icon;
9177
9183
  if (this.model.draft) {
9178
9184
  this.mode = 'compose';
9179
- //this._pane.expand();
9185
+ //setTimeout(()=>this._pane.expand());
9180
9186
  }
9181
9187
  else
9182
9188
  this.mode = 'preview';
@@ -9214,6 +9220,9 @@ class ComposePaneComponent {
9214
9220
  });
9215
9221
  this._pane.fullscreenChange.subscribe(f => this.expendable = !f);
9216
9222
  }
9223
+ close() {
9224
+ this._pane.close();
9225
+ }
9217
9226
  edit() {
9218
9227
  this.mode = 'compose';
9219
9228
  this.expendable && this.expand();
@@ -9300,12 +9309,12 @@ class ComposePaneComponent {
9300
9309
  }
9301
9310
  }
9302
9311
  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 });
9303
- 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 } });
9312
+ 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 } });
9304
9313
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposePaneComponent, decorators: [{
9305
9314
  type: Component,
9306
9315
  args: [{ selector: 'bizdoc-compose.pane', host: {
9307
9316
  class: 'pane'
9308
- }, 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"] }]
9317
+ }, 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"] }]
9309
9318
  }], ctorParameters: function () { return [{ type: SessionService }, { type: MailboxService }, { type: PaneRef }, { type: PanesRouter }]; }, propDecorators: { form: [{
9310
9319
  type: ViewChild,
9311
9320
  args: [ComposeFormComponent, { static: true }]
@@ -9357,6 +9366,8 @@ class BrowsePaneComponent {
9357
9366
  this.filterType = p['type'];
9358
9367
  if (this.filterType === 'flagged')
9359
9368
  this._pane.title = this._translate.get('Flagged');
9369
+ else if (p['tag'])
9370
+ this._pane.title = this._translate.get('Tags');
9360
9371
  this.filters = p;
9361
9372
  });
9362
9373
  const events = this._router.events.pipe(takeUntil(this._destroy));
@@ -9509,6 +9520,7 @@ class CubeAccumulationChartComponent {
9509
9520
  this.endAngle = 360;
9510
9521
  this.innerRadius = '0';
9511
9522
  }
9523
+ this.execute();
9512
9524
  }
9513
9525
  textRender(e) {
9514
9526
  e.text = e.point.x;
@@ -9531,10 +9543,13 @@ class CubeAccumulationChartComponent {
9531
9543
  *
9532
9544
  */
9533
9545
  ngOnChanges(changes) {
9534
- if (changes['filters'])
9546
+ if (changes['filters'] && !changes['filters'].firstChange)
9535
9547
  this.execute();
9536
9548
  else if (changes['height'])
9537
- this.accumchart && this.accumchart.accumulationResize();
9549
+ this.resize();
9550
+ }
9551
+ resize() {
9552
+ this.accumchart && this.accumchart.accumulationResize();
9538
9553
  }
9539
9554
  execute() {
9540
9555
  this.loadingChange.emit(true);
@@ -9564,11 +9579,17 @@ class CubeAccumulationChartComponent {
9564
9579
  height: this.height,
9565
9580
  currencyCode: this.currencyCode,
9566
9581
  series: [{
9567
- dataSource: this.dataSource, xName: 'name', yName: 'y',
9568
- startAngle: this.startAngle, endAngle: this.endAngle,
9569
- radius: "70%", dataLabel: this.dataLabel,
9570
- explode: true, explodeOffset: '10%',
9571
- explodeIndex: 0, innerRadius: this.innerRadius,
9582
+ dataSource: this.dataSource,
9583
+ xName: 'name',
9584
+ yName: 'y',
9585
+ startAngle: this.startAngle,
9586
+ endAngle: this.endAngle,
9587
+ radius: "70%",
9588
+ dataLabel: this.dataLabel,
9589
+ explode: true,
9590
+ explodeOffset: '10%',
9591
+ explodeIndex: 0,
9592
+ innerRadius: this.innerRadius,
9572
9593
  palettes: this.palettes
9573
9594
  }]
9574
9595
  }, this._elementRef.nativeElement);
@@ -9670,6 +9691,8 @@ class CubeChartComponent {
9670
9691
  };
9671
9692
  this.tooltip = {
9672
9693
  enable: true,
9694
+ enableAnimation: false,
9695
+ border: { width: 0 },
9673
9696
  textStyle: {
9674
9697
  fontFamily: FONT_FAMILY
9675
9698
  }
@@ -9700,26 +9723,35 @@ class CubeChartComponent {
9700
9723
  set series(value) {
9701
9724
  if (value)
9702
9725
  this._series = isArray(value) ? value : [value];
9726
+ else
9727
+ this._series = null;
9703
9728
  }
9704
9729
  get indices() {
9705
9730
  return this._indices;
9706
9731
  }
9707
9732
  set indices(value) {
9708
- this._indices = isArray(value) ? value : [value];
9733
+ if (value)
9734
+ this._indices = isArray(value) ? value : [value];
9735
+ else
9736
+ this._indices = null;
9709
9737
  }
9710
9738
  ngOnInit() {
9711
9739
  if (this.chartType === 'Line' || this.chartType === 'Spline')
9712
9740
  this.crosshair.enable = true;
9713
9741
  this.primaryYAxis.labelFormat = this.currencyCode ? 'c0' : 'n0';
9742
+ this.execute();
9714
9743
  }
9715
9744
  /**
9716
9745
  *
9717
9746
  */
9718
9747
  ngOnChanges(changes) {
9719
- if (changes['filters'])
9748
+ if (changes['filters'] && !changes['filters'].firstChange)
9720
9749
  this.execute();
9721
9750
  else if (changes['height'])
9722
- this.chart && this.chart.chartResize();
9751
+ this.resize();
9752
+ }
9753
+ resize() {
9754
+ this.chart && this.chart.chartResize();
9723
9755
  }
9724
9756
  execute() {
9725
9757
  this.loadingChange.emit(true);
@@ -9831,7 +9863,7 @@ class CubeChartComponent {
9831
9863
  }
9832
9864
  CubeChartComponent.nextId = 0;
9833
9865
  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 });
9834
- 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 });
9866
+ 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 });
9835
9867
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeChartComponent, decorators: [{
9836
9868
  type: Component,
9837
9869
  args: [{
@@ -9856,6 +9888,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
9856
9888
  type: Input
9857
9889
  }], filters: [{
9858
9890
  type: Input
9891
+ }], yAxis: [{
9892
+ type: Input
9859
9893
  }], chartType: [{
9860
9894
  type: Input
9861
9895
  }], indexChartType: [{
@@ -9891,9 +9925,20 @@ class CubeGridComponent {
9891
9925
  this._rows = [];
9892
9926
  this._columns = [];
9893
9927
  }
9928
+ set xAxis(val) {
9929
+ this._xAxis = isArray(val) ? val : [val];
9930
+ }
9931
+ set series(val) {
9932
+ if (val)
9933
+ this._series = isArray(val) ? val : [val];
9934
+ }
9935
+ set indices(val) {
9936
+ if (val)
9937
+ this._indices = isArray(val) ? val : [val];
9938
+ }
9894
9939
  ngOnInit() {
9895
- const cube = this._session.profile.cubes.find(c => c.name === this.cube);
9896
- const x = cube.axes.find(a => a.name === this.xAxis[0]), y = cube.axes.find(a => a.name === this.series[0]);
9940
+ this._cube = this.cube ? this._session.profile.cubes.find(c => c.name === this.cube) : this._session.profile.cubes[0];
9941
+ const x = this._cube.axes.find(a => a.name === this._xAxis[0]), y = this._cube.axes.find(a => a.name === this._series[0]);
9897
9942
  const promises = [];
9898
9943
  // aquire columns source
9899
9944
  let observe = this._ds.all(x.dataType).
@@ -9933,17 +9978,18 @@ class CubeGridComponent {
9933
9978
  // prepare
9934
9979
  this._prepare =
9935
9980
  forkJoin(promises).toPromise();
9981
+ this.execute();
9936
9982
  }
9937
9983
  /** */
9938
9984
  ngOnChanges(changes) {
9939
- if (changes['filters'])
9985
+ if (changes['filters'] && !changes['filters'].firstChange)
9940
9986
  this.execute();
9941
9987
  else if (changes['height'])
9942
9988
  this.resize();
9943
9989
  }
9944
9990
  execute() {
9945
9991
  this.loadingChange.emit(true);
9946
- this._service.series(this.cube, this.xAxis, { series: this.series, filters: this.filters, indices: this.indices }).
9992
+ this._service.series(this._cube.name, this._xAxis, { series: this._series, filters: this.filters, indices: this._indices }).
9947
9993
  subscribe(series => {
9948
9994
  this._prepare.then(() => {
9949
9995
  const rows = [];
@@ -10014,9 +10060,9 @@ class CubeGridComponent {
10014
10060
  if (data[`_${column}`] === 0)
10015
10061
  return;
10016
10062
  const axes = {};
10017
- axes[this.xAxis[0]] = column;
10063
+ axes[this._xAxis[0]] = column;
10018
10064
  if (type !== 'Index')
10019
- axes[this.series[0]] = row;
10065
+ axes[this._series[0]] = row;
10020
10066
  this.explore.emit({ axes, index: type === 'Index' ? row : null });
10021
10067
  }
10022
10068
  customAggregate(_, column) {
@@ -10038,7 +10084,7 @@ class CubeGridComponent {
10038
10084
  }
10039
10085
  CubeGridComponent.nextId = 0;
10040
10086
  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 });
10041
- 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"] });
10087
+ 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"] });
10042
10088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeGridComponent, decorators: [{
10043
10089
  type: Component,
10044
10090
  args: [{ selector: 'bizdoc-cube-grid', template: '', host: {
@@ -10052,8 +10098,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
10052
10098
  type: Input
10053
10099
  }], xAxis: [{
10054
10100
  type: Input
10055
- }], yAxis: [{
10056
- type: Input
10057
10101
  }], series: [{
10058
10102
  type: Input
10059
10103
  }], indices: [{
@@ -10177,6 +10221,8 @@ class CubePivotComponent {
10177
10221
  }
10178
10222
  },
10179
10223
  tooltip: {
10224
+ enableAnimation: false,
10225
+ border: { width: 0 },
10180
10226
  textStyle: {
10181
10227
  fontFamily: FONT_FAMILY
10182
10228
  }
@@ -10222,6 +10268,7 @@ class CubePivotComponent {
10222
10268
  currency: this.currencyCode,
10223
10269
  });
10224
10270
  });
10271
+ this.execute();
10225
10272
  }
10226
10273
  _getIndexTitle(name) {
10227
10274
  return this._cube.indices.find(i => i.name === name).title;
@@ -10234,7 +10281,7 @@ class CubePivotComponent {
10234
10281
  *
10235
10282
  */
10236
10283
  ngOnChanges(changes) {
10237
- if (changes['filters'])
10284
+ if (changes['filters'] && !changes['filters'].firstChange)
10238
10285
  this.execute();
10239
10286
  else if (changes['height'] || changes['width'])
10240
10287
  this.resize();
@@ -10257,7 +10304,7 @@ class CubePivotComponent {
10257
10304
  // columns
10258
10305
  const columns = xAxis2.concat(series2);
10259
10306
  // query
10260
- this._service.table(this.cube, columns, { filters: this.filters, indices: this.indices }).subscribe(r => {
10307
+ this._service.table(this._cube.name, columns, { filters: this.filters, indices: this.indices }).subscribe(r => {
10261
10308
  this._presets(xAxis2, series2, r);
10262
10309
  this._draw();
10263
10310
  this.loadingChange.emit(false);
@@ -10419,9 +10466,9 @@ class CubePivotComponent {
10419
10466
  }
10420
10467
  }
10421
10468
  ngOnDestroy() {
10469
+ this.pivot && this.pivot.destroy();
10422
10470
  this._destroy.next();
10423
10471
  this._destroy.complete();
10424
- this.pivot && this.pivot.destroy();
10425
10472
  }
10426
10473
  }
10427
10474
  CubePivotComponent.nextId = 0;
@@ -10482,6 +10529,8 @@ class CubeSpreadsheetComponent {
10482
10529
  this.loadingChange = new EventEmitter();
10483
10530
  this.id = `cube-spreadsheet-${CubeSpreadsheetComponent.nextId++}`;
10484
10531
  this.dataSource = [];
10532
+ this.numberStyle = { textAlign: 'right' };
10533
+ this.autoFillSettings = { showFillOptions: false };
10485
10534
  this._yrows = [];
10486
10535
  this._xcolumns = [];
10487
10536
  this._intl = new Internationalization();
@@ -10505,7 +10554,7 @@ class CubeSpreadsheetComponent {
10505
10554
  maximumFractionDigits: this._service.fractionDigits,
10506
10555
  minimumFractionDigits: this._service.fractionDigits
10507
10556
  });
10508
- this._cube = this._session.profile.cubes.find(c => c.name === this.cube);
10557
+ this._cube = this.cube ? this._session.profile.cubes.find(c => c.name === this.cube) : this._session.profile.cubes[0];
10509
10558
  if (!this._series) {
10510
10559
  this._axes = this._xAxis.map(c => this._cube.axes.find(a => a.name == c));
10511
10560
  if (this._indices)
@@ -10543,52 +10592,27 @@ class CubeSpreadsheetComponent {
10543
10592
  promises.push(observe);
10544
10593
  this._prepare = Promise.all(promises);
10545
10594
  }
10595
+ this.execute();
10546
10596
  }
10547
10597
  ngOnChanges(changes) {
10548
- if (changes['filters'])
10598
+ if (changes['filters'] && !changes['filters'].firstChange)
10549
10599
  this.execute();
10550
10600
  else if (changes['height'] || changes['width'])
10551
- if (this.spreadsheet) {
10552
- this.spreadsheet.height = this.height;
10553
- this.spreadsheet.width = this.width;
10554
- this.spreadsheet.resize();
10555
- }
10601
+ this.resize();
10602
+ }
10603
+ resize() {
10604
+ if (this.spreadsheet) {
10605
+ this.spreadsheet.height = this.height;
10606
+ this.spreadsheet.width = this.width;
10607
+ this.spreadsheet.resize();
10608
+ }
10556
10609
  }
10557
10610
  execute() {
10558
10611
  this.loadingChange.emit(true);
10559
- const numberStyle = { textAlign: 'right' };
10560
10612
  if (!this._series)
10561
- this._service.table(this.cube, this._xAxis, { filters: this.filters, indices: this._indices }).
10613
+ this._service.table(this._cube.name, this._xAxis, { filters: this.filters, indices: this._indices }).
10562
10614
  subscribe(data => {
10563
- const cells = [], style = { fontWeight: 'bold', textAlign: 'center' };
10564
- this._axes.forEach(c => cells.push({
10565
- value: c.title, style
10566
- }));
10567
- this._indices && this._cindices.forEach(i => cells.push({ value: i.title, style }));
10568
- cells.push({
10569
- value: this.yAxis ? this.yAxis.title : this._translate.get('Value'),
10570
- style
10571
- });
10572
- this.dataSource = [{
10573
- cells, height: 20
10574
- }];
10575
- data.forEach(d => {
10576
- const cells = [];
10577
- this._xAxis.forEach(c => cells.push({
10578
- value: d[c],
10579
- }));
10580
- this._indices && this._indices.forEach(i => cells.push({
10581
- style: numberStyle,
10582
- format: this._numberFormat,
10583
- value: (d[i] || 0).toString(),
10584
- }));
10585
- cells.push({
10586
- style: numberStyle,
10587
- format: this._numberFormat,
10588
- value: (d.value || 0).toString(),
10589
- });
10590
- this.dataSource.push({ cells, source: d, height: 20 });
10591
- });
10615
+ this._datatable(data);
10592
10616
  this._draw();
10593
10617
  this.loadingChange.emit(false);
10594
10618
  }, (e) => {
@@ -10597,39 +10621,9 @@ class CubeSpreadsheetComponent {
10597
10621
  });
10598
10622
  else
10599
10623
  this._service.series(this.cube, this._xAxis, { series: this._series, filters: this.filters }).
10600
- subscribe(d => {
10624
+ subscribe(data => {
10601
10625
  this._prepare.then(() => {
10602
- const style = { fontWeight: 'bold', textAlign: 'center' };
10603
- const cells = [{ value: '' }];
10604
- this._xcolumns.forEach(c => cells.push({ value: c.value, style }));
10605
- this.dataSource = [{ cells, height: 20 }];
10606
- this._indices && this._cube.indices.filter(i => this._indices.indexOf(i.name) > 0).
10607
- forEach(i => {
10608
- const cells = [{ value: i.title, style }], serie = d.find(s => s.index === i.name), map = {};
10609
- if (serie) {
10610
- serie.points.forEach(p => map[p.x] = p.y);
10611
- this._xcolumns.forEach(c => cells.push({
10612
- value: (map[c.key] || 0).toString(),
10613
- format: this._numberFormat,
10614
- style: numberStyle
10615
- }));
10616
- this.dataSource.push({ cells, height: 20 });
10617
- }
10618
- });
10619
- this._yrows.forEach(r => {
10620
- const cells = [{ value: r.value, style }], serie = d.find(s => s.name === r.key), map = {};
10621
- if (serie) {
10622
- serie.points.forEach(p => map[p.x] = p.y);
10623
- this._xcolumns.forEach(c => cells.push({
10624
- value: (map[c.key] || 0).toString(),
10625
- format: this._numberFormat,
10626
- style: numberStyle
10627
- }));
10628
- }
10629
- else
10630
- this._xcolumns.forEach(_ => cells.push({ value: '0' }));
10631
- this.dataSource.push({ cells, height: 20 });
10632
- });
10626
+ this._dataseries(data);
10633
10627
  this._draw();
10634
10628
  this.loadingChange.emit(false);
10635
10629
  });
@@ -10638,6 +10632,70 @@ class CubeSpreadsheetComponent {
10638
10632
  this.loadingChange.emit(false);
10639
10633
  });
10640
10634
  }
10635
+ _datatable(data) {
10636
+ const cells = [], style = { fontWeight: 'bold', textAlign: 'center' };
10637
+ this._axes.forEach(c => cells.push({
10638
+ value: c.title, style
10639
+ }));
10640
+ this._indices && this._cindices.forEach(i => cells.push({ value: i.title, style }));
10641
+ cells.push({
10642
+ value: this.yAxis ? this.yAxis.title : this._translate.get('Value'),
10643
+ style
10644
+ });
10645
+ this.dataSource = [{
10646
+ cells, height: 25
10647
+ }];
10648
+ data.forEach(d => {
10649
+ const cells = [];
10650
+ this._xAxis.forEach(c => cells.push({
10651
+ value: d[c],
10652
+ }));
10653
+ this._indices && this._indices.forEach(i => cells.push({
10654
+ style: this.numberStyle,
10655
+ format: this._numberFormat,
10656
+ value: (d[i] || 0).toString(),
10657
+ }));
10658
+ cells.push({
10659
+ style: this.numberStyle,
10660
+ format: this._numberFormat,
10661
+ value: (d.value || 0).toString(),
10662
+ });
10663
+ this.dataSource.push({ cells, source: d, height: 25 });
10664
+ });
10665
+ }
10666
+ _dataseries(d) {
10667
+ const style = { fontWeight: 'bold', textAlign: 'center' };
10668
+ const cells = [{ value: '' }];
10669
+ this._xcolumns.forEach(c => cells.push({ value: c.value, style }));
10670
+ this.dataSource = [{ cells, height: 25 }];
10671
+ this._indices && this._cindices.
10672
+ forEach(i => {
10673
+ const cells = [{ value: i.title, style }], serie = d.find(s => s.index === i.name), map = {};
10674
+ if (serie) {
10675
+ serie.points.forEach(p => map[p.x] = p.y);
10676
+ this._xcolumns.forEach(c => cells.push({
10677
+ value: (map[c.key] || 0).toString(),
10678
+ format: this._numberFormat,
10679
+ style: this.numberStyle
10680
+ }));
10681
+ this.dataSource.push({ cells, height: 25 });
10682
+ }
10683
+ });
10684
+ this._yrows.forEach(r => {
10685
+ const cells = [{ value: r.value, style }], serie = d.find(s => s.name === r.key), map = {};
10686
+ if (serie) {
10687
+ serie.points.forEach(p => map[p.x] = p.y);
10688
+ this._xcolumns.forEach(c => cells.push({
10689
+ value: (map[c.key] || 0).toString(),
10690
+ format: this._numberFormat,
10691
+ style: this.numberStyle
10692
+ }));
10693
+ }
10694
+ else
10695
+ this._xcolumns.forEach(_ => cells.push({ value: '0' }));
10696
+ this.dataSource.push({ cells, height: 25 });
10697
+ });
10698
+ }
10641
10699
  _draw() {
10642
10700
  this.spreadsheet && this.spreadsheet.destroy();
10643
10701
  this.spreadsheet = new Spreadsheet({
@@ -10646,19 +10704,13 @@ class CubeSpreadsheetComponent {
10646
10704
  allowDelete: false,
10647
10705
  allowInsert: false,
10648
10706
  allowSorting: true,
10649
- //allowSave: false,
10650
10707
  showRibbon: false,
10651
10708
  allowAutoFill: false,
10652
- autoFillSettings: { showFillOptions: false },
10653
- //enableClipboard: true,
10654
- //allowChart: false,
10655
- //allowFiltering: false,
10656
- //allowDataValidation: false,
10657
- //allowFindAndReplace: false,
10709
+ autoFillSettings: this.autoFillSettings,
10710
+ enableClipboard: true,
10658
10711
  enableContextMenu: false,
10659
10712
  showFormulaBar: false,
10660
10713
  showSheetTabs: false,
10661
- //scrollSettings: { isFinite: true },
10662
10714
  select: this.select.bind(this),
10663
10715
  sheets: [{
10664
10716
  columns: this.columns,
@@ -10692,8 +10744,10 @@ class CubeSpreadsheetComponent {
10692
10744
  const key = this.dataSource[i].source['_' + a.name];
10693
10745
  if (!axes[a.name])
10694
10746
  axes[a.name] = key;
10695
- else if (isString(axes[a.name]))
10696
- axes[a.name] = [axes[a.name], key];
10747
+ else if (isString(axes[a.name])) {
10748
+ if (axes[a.name] !== key)
10749
+ axes[a.name] = [axes[a.name], key];
10750
+ }
10697
10751
  else if (axes[a.name].indexOf(key) < 0)
10698
10752
  axes[a.name].push(key);
10699
10753
  });
@@ -10703,18 +10757,14 @@ class CubeSpreadsheetComponent {
10703
10757
  }
10704
10758
  else {
10705
10759
  if (y === 0) {
10706
- if (y < y1) {
10707
- const { key } = this._xcolumns[x - 1], xName = this._xAxis[0];
10708
- axes[xName] = key;
10709
- }
10760
+ if (y < y1)
10761
+ this._fillx(x, x1, axes);
10710
10762
  else
10711
10763
  return;
10712
10764
  }
10713
10765
  else if (x === 0) {
10714
- if (x < x1) {
10715
- const { key } = this._yrows[y - 1], yName = this._series[0];
10716
- axes[yName] = key;
10717
- }
10766
+ if (x < x1)
10767
+ this._filly(y, y1, axes);
10718
10768
  else
10719
10769
  return;
10720
10770
  }
@@ -10723,34 +10773,41 @@ class CubeSpreadsheetComponent {
10723
10773
  else if (y > this.dataSource.length - 1 || x > this.dataSource[y].cells.length - 1)
10724
10774
  return;
10725
10775
  else {
10726
- const xName = this._xAxis[0], yName = this._series[0];
10727
- let i = y - 1, j = x - 1;
10728
- while (j < x1) {
10729
- let { key } = this._xcolumns[j];
10730
- if (!axes[xName])
10731
- axes[xName] = key;
10732
- else if (isString(axes[xName]))
10733
- axes[xName] = [axes[xName], key];
10734
- else if (axes[xName].indexOf(key) < 0)
10735
- axes[xName].push(key);
10736
- j++;
10737
- }
10738
- while (i < y1) {
10739
- let { key } = this._yrows[i];
10740
- if (!axes[yName])
10741
- axes[yName] = key;
10742
- else if (isString(axes[yName]))
10743
- axes[yName] = [axes[yName], key];
10744
- else if (axes[yName].indexOf(key) < 0)
10745
- axes[yName].push(key);
10746
- i++;
10747
- }
10776
+ this._fillx(x, x1, axes);
10777
+ this._filly(y, y1, axes);
10748
10778
  }
10749
10779
  this.explore.emit({ axes });
10750
10780
  }
10751
10781
  }
10782
+ _filly(y, y1, axes) {
10783
+ const yName = this._series[0];
10784
+ let i = y - 1;
10785
+ while (i < y1) {
10786
+ let { key } = this._yrows[i];
10787
+ if (!axes[yName])
10788
+ axes[yName] = key;
10789
+ else if (isString(axes[yName]))
10790
+ axes[yName] = [axes[yName], key];
10791
+ else if (axes[yName].indexOf(key) < 0)
10792
+ axes[yName].push(key);
10793
+ i++;
10794
+ }
10795
+ }
10796
+ _fillx(x, x1, axes) {
10797
+ const xName = this._xAxis[0];
10798
+ let i = x - 1;
10799
+ while (i < x1) {
10800
+ let { key } = this._xcolumns[i];
10801
+ if (!axes[xName])
10802
+ axes[xName] = key;
10803
+ else if (isString(axes[xName]))
10804
+ axes[xName] = [axes[xName], key];
10805
+ else if (axes[xName].indexOf(key) < 0)
10806
+ axes[xName].push(key);
10807
+ i++;
10808
+ }
10809
+ }
10752
10810
  exportToExcel(title) {
10753
- //this.spreadsheet.save({ saveType: 'Xlsx', fileName: `${title}.xlsx`})
10754
10811
  const wb = XLSX.utils.book_new();
10755
10812
  const rows = this.spreadsheet.sheets[0].rows.map(r => r.cells.map(c => c.value));
10756
10813
  const ws = XLSX.utils.aoa_to_sheet(rows);
@@ -10765,16 +10822,12 @@ class CubeSpreadsheetComponent {
10765
10822
  }
10766
10823
  CubeSpreadsheetComponent.nextId = 0;
10767
10824
  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 });
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, styles: ["::ng-deep .e-spreadsheet .e-dragfill-ddb{display:none!important}\n"] });
10825
+ 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 });
10769
10826
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeSpreadsheetComponent, decorators: [{
10770
10827
  type: Component,
10771
10828
  args: [{
10772
10829
  selector: 'bizdoc-cube-spreadsheet',
10773
10830
  template: '',
10774
- styles: [`::ng-deep .e-spreadsheet .e-dragfill-ddb {
10775
- display: none !important;
10776
- }
10777
- `],
10778
10831
  host: {
10779
10832
  class: 'cube-view'
10780
10833
  }
@@ -10833,13 +10886,11 @@ class CubeViewComponent {
10833
10886
  this._instance.ngOnChanges({ 'height': {}, 'width': {} });
10834
10887
  });
10835
10888
  }
10889
+ ngAfterViewInit() {
10890
+ setTimeout(this._createView.bind(this));
10891
+ }
10836
10892
  ngOnChanges(changes) {
10837
- if (changes['view']) {
10838
- // dom
10839
- setTimeout(this._createView.bind(this));
10840
- }
10841
- else if (changes['axes'])
10842
- this.refresh();
10893
+ changes['axes'] && !changes['axes'].firstChange && this.refresh();
10843
10894
  }
10844
10895
  _createView() {
10845
10896
  this._viewDestroy.next();
@@ -10863,7 +10914,6 @@ class CubeViewComponent {
10863
10914
  comp.width = `${dim.width - 4}px`;
10864
10915
  comp.series = this.view.series;
10865
10916
  comp.indices = this.view.indices;
10866
- comp.yAxis = this.cube.yAxis;
10867
10917
  break;
10868
10918
  }
10869
10919
  case 'Spreadsheet':
@@ -10891,15 +10941,15 @@ class CubeViewComponent {
10891
10941
  default:
10892
10942
  {
10893
10943
  let comp = this._attach(CubeChartComponent);
10894
- comp.height = `${dim.height}px`;
10944
+ //comp.height = `${dim.height}px`;
10895
10945
  comp.chartType = this.view.chartType;
10896
10946
  comp.series = this.view.series;
10897
10947
  comp.indices = this.view.indices;
10948
+ comp.yAxis = this.cube.yAxis;
10898
10949
  comp.indexChartType = this.view.indexChartType;
10899
10950
  }
10900
10951
  }
10901
10952
  }
10902
- this.refresh();
10903
10953
  }
10904
10954
  _attach(comp) {
10905
10955
  const factory = this._factoryResolver.resolveComponentFactory(comp);
@@ -10913,6 +10963,7 @@ class CubeViewComponent {
10913
10963
  instance.cube = this.cube.name;
10914
10964
  instance.xAxis = this.view.xAxis;
10915
10965
  instance.currencyCode = this.cube.currencyCode;
10966
+ instance.filters = Object.assign(Object.assign({}, this.view.filters), this.axes);
10916
10967
  instance.loadingChange.pipe(takeUntil(this._viewDestroy), debounceTime(150)).subscribe(e => this.loadingChange.emit(this.loading = e));
10917
10968
  return instance;
10918
10969
  }
@@ -10928,7 +10979,7 @@ class CubeViewComponent {
10928
10979
  }
10929
10980
  refresh() {
10930
10981
  this._instance.filters = Object.assign(Object.assign({}, this.view.filters), this.axes);
10931
- this._instance.ngOnChanges({ 'filters': {} });
10982
+ this._instance.execute();
10932
10983
  }
10933
10984
  exportToExcel() {
10934
10985
  this._instance.exportToExcel(this.view.title);
@@ -11101,12 +11152,12 @@ class CubeViewPaneComponent extends ViewBase {
11101
11152
  }
11102
11153
  }
11103
11154
  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 });
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%;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 } });
11155
+ 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 } });
11105
11156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeViewPaneComponent, decorators: [{
11106
11157
  type: Component,
11107
11158
  args: [{ host: {
11108
11159
  class: 'pane'
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%;min-width:650px}:host ::ng-deep .cube-view{flex:1 auto}\n"] }]
11160
+ }, 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"] }]
11110
11161
  }], ctorParameters: function () { return [{ type: SessionService }, { type: PaneRef }, { type: Popup }, { type: RouterImpl }, { type: CubeService }, { type: GuideService }]; }, propDecorators: { viewPane: [{
11111
11162
  type: ViewChild,
11112
11163
  args: [CubeViewComponent, { static: true }]
@@ -12098,7 +12149,8 @@ class WorkflowComponent {
12098
12149
  nodes, connectors
12099
12150
  },
12100
12151
  policy: OpenPolicy.Tab,
12101
- expandable: false
12152
+ expandable: false,
12153
+ group: ''
12102
12154
  }).then(p => {
12103
12155
  p.instance.change.
12104
12156
  pipe(takeUntil(this._destroy)).subscribe(() => {
@@ -13390,17 +13442,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
13390
13442
  /** component*/
13391
13443
  class VersionCompareComponent {
13392
13444
  /** ctor */
13393
- constructor(_session, _cf, _container, _router, _injector) {
13445
+ constructor(_session, _cf, _container, _injector) {
13394
13446
  this._session = _session;
13395
13447
  this._cf = _cf;
13396
13448
  this._container = _container;
13397
- this._router = _router;
13398
13449
  this._injector = _injector;
13399
13450
  }
13400
13451
  get form() { return this._form; }
13401
13452
  get currentVersion() { return this._currentVersion; }
13402
13453
  get baseVersion() { return this._baseVersion; }
13403
- ngOnChanges(changes) {
13454
+ ngOnChanges(_) {
13404
13455
  this._form = this._session.profile.forms.find(f => f.name === this.model.formId);
13405
13456
  const log = this.model.log.find(l => l.type === 'ModelChange' && l.time === this.version);
13406
13457
  const idx = this.model.log.indexOf(log);
@@ -13410,7 +13461,7 @@ class VersionCompareComponent {
13410
13461
  const componentFactory = this._cf.resolve(this._form.template);
13411
13462
  const injector = Injector.create([
13412
13463
  { provide: VersionCompareComponent, useValue: this },
13413
- { provide: FormRef, useValue: new FormRef(this._router) },
13464
+ { provide: FormRef, useValue: new FormRef() },
13414
13465
  { provide: DOCUMENT_MODEL, useValue: this.model }
13415
13466
  ], this._injector);
13416
13467
  this._container.clear();
@@ -13421,7 +13472,7 @@ class VersionCompareComponent {
13421
13472
  instance.onBind(newModel, this._baseVersion);
13422
13473
  }
13423
13474
  }
13424
- 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 });
13475
+ 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 });
13425
13476
  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 });
13426
13477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: VersionCompareComponent, decorators: [{
13427
13478
  type: Component,
@@ -13429,7 +13480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
13429
13480
  selector: 'bizdoc-version-compare',
13430
13481
  template: ''
13431
13482
  }]
13432
- }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: PanesRouter }, { type: i0.Injector }]; }, propDecorators: { model: [{
13483
+ }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.ViewContainerRef }, { type: i0.Injector }]; }, propDecorators: { model: [{
13433
13484
  type: Input
13434
13485
  }], version: [{
13435
13486
  type: Input
@@ -15629,16 +15680,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
15629
15680
  }], ctorParameters: function () { return [{ type: SessionService }, { type: TranslateService }, { type: PaneRef }]; } });
15630
15681
 
15631
15682
  class DocumentInfoComponent {
15632
- constructor(_session, _cf, _router, _injector) {
15683
+ constructor(_session, _cf, _injector) {
15633
15684
  this._session = _session;
15634
15685
  this._cf = _cf;
15635
- this._router = _router;
15636
15686
  this._injector = _injector;
15637
15687
  }
15638
- ngOnChanges(changes) {
15688
+ ngOnChanges(_) {
15639
15689
  const form = this._session.profile.forms.find(f => f.name === this.model.formId);
15640
15690
  this._formRef && this._formRef._destroy();
15641
- this._formRef = new FormRef(this._router);
15691
+ this._formRef = new FormRef();
15642
15692
  const factory = this._cf.resolve(form.template);
15643
15693
  const injector = Injector.create([{
15644
15694
  provide: DOCUMENT_MODEL, useValue: this.model
@@ -15654,12 +15704,12 @@ class DocumentInfoComponent {
15654
15704
  this._formRef._destroy();
15655
15705
  }
15656
15706
  }
15657
- 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 });
15707
+ 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 });
15658
15708
  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"] }] });
15659
15709
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: DocumentInfoComponent, decorators: [{
15660
15710
  type: Component,
15661
15711
  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" }]
15662
- }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: RouterImpl }, { type: i0.Injector }]; }, propDecorators: { _container: [{
15712
+ }], ctorParameters: function () { return [{ type: SessionService }, { type: BizDocComponentFactoryResolver }, { type: i0.Injector }]; }, propDecorators: { _container: [{
15663
15713
  type: ViewChild,
15664
15714
  args: ['component', { read: ViewContainerRef, static: true }]
15665
15715
  }], model: [{
@@ -16379,10 +16429,10 @@ class ComposeMenuComponent {
16379
16429
  }
16380
16430
  }
16381
16431
  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 });
16382
- 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: [] });
16432
+ 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: [] });
16383
16433
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: ComposeMenuComponent, decorators: [{
16384
16434
  type: Component,
16385
- 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"] }]
16435
+ 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"] }]
16386
16436
  }], ctorParameters: function () { return [{ type: SessionService }, { type: MailboxService }, { type: PromptService }, { type: PanesRouter }]; }, propDecorators: { change: [{
16387
16437
  type: Output
16388
16438
  }] } });
@@ -16461,7 +16511,7 @@ class FoldersMenuComponent {
16461
16511
  //folder.group;
16462
16512
  return true;
16463
16513
  };
16464
- this.folders = this._session.profile.folders;
16514
+ this.folders = this._session.profile.folders.filter(f => f.name !== 'fav');
16465
16515
  }
16466
16516
  /**
16467
16517
  * Mail drop
@@ -16617,11 +16667,14 @@ class SearchService {
16617
16667
  if (u.title.toLowerCase().indexOf(val) > -1)
16618
16668
  xs.push({ path: `admin/utilities/${u.name}`, title: u.title, section: this._translate.get('Utilities'), icon: u.icon });
16619
16669
  });
16670
+ profile.options.tags &&
16671
+ profile.options.tags.forEach(t => {
16672
+ if (t.toLowerCase().indexOf(val) > -1)
16673
+ xs.push({ path: `mailbox/f?tag=${t}`, title: t, section: this._translate.get('Tags'), icon: 'bookmark' });
16674
+ });
16620
16675
  //profile.contacts.forEach()
16621
- //if (this._guide.guides) this._guide.guides.forEach(g => {
16622
- // if (g.mode !== 'Private' && (g.title.toLowerCase().indexOf(value) > -1 ||
16623
- // g.steps.some(s => (s.title && s.title.toLowerCase().indexOf(value) > -1) ||
16624
- // s.content.toLowerCase().indexOf(value) > -1)))
16676
+ //this._guide.guides.forEach(g => {
16677
+ // if (g.mode !== 'Private' && g.title.toLowerCase().indexOf(value) > -1)
16625
16678
  // xs.push({ fn: this._guide.start, args: [g.name], title: g.title, section: this._translate.get('Guides'), icon: 'help' })
16626
16679
  //});
16627
16680
  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' })));
@@ -16827,7 +16880,7 @@ class SlotsComponent {
16827
16880
  return;
16828
16881
  }
16829
16882
  else {
16830
- this._navQueryParams(tab, queryParams, state);
16883
+ this._navQueryParams(tab, queryParams);
16831
16884
  this.group = tab.group;
16832
16885
  this.selectedTabIndex = i;
16833
16886
  this._cd.detectChanges();
@@ -16859,7 +16912,7 @@ class SlotsComponent {
16859
16912
  return;
16860
16913
  }
16861
16914
  else {
16862
- this._navQueryParams(pane, queryParams, state);
16915
+ this._navQueryParams(pane, queryParams);
16863
16916
  this.scrollTo(i);
16864
16917
  this._replaceUrl();
16865
16918
  return;
@@ -16913,7 +16966,7 @@ class SlotsComponent {
16913
16966
  else {
16914
16967
  const pane = (policy & OpenPolicy.Tab) == OpenPolicy.Tab ?
16915
16968
  this.tabs[this.selectedTabIndex] : this.panes[this.selectedIndex];
16916
- this._navQueryParams(pane, queryParams, state);
16969
+ this._navQueryParams(pane, queryParams);
16917
16970
  this._replaceUrl();
16918
16971
  if ((policy & OpenPolicy.Tab) != OpenPolicy.Tab)
16919
16972
  this.select(this.selectedIndex);
@@ -17043,7 +17096,7 @@ class SlotsComponent {
17043
17096
  }
17044
17097
  else {
17045
17098
  const queryParams = this._parseQueryParams(queryString);
17046
- this._navQueryParams(pane, queryParams, state);
17099
+ this._navQueryParams(pane, queryParams);
17047
17100
  return;
17048
17101
  }
17049
17102
  }
@@ -17083,7 +17136,7 @@ class SlotsComponent {
17083
17136
  }
17084
17137
  else {
17085
17138
  const queryParams = this._parseQueryParams(queryString);
17086
- this._navQueryParams(tab, queryParams, state);
17139
+ this._navQueryParams(tab, queryParams);
17087
17140
  return;
17088
17141
  }
17089
17142
  }
@@ -17121,11 +17174,9 @@ class SlotsComponent {
17121
17174
  *
17122
17175
  * @param pane
17123
17176
  * @param queryParams
17124
- * @param data
17125
17177
  */
17126
- _navQueryParams(pane, queryParams, data) {
17178
+ _navQueryParams(pane, queryParams) {
17127
17179
  pane._queryString = this._queryString(queryParams);
17128
- pane._data$.next(Object.assign(Object.assign({}, pane.data), data));
17129
17180
  pane._queryParams$.next(queryParams);
17130
17181
  this._router._events$.next(new QueryParamNavigation(queryParams, pane));
17131
17182
  }
@@ -17617,15 +17668,15 @@ class SlotsComponent {
17617
17668
  this.navigationArrows();
17618
17669
  this._resize();
17619
17670
  }
17620
- navigationArrows(evt) {
17621
- const container = this._panesContainerRef.element.nativeElement;
17622
- this.next = this._rtl ? container.clientWidth - container.scrollLeft < container.scrollWidth :
17623
- container.scrollLeft + container.clientWidth < container.scrollWidth;
17624
- this.prev = this._rtl ? container.scrollLeft < 0 : container.scrollLeft > 0;
17671
+ navigationArrows(_) {
17672
+ const container = this._panesContainerRef.element.nativeElement, scrollLeft = Math.round(container.scrollLeft);
17673
+ this.next = this._rtl ? container.clientWidth - scrollLeft < container.scrollWidth :
17674
+ scrollLeft + container.clientWidth < container.scrollWidth;
17675
+ this.prev = this._rtl ? scrollLeft < 0 : scrollLeft > 0;
17625
17676
  }
17626
17677
  scrollBy(n) {
17627
- const { nativeElement } = this._panesContainerRef.element;
17628
- nativeElement.scrollBy({ behavior: 'smooth', left: n * (this._rtl ? -1 : 1) });
17678
+ const left = n * (this._rtl ? -1 : 1);
17679
+ this._panesContainerRef.element.nativeElement.scrollBy({ behavior: 'smooth', left });
17629
17680
  }
17630
17681
  focus(index) {
17631
17682
  const el = this._children.item(index);
@@ -18209,13 +18260,13 @@ const PANES_CONFIG = [{
18209
18260
  {
18210
18261
  path: 'views',
18211
18262
  component: DocumentViewPaneComponent,
18212
- policy: OpenPolicy.Tab | OpenPolicy.Expandable
18263
+ policy: OpenPolicy.Tab
18213
18264
  },
18214
18265
  {
18215
18266
  path: 'comments',
18216
18267
  icon: 'format_quote',
18217
18268
  component: CommentsPaneComponent,
18218
- policy: OpenPolicy.Scope | OpenPolicy.Pinnable | OpenPolicy.Tab,
18269
+ policy: OpenPolicy.Scope | OpenPolicy.Tab,
18219
18270
  children: [{
18220
18271
  path: ':commentId/versions',
18221
18272
  icon: 'history',
@@ -18243,7 +18294,7 @@ const PANES_CONFIG = [{
18243
18294
  }, {
18244
18295
  path: 'd/:id',
18245
18296
  component: DocumentInfoPaneComponent,
18246
- policy: OpenPolicy.Tab | OpenPolicy.Expandable,
18297
+ policy: OpenPolicy.Tab,
18247
18298
  resolve: {
18248
18299
  item: DocumentResolver
18249
18300
  },
@@ -18273,7 +18324,7 @@ const PANES_CONFIG = [{
18273
18324
  path: ':cube/v/:view',
18274
18325
  icon: 'bar_chart',
18275
18326
  component: CubeViewPaneComponent,
18276
- policy: OpenPolicy.Clear | OpenPolicy.Expandable
18327
+ policy: OpenPolicy.Clear
18277
18328
  }, {
18278
18329
  path: ':cube/explore',
18279
18330
  icon: 'summarize',
@@ -18282,7 +18333,7 @@ const PANES_CONFIG = [{
18282
18333
  children: [{
18283
18334
  path: 'i/:template/:key',
18284
18335
  component: ExploreItemPaneComponent,
18285
- policy: OpenPolicy.Pinnable | OpenPolicy.Tab,
18336
+ policy: OpenPolicy.Tab,
18286
18337
  resolve: { item: ItemResolver }
18287
18338
  }]
18288
18339
  },
@@ -18290,7 +18341,7 @@ const PANES_CONFIG = [{
18290
18341
  path: ':cube/i/:xAxis/:serie',
18291
18342
  icon: 'bar_chart',
18292
18343
  component: CubeMatrixPaneComponent,
18293
- policy: OpenPolicy.Pinnable | OpenPolicy.Tab | OpenPolicy.Expandable
18344
+ policy: OpenPolicy.Tab
18294
18345
  }]
18295
18346
  }, {
18296
18347
  path: 'reports',
@@ -18342,7 +18393,7 @@ const PANES_CONFIG = [{
18342
18393
  path: 'chatroom/:id',
18343
18394
  icon: 'person',
18344
18395
  component: ConversationPaneComponent,
18345
- policy: OpenPolicy.Tab | OpenPolicy.Expandable,
18396
+ policy: OpenPolicy.Tab
18346
18397
  }
18347
18398
  ];
18348
18399
 
@@ -18938,7 +18989,7 @@ const ROUTES = [
18938
18989
  class SyncfusionChartModule {
18939
18990
  }
18940
18991
  SyncfusionChartModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18941
- SyncfusionChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, imports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule], exports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule] });
18992
+ SyncfusionChartModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule], exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule] });
18942
18993
  SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
18943
18994
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
18944
18995
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
@@ -18948,12 +18999,12 @@ SyncfusionChartModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", v
18948
18999
  RangeAreaSeriesService, PolarSeriesService, RadarSeriesService, DateTimeCategoryService,
18949
19000
  MultiLevelLabelService, ParetoSeriesService, TooltipRenderService,
18950
19001
  ExportService,
18951
- AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService], imports: [[ChartModule, AccumulationChartAllModule, BulletChartAllModule], ChartModule, AccumulationChartAllModule, BulletChartAllModule] });
19002
+ AccumulationAnnotationService, AccumulationDataLabelService, AccumulationLegendService, AccumulationSelectionService, AccumulationTooltipService], imports: [[ChartModule, AccumulationChartAllModule, SparklineAllModule], ChartModule, AccumulationChartAllModule, SparklineAllModule] });
18952
19003
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionChartModule, decorators: [{
18953
19004
  type: NgModule,
18954
19005
  args: [{
18955
- imports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule],
18956
- exports: [ChartModule, AccumulationChartAllModule, BulletChartAllModule],
19006
+ imports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
19007
+ exports: [ChartModule, AccumulationChartAllModule, SparklineAllModule],
18957
19008
  providers: [LineSeriesService, ScatterSeriesService, ColumnSeriesService, SplineSeriesService,
18958
19009
  SplineAreaSeriesService, StripLineService, AreaSeriesService, ScrollBarService, StepLineSeriesService,
18959
19010
  StepAreaSeriesService, StackingColumnSeriesService, StackingLineSeriesService, StackingAreaSeriesService,
@@ -19093,6 +19144,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
19093
19144
  }]
19094
19145
  }] });
19095
19146
 
19147
+ class SyncfusionGanttModule {
19148
+ }
19149
+ SyncfusionGanttModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19150
+ SyncfusionGanttModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, imports: [GanttModule], exports: [GanttModule] });
19151
+ SyncfusionGanttModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, providers: [], imports: [[GanttModule], GanttModule] });
19152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: SyncfusionGanttModule, decorators: [{
19153
+ type: NgModule,
19154
+ args: [{
19155
+ imports: [GanttModule],
19156
+ exports: [GanttModule],
19157
+ providers: []
19158
+ }]
19159
+ }] });
19160
+
19096
19161
  let AssignActionComponent = class AssignActionComponent {
19097
19162
  constructor(_fb, _session, _accounts) {
19098
19163
  this._fb = _fb;
@@ -19709,7 +19774,7 @@ class CubeAccumAnalysisWidget extends CubeAnalysisBase {
19709
19774
  visible: true,
19710
19775
  position: 'Outside',
19711
19776
  connectorStyle: { length: '10%' },
19712
- name: 'x',
19777
+ name: 'name',
19713
19778
  font: {
19714
19779
  size: '14px',
19715
19780
  fontFamily: FONT_FAMILY,
@@ -19855,6 +19920,7 @@ class CubeChartAnalysisWidget extends CubeAnalysisBase {
19855
19920
  };
19856
19921
  this.tooltip = {
19857
19922
  enable: true,
19923
+ enableAnimation: false,
19858
19924
  shared: false,
19859
19925
  textStyle: {
19860
19926
  fontFamily: FONT_FAMILY
@@ -23537,8 +23603,8 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
23537
23603
  const { xAxis, serie, indices, sum, scope, filters } = this._viewRef.options;
23538
23604
  if (!xAxis || !serie)
23539
23605
  throw 'xAxis and serie required';
23540
- this.xAxis = xAxis;
23541
- this.serie = serie;
23606
+ this.xAxis = isArray(xAxis) ? xAxis[0] : xAxis;
23607
+ this.serie = isArray(serie) ? serie[0] : serie;
23542
23608
  this.indices = indices;
23543
23609
  this.sum = sum;
23544
23610
  this.scope = scope;
@@ -23585,7 +23651,7 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
23585
23651
  }
23586
23652
  };
23587
23653
  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 });
23588
- 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 } });
23654
+ 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 } });
23589
23655
  CubeDocumentMatrixComponent = __decorate([
23590
23656
  BizDoc({
23591
23657
  selector: 'bizdoc-cube-matrix'
@@ -23593,7 +23659,7 @@ CubeDocumentMatrixComponent = __decorate([
23593
23659
  ], CubeDocumentMatrixComponent);
23594
23660
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeDocumentMatrixComponent, decorators: [{
23595
23661
  type: Component,
23596
- 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"] }]
23662
+ 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"] }]
23597
23663
  }], ctorParameters: function () { return [{ type: DocumentViewRef }, { type: RouterImpl }, { type: CubeService }, { type: DatasourceService }, { type: SessionService }]; }, propDecorators: { table: [{
23598
23664
  type: ViewChild,
23599
23665
  args: [CubeMatrixComponent, { static: true }]
@@ -24023,7 +24089,7 @@ class CubeSumComponent {
24023
24089
  this.forward = false;
24024
24090
  this.Math = Math;
24025
24091
  }
24026
- ngOnChanges(changes) {
24092
+ ngOnChanges(_) {
24027
24093
  this._cube = this._session.profile.cubes.find(c => c.name === this.cube) || this._session.profile.cubes[0];
24028
24094
  this.currencyCode = this._cube.currencyCode;
24029
24095
  this.digitsInfo = this._service.digitsInfo;
@@ -24520,7 +24586,7 @@ let CubeChartViewComponent = class CubeChartViewComponent extends CubeBase {
24520
24586
  }
24521
24587
  };
24522
24588
  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 });
24523
- 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]" }] });
24589
+ 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]" }] });
24524
24590
  CubeChartViewComponent = __decorate([
24525
24591
  BizDoc({
24526
24592
  selector: 'bizdoc-chart-view'
@@ -24598,6 +24664,7 @@ class Item {
24598
24664
  this.fill = fill;
24599
24665
  this.tooltipSettings = {
24600
24666
  visible: true,
24667
+ border: { width: 0 },
24601
24668
  format: '${name} : ${y}',
24602
24669
  trackLineSettings: {},
24603
24670
  textStyle: {
@@ -24850,7 +24917,7 @@ const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, Cu
24850
24917
  ];
24851
24918
  class SharedModule {
24852
24919
  static forChild(config) {
24853
- const { formats, maps } = config || {};
24920
+ const { formats } = config || {};
24854
24921
  registerComponents(CORE_COMPONENTS);
24855
24922
  const providers = [{
24856
24923
  provide: RouterImpl, useClass: !config || !config.routing || config.routing === 'ng' ? NgRouter : PaneRouter
@@ -24937,11 +25004,11 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
24937
25004
  RouterModule,
24938
25005
  MomentModule,
24939
25006
  PickerModule,
24940
- GanttModule,
25007
+ SyncfusionGanttModule,
24941
25008
  SyncfusionScheduleModule,
24942
25009
  SyncfusionCircularGaugeModule,
24943
25010
  SyncfusionChartModule,
24944
- SparklineAllModule,
25011
+ SyncfusionGanttModule,
24945
25012
  SyncfusionGridModule,
24946
25013
  RichTextEditorModule,
24947
25014
  SyncfusionSpreadsheetModule,
@@ -24997,11 +25064,11 @@ SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
24997
25064
  RouterModule,
24998
25065
  MomentModule,
24999
25066
  PickerModule,
25000
- GanttModule,
25067
+ SyncfusionGanttModule,
25001
25068
  SyncfusionScheduleModule,
25002
25069
  SyncfusionCircularGaugeModule,
25003
25070
  SyncfusionChartModule,
25004
- SparklineAllModule,
25071
+ SyncfusionGanttModule,
25005
25072
  SyncfusionGridModule,
25006
25073
  RichTextEditorModule,
25007
25074
  SyncfusionSpreadsheetModule,
@@ -25077,11 +25144,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
25077
25144
  RouterModule,
25078
25145
  MomentModule,
25079
25146
  PickerModule,
25080
- GanttModule,
25147
+ SyncfusionGanttModule,
25081
25148
  SyncfusionScheduleModule,
25082
25149
  SyncfusionCircularGaugeModule,
25083
25150
  SyncfusionChartModule,
25084
- SparklineAllModule,
25151
+ SyncfusionGanttModule,
25085
25152
  SyncfusionGridModule,
25086
25153
  RichTextEditorModule,
25087
25154
  SyncfusionSpreadsheetModule,
@@ -27022,7 +27089,7 @@ let PositionsComponent = class PositionsComponent {
27022
27089
  let positions = model.positions;
27023
27090
  if (!positions || !Object.keys(positions).length)
27024
27091
  continue;
27025
- const roles = this.roles = this._session.profile.roles.filter(r => r.dataType === type.name && positions[r.name]);
27092
+ const roles = this._session.profile.roles.filter(r => r.dataType === type.name && positions[r.name]);
27026
27093
  const rows = [];
27027
27094
  rows.push([this._translate.get('Type'), this._translate.get('Value'), '', ...roles.map(r => r.title)]);
27028
27095
  model.patterns && model.patterns.forEach(p => {
@@ -27062,26 +27129,67 @@ let PositionsComponent = class PositionsComponent {
27062
27129
  XLSX.writeFile(wb, `${this._translate.get('Positions')}.xlsx`);
27063
27130
  });
27064
27131
  }
27132
+ upload(evt) {
27133
+ return __awaiter(this, void 0, void 0, function* () {
27134
+ const { files } = evt.srcElement;
27135
+ if (files && files.length) {
27136
+ const file = files.item(0);
27137
+ var reader = new FileReader();
27138
+ reader.onload = e => { };
27139
+ const text = yield file.text();
27140
+ //reader.readAs(text);
27141
+ const wb = XLSX.readFile(file.name, {});
27142
+ for (let i = 0; i < wb.SheetNames.length; i++) {
27143
+ let title = wb.SheetNames[i], ws = wb.Sheets[title];
27144
+ let type = this.types.find(t => t.title === title);
27145
+ if (!type)
27146
+ throw '';
27147
+ let roles = this._session.profile.roles.filter(r => r.dataType === type.name);
27148
+ let row = ws['!rows'][0];
27149
+ for (let c = 0; c < ws['!cols'].length; c++) {
27150
+ let col = ws['!cols'][c];
27151
+ //let role = roles.find(r => r.title === ws.);
27152
+ // if (!role) {
27153
+ // this._everything[type.name].roles.push({name: '', title: ''});
27154
+ // }
27155
+ }
27156
+ for (let r = 0; r < ws['!rows'].length; r++) {
27157
+ let row = ws['!rows'][r];
27158
+ for (let c = 0; c < ws['!cols'].length; c++) {
27159
+ let col = ws['!cols'][c], content = '';
27160
+ if (content) {
27161
+ //let users = content.split(', ').map(name=> this.profiles.find(u=> u.name === name));
27162
+ }
27163
+ else { }
27164
+ }
27165
+ }
27166
+ }
27167
+ }
27168
+ });
27169
+ }
27065
27170
  ngOnDestroy() {
27066
27171
  this._destroy.next();
27067
27172
  this._destroy.complete();
27068
27173
  }
27069
27174
  };
27070
27175
  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 });
27071
- 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 } });
27176
+ 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 } });
27072
27177
  PositionsComponent = __decorate([
27073
27178
  BizDoc({ selector: 'bizdoc-positions' })
27074
27179
  /** positions component*/
27075
27180
  ], PositionsComponent);
27076
27181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: PositionsComponent, decorators: [{
27077
27182
  type: Component,
27078
- 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"] }]
27183
+ 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"] }]
27079
27184
  }], ctorParameters: function () {
27080
27185
  return [{ type: SessionService }, { type: UtilityRef, decorators: [{
27081
27186
  type: Inject,
27082
27187
  args: [UtilityRef]
27083
27188
  }] }, { type: DatasourceService }, { type: PromptService }, { type: AccountService }, { type: WindowTitleService }, { type: TranslateService }, { type: Popup }, { type: i3$2.MatDialog }];
27084
- }, propDecorators: { sort: [{
27189
+ }, propDecorators: { _fileElement: [{
27190
+ type: ViewChild,
27191
+ args: ['file', { static: true }]
27192
+ }], sort: [{
27085
27193
  type: ViewChild,
27086
27194
  args: [MatSort]
27087
27195
  }], noRoleTpl: [{