@bizdoc/core 1.13.0-next.1 → 1.13.0-next.5
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.
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +22 -26
- package/esm2020/lib/browse/browse-items.component.mjs +2 -2
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +12 -16
- package/esm2020/lib/compose/form.component.mjs +2 -2
- package/esm2020/lib/compose/trace/flow.component.mjs +50 -76
- package/esm2020/lib/compose/trace/trace.component.mjs +19 -21
- package/esm2020/lib/core/hub.service.mjs +1 -1
- package/esm2020/lib/core/mailbox.service.mjs +3 -1
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/slots/slots.component.mjs +3 -3
- package/esm2020/lib/core/translations.mjs +2 -2
- package/esm2020/lib/cube/cube.service.mjs +1 -1
- package/esm2020/lib/cube/explore/explore-items.component.mjs +3 -2
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -1
- package/esm2020/lib/cube/matrix/table.component.mjs +17 -17
- package/esm2020/lib/home/home-base.component.mjs +2 -2
- package/esm2020/lib/shared.module.mjs +17 -2
- package/fesm2015/bizdoc-core.mjs +146 -161
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +142 -159
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/document-trace/trace-element.component.d.ts +1 -1
- package/lib/core/hub.service.d.ts +1 -0
- package/lib/core/models.d.ts +5 -0
- package/lib/cube/explore/explore-items.component.d.ts +1 -0
- package/package.json +10 -10
package/fesm2015/bizdoc-core.mjs
CHANGED
@@ -128,7 +128,7 @@ import { Spreadsheet, isNumber, SpreadsheetModule, SelectionService as Selection
|
|
128
128
|
import * as i4$1 from '@ctrl/ngx-emoji-mart';
|
129
129
|
import { PickerModule } from '@ctrl/ngx-emoji-mart';
|
130
130
|
import * as i11$1 from '@syncfusion/ej2-angular-diagrams';
|
131
|
-
import { Diagram, UndoRedo, ConnectorDrawingTool, DiagramConstraints, DiagramTools, NodeConstraints, ConnectorConstraints, SelectorConstraints, Node, SymbolPaletteComponent, ComplexHierarchicalTree, BpmnDiagrams, DataBinding, ConnectionPointOrigin, SnapConstraints, ComplexHierarchicalTreeService, DiagramModule, SymbolPaletteModule, ConnectorBridgingService, LineRoutingService, BpmnDiagramsService, LayoutAnimationService, UndoRedoService, SnappingService, ConnectorEditingService, ToolBase } from '@syncfusion/ej2-angular-diagrams';
|
131
|
+
import { Diagram, UndoRedo, ConnectorDrawingTool, DiagramConstraints, DiagramTools, NodeConstraints, ConnectorConstraints, SelectorConstraints, Node, SymbolPaletteComponent, ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution, ConnectionPointOrigin, SnapConstraints, ComplexHierarchicalTreeService, DiagramModule, SymbolPaletteModule, ConnectorBridgingService, LineRoutingService, BpmnDiagramsService, LayoutAnimationService, UndoRedoService, SnappingService, ConnectorEditingService, ToolBase } from '@syncfusion/ej2-angular-diagrams';
|
132
132
|
import * as i9$2 from '@syncfusion/ej2-angular-schedule';
|
133
133
|
import { Schedule, Day, WorkWeek, Month, MonthAgenda, Agenda, Year, ScheduleModule, ExcelExportService as ExcelExportService$2, DayService, WorkWeekService, MonthService, MonthAgendaService, ICalendarExportService, AgendaService, YearService } from '@syncfusion/ej2-angular-schedule';
|
134
134
|
import * as i10$2 from '@syncfusion/ej2-angular-kanban';
|
@@ -1247,6 +1247,8 @@ class MailboxService {
|
|
1247
1247
|
};
|
1248
1248
|
messaging.new$.
|
1249
1249
|
subscribe(m => {
|
1250
|
+
if (m.userId !== _session.profile.userId)
|
1251
|
+
return;
|
1250
1252
|
_session.profile.inboxCount++;
|
1251
1253
|
const folder = _session.profile.folders.find(f => f.name === m.model.folderId);
|
1252
1254
|
folder.count++;
|
@@ -1928,7 +1930,7 @@ const STRINGS = {
|
|
1928
1930
|
NoEstimate: '(No estimate)',
|
1929
1931
|
EstimateTime: '(Estimated time {0})',
|
1930
1932
|
NodeStandardTime: '(Standard time: {0})',
|
1931
|
-
EstimateTimeRange: '(Estimated time {0}
|
1933
|
+
EstimateTimeRange: '(Estimated time between {0} and {1})',
|
1932
1934
|
Connect: 'Connect',
|
1933
1935
|
Requirments: 'Requirments',
|
1934
1936
|
Anyone: 'Anyone',
|
@@ -6958,7 +6960,7 @@ class ExpandedItemComponent {
|
|
6958
6960
|
}
|
6959
6961
|
_note() {
|
6960
6962
|
return __awaiter(this, void 0, void 0, function* () {
|
6961
|
-
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId } = this.item;
|
6963
|
+
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId, escalated } = this.item;
|
6962
6964
|
if (substitutingId) {
|
6963
6965
|
this._accounts.get(substitutingId).subscribe(u => {
|
6964
6966
|
if (replied) {
|
@@ -6968,19 +6970,15 @@ class ExpandedItemComponent {
|
|
6968
6970
|
else
|
6969
6971
|
this.note = this._translate.personalize('YouSubstituteActionTaken', u.gender, adjective, this._formatUserElement(u), time);
|
6970
6972
|
}
|
6973
|
+
else if (escalated) {
|
6974
|
+
const escalations = log.filter(l => l.time > issued &&
|
6975
|
+
l.type === 'Escalation'
|
6976
|
+
&& l.recipientId === id);
|
6977
|
+
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(escalations[0].duration));
|
6978
|
+
}
|
6971
6979
|
else {
|
6972
|
-
const
|
6973
|
-
|
6974
|
-
l.type === 'Escalation'
|
6975
|
-
&& l.recipientId === id);
|
6976
|
-
if (escalations && escalations.length) {
|
6977
|
-
const duration = dayjs(escalations[0].time).diff(received, 's');
|
6978
|
-
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(duration));
|
6979
|
-
}
|
6980
|
-
else {
|
6981
|
-
const time = this._fromNow(received);
|
6982
|
-
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6983
|
-
}
|
6980
|
+
const time = this._fromNow(received);
|
6981
|
+
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6984
6982
|
}
|
6985
6983
|
});
|
6986
6984
|
}
|
@@ -6989,9 +6987,9 @@ class ExpandedItemComponent {
|
|
6989
6987
|
if (byId) {
|
6990
6988
|
if (byId === this._session.profile.byId) {
|
6991
6989
|
if (toId)
|
6992
|
-
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('
|
6990
|
+
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('ActionTakenByYouTo', this._actionName(action, 'you'), this._formatUserElement(u), this._session.profile.name, time));
|
6993
6991
|
else
|
6994
|
-
this.note = this._translate.get('
|
6992
|
+
this.note = this._translate.get('ActionTakenByYou', this._actionName(action, 'you'), this._session.profile.name, time);
|
6995
6993
|
}
|
6996
6994
|
else
|
6997
6995
|
this._accounts.get(byId).subscribe(u => {
|
@@ -7280,7 +7278,7 @@ class BrowseItemsComponent {
|
|
7280
7278
|
this._remove(item);
|
7281
7279
|
});
|
7282
7280
|
this._messaging.new$.pipe(takeUntil(this._destroy)).subscribe(m => {
|
7283
|
-
if (!this.dataSource)
|
7281
|
+
if (!this.dataSource || m.userId !== this._session.profile.userId)
|
7284
7282
|
return;
|
7285
7283
|
const item = this.dataSource.data.find(c => c.id === m.model.id);
|
7286
7284
|
if (!item && this.folderId === m.model.folderId) {
|
@@ -8493,7 +8491,7 @@ class ComposeFormComponent {
|
|
8493
8491
|
return this._mailbox.send(id, version, formId, model, action, params).
|
8494
8492
|
subscribe(r => {
|
8495
8493
|
if (r.toId)
|
8496
|
-
this._accounts.get(r.toId).subscribe(u => this._sb.toast('
|
8494
|
+
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, this._getActionAdjective(action), u.name));
|
8497
8495
|
else
|
8498
8496
|
this._sb.toast('Sent', number, this._getActionAdjective(action));
|
8499
8497
|
this.working = false;
|
@@ -11976,6 +11974,7 @@ class ExploreItemsComponent {
|
|
11976
11974
|
});
|
11977
11975
|
}
|
11978
11976
|
_datasource(data) {
|
11977
|
+
this._data = data;
|
11979
11978
|
this.dataSource = new MatTableDataSource(data);
|
11980
11979
|
this.dataSource.sort = this.sort;
|
11981
11980
|
this.dataSource.paginator = this.paginator;
|
@@ -12000,7 +11999,7 @@ class ExploreItemsComponent {
|
|
12000
11999
|
}
|
12001
12000
|
}))
|
12002
12001
|
}];
|
12003
|
-
this.
|
12002
|
+
this._data.forEach((r, i) => rows.push({
|
12004
12003
|
index: i + 2,
|
12005
12004
|
cells: this.columns.map((c, j) => {
|
12006
12005
|
const isnumber = c.type === 'Currency' || c.type === 'Number';
|
@@ -12105,6 +12104,7 @@ class CubeExplorePaneComponent {
|
|
12105
12104
|
relativeTo: this._pane,
|
12106
12105
|
queryParams: this.axes,
|
12107
12106
|
state: { item },
|
12107
|
+
policy: OpenPolicy.Tab | OpenPolicy.Dismissable,
|
12108
12108
|
group: this._pane.group
|
12109
12109
|
});
|
12110
12110
|
this.loading = false;
|
@@ -13228,8 +13228,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
13228
13228
|
args: [{ name: 'amDurationFormat' }]
|
13229
13229
|
}], ctorParameters: function () { return [{ type: TranslateService }]; } });
|
13230
13230
|
|
13231
|
-
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13232
|
-
const PENDING_PATH = 'M18,22l-0.01-6L14,12l3.99-4.01L18,2H6v6l4,4l-4,3.99V22H18z M8,7.5V4h8v3.5l-4,4L8,7.5z',
|
13231
|
+
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13232
|
+
const //PENDING_PATH = 'M18,22l-0.01-6L14,12l3.99-4.01L18,2H6v6l4,4l-4,3.99V22H18z M8,7.5V4h8v3.5l-4,4L8,7.5z',
|
13233
|
+
ELLIPSIS = 'M 650, 150 a 75,150 0 1,0 1,0 z', FYI_PATH = 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z', ESCALATED_PATH = 'M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z', WARNNING_PATH$1 = 'M 13.763735,1.8433735 H 6.3037349 l -5.27,5.27 v 7.4599995 l 5.27,5.27 h 7.4600001 l 5.27,-5.27 V 7.1133735 Z m -3.73,14.2999995 c -0.7200001,0 -1.3000001,-0.58 -1.3000001,-1.3 0,-0.72 0.58,-1.3 1.3000001,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3 z m 1,-4.3 H 9.0337349 V 5.8433735 h 2.0000001 z';
|
13233
13234
|
/** flow-view component*/
|
13234
13235
|
class FlowViewComponent extends TraceBase {
|
13235
13236
|
/** workflow-view ctor */
|
@@ -13251,13 +13252,15 @@ class FlowViewComponent extends TraceBase {
|
|
13251
13252
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
13252
13253
|
horizontalSpacing: 50,
|
13253
13254
|
verticalSpacing: 50,
|
13254
|
-
|
13255
|
+
//connectorSegments: 'Layout',
|
13256
|
+
//arrangement: ChildArrangement.Linear,
|
13257
|
+
horizontalAlignment: 'Center',
|
13255
13258
|
connectionDirection: 'Orientation',
|
13256
13259
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
13257
|
-
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
13258
13260
|
};
|
13259
13261
|
this.scrollSettings = {
|
13260
13262
|
minZoom: .5,
|
13263
|
+
scrollLimit: 'Limited',
|
13261
13264
|
canAutoScroll: true,
|
13262
13265
|
currentZoom: 1.2,
|
13263
13266
|
padding: { top: 0, bottom: 0 },
|
@@ -13342,7 +13345,6 @@ class FlowViewComponent extends TraceBase {
|
|
13342
13345
|
obj.style.strokeWidth = 0;
|
13343
13346
|
}
|
13344
13347
|
else {
|
13345
|
-
// obj.shape = { type: 'Bpmn', shape: 'Event' } as BpmnShapeModel;
|
13346
13348
|
obj.width = obj.height = 50;
|
13347
13349
|
if (obj.annotations && obj.annotations.length)
|
13348
13350
|
obj.annotations[0].style.color = this._session.theme.dark ? 'white' : 'black';
|
@@ -13353,7 +13355,8 @@ class FlowViewComponent extends TraceBase {
|
|
13353
13355
|
}
|
13354
13356
|
else {
|
13355
13357
|
obj.style.strokeColor = this._accentColor;
|
13356
|
-
obj.style.fill = recipient && recipient.pending ?
|
13358
|
+
obj.style.fill = recipient && recipient.pending ?
|
13359
|
+
this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : 'transparent';
|
13357
13360
|
}
|
13358
13361
|
obj.style.strokeWidth = 2;
|
13359
13362
|
}
|
@@ -13449,7 +13452,7 @@ class FlowViewComponent extends TraceBase {
|
|
13449
13452
|
}
|
13450
13453
|
}]
|
13451
13454
|
};
|
13452
|
-
if (r > 0)
|
13455
|
+
if (r > 0)
|
13453
13456
|
dconnectors.forEach(c => {
|
13454
13457
|
if (c.targetId === node.id)
|
13455
13458
|
connectors.push({
|
@@ -13459,7 +13462,10 @@ class FlowViewComponent extends TraceBase {
|
|
13459
13462
|
estimate: c.estimate
|
13460
13463
|
}
|
13461
13464
|
});
|
13462
|
-
if (c.sourceId === node.id)
|
13465
|
+
if (c.sourceId === node.id) {
|
13466
|
+
//
|
13467
|
+
if (c.virtual && c.originId !== recipient.id)
|
13468
|
+
return;
|
13463
13469
|
connectors.push({
|
13464
13470
|
sourceID: nod.id,
|
13465
13471
|
targetID: c.targetId,
|
@@ -13467,8 +13473,8 @@ class FlowViewComponent extends TraceBase {
|
|
13467
13473
|
estimate: c.estimate
|
13468
13474
|
}
|
13469
13475
|
});
|
13476
|
+
}
|
13470
13477
|
});
|
13471
|
-
}
|
13472
13478
|
nodes.push(nod);
|
13473
13479
|
if (recipient.action) {
|
13474
13480
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
@@ -13491,56 +13497,40 @@ class FlowViewComponent extends TraceBase {
|
|
13491
13497
|
indicators.push(actionIndicator);
|
13492
13498
|
}
|
13493
13499
|
}
|
13494
|
-
if (recipient.
|
13500
|
+
if (recipient.fyi)
|
13495
13501
|
indicators.push({
|
13496
|
-
id: nod.id + '
|
13502
|
+
id: nod.id + 'fyi',
|
13497
13503
|
shape: {
|
13498
13504
|
type: 'Path',
|
13499
|
-
data:
|
13500
|
-
align: this._session.inverse ? '
|
13505
|
+
data: FYI_PATH,
|
13506
|
+
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13501
13507
|
},
|
13502
13508
|
style: {
|
13503
|
-
fill:
|
13509
|
+
fill: '#1976d2'
|
13504
13510
|
},
|
13505
13511
|
addInfo: {
|
13506
13512
|
indicator: true,
|
13507
13513
|
parentId: nod.id
|
13508
13514
|
}
|
13509
13515
|
});
|
13510
|
-
if (recipient.
|
13511
|
-
|
13512
|
-
id: nod.id + '
|
13516
|
+
if (recipient.escalated) {
|
13517
|
+
const escalateIndicator = {
|
13518
|
+
id: nod.id + 'escalate',
|
13513
13519
|
shape: {
|
13514
13520
|
type: 'Path',
|
13515
|
-
data:
|
13521
|
+
data: ESCALATED_PATH,
|
13516
13522
|
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13517
13523
|
},
|
13518
13524
|
style: {
|
13519
|
-
fill:
|
13525
|
+
fill: this._session.getAccent(900)
|
13520
13526
|
},
|
13521
13527
|
addInfo: {
|
13522
13528
|
indicator: true,
|
13523
13529
|
parentId: nod.id
|
13524
13530
|
}
|
13525
|
-
}
|
13526
|
-
|
13527
|
-
|
13528
|
-
// id: nod.id + 'escalate',
|
13529
|
-
// shape: {
|
13530
|
-
// type: 'Path',
|
13531
|
-
// data: ESCALATED_PATH,
|
13532
|
-
// align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13533
|
-
// },
|
13534
|
-
// style: {
|
13535
|
-
// fill: this._session.getAccent(900)
|
13536
|
-
// },
|
13537
|
-
// addInfo: {
|
13538
|
-
// indicator: true,
|
13539
|
-
// parentId: nod.id
|
13540
|
-
// } as NodeInfoModel
|
13541
|
-
// } as NodeModel;
|
13542
|
-
// indicators.push(escalateIndicator);
|
13543
|
-
// }
|
13531
|
+
};
|
13532
|
+
indicators.push(escalateIndicator);
|
13533
|
+
}
|
13544
13534
|
}
|
13545
13535
|
}
|
13546
13536
|
else {
|
@@ -13607,36 +13597,6 @@ class FlowViewComponent extends TraceBase {
|
|
13607
13597
|
}
|
13608
13598
|
}
|
13609
13599
|
}
|
13610
|
-
/**
|
13611
|
-
*
|
13612
|
-
* @param connector
|
13613
|
-
* @param index
|
13614
|
-
* @param vconnectors
|
13615
|
-
*/
|
13616
|
-
function reroute(connector, index) {
|
13617
|
-
while (index < dconnectors.length) {
|
13618
|
-
let dconnector = dconnectors[index];
|
13619
|
-
if (dconnector.sourceId === connector.targetId) {
|
13620
|
-
if (nodes.some(n => n.id === dconnector.targetId))
|
13621
|
-
connectors.push({
|
13622
|
-
sourceID: connector.sourceId,
|
13623
|
-
targetID: dconnector.targetId,
|
13624
|
-
addInfo: {
|
13625
|
-
estimate: dconnector.estimate,
|
13626
|
-
time: dconnector.time
|
13627
|
-
}
|
13628
|
-
});
|
13629
|
-
else
|
13630
|
-
reroute({
|
13631
|
-
time: dconnector.time,
|
13632
|
-
targetId: dconnector.targetId,
|
13633
|
-
estimate: dconnector.estimate,
|
13634
|
-
sourceId: connector.sourceId
|
13635
|
-
}, index + 1);
|
13636
|
-
}
|
13637
|
-
index++;
|
13638
|
-
}
|
13639
|
-
}
|
13640
13600
|
return { connectors, nodes, indicators };
|
13641
13601
|
});
|
13642
13602
|
}
|
@@ -13654,7 +13614,7 @@ class FlowViewComponent extends TraceBase {
|
|
13654
13614
|
const stateLog = log.find(l => l.type === 'StateChange');
|
13655
13615
|
if (stateLog) {
|
13656
13616
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
13657
|
-
annotation =
|
13617
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
13658
13618
|
}
|
13659
13619
|
if (node.type === START_NODE) {
|
13660
13620
|
if (!node.estimate) {
|
@@ -13676,8 +13636,8 @@ class FlowViewComponent extends TraceBase {
|
|
13676
13636
|
const { min, max } = super._estimateTime(node);
|
13677
13637
|
if (max)
|
13678
13638
|
return !min || min === max ?
|
13679
|
-
this._translate.get('EstimateTime',
|
13680
|
-
this._translate.get('EstimateTimeRange',
|
13639
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
13640
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
13681
13641
|
}
|
13682
13642
|
_tooltip(obj) {
|
13683
13643
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
@@ -13834,11 +13794,25 @@ class FlowViewComponent extends TraceBase {
|
|
13834
13794
|
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
13835
13795
|
}
|
13836
13796
|
}
|
13837
|
-
|
13838
|
-
|
13797
|
+
if (recipient.originId) {
|
13798
|
+
const origin = this.model.recipients.find(r => r.id === recipient.originId);
|
13799
|
+
if (origin.toId) {
|
13800
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action);
|
13801
|
+
const id = origin.byId || origin.userId, name = action.adjective || action.past || action.title;
|
13802
|
+
if (id === this._session.userId) {
|
13803
|
+
tooltip.substituting = this._translate.get('ByYou', name);
|
13804
|
+
}
|
13805
|
+
else {
|
13806
|
+
const who = yield this._accounts.get(id).toPromise();
|
13807
|
+
tooltip.substituting = this._translate.get('By', who.name, name);
|
13808
|
+
}
|
13809
|
+
}
|
13810
|
+
}
|
13811
|
+
if (recipient.escalated) {
|
13812
|
+
const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
13839
13813
|
const userIds = escalations.map(e => e.userId);
|
13840
13814
|
const users = yield this._accounts.getAll(userIds).toPromise();
|
13841
|
-
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].
|
13815
|
+
const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
|
13842
13816
|
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
13843
13817
|
}
|
13844
13818
|
if (recipient.replied) {
|
@@ -14174,30 +14148,28 @@ class TraceViewComponent extends TraceBase {
|
|
14174
14148
|
step.role = by.role;
|
14175
14149
|
}
|
14176
14150
|
}
|
14177
|
-
else {
|
14151
|
+
else if (recipient.escalated) {
|
14178
14152
|
let escalations = this.model.log.filter(l => l.time > issued &&
|
14179
14153
|
l.type === 'Escalation' && l.recipientId === recipient.id);
|
14180
|
-
|
14181
|
-
|
14182
|
-
|
14183
|
-
|
14184
|
-
escalate.push(who);
|
14185
|
-
}
|
14186
|
-
let who = yield profileOf(recipient.userId);
|
14187
|
-
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14188
|
-
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14189
|
-
else
|
14190
|
-
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14154
|
+
let escalate = [];
|
14155
|
+
for (let escalation of escalations) {
|
14156
|
+
let who = yield profileOf(escalation.userId);
|
14157
|
+
escalate.push(who);
|
14191
14158
|
}
|
14159
|
+
let who = yield profileOf(recipient.userId);
|
14160
|
+
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14161
|
+
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14162
|
+
else
|
14163
|
+
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14164
|
+
}
|
14165
|
+
else {
|
14166
|
+
if (recipient.userId === this._session.userId)
|
14167
|
+
step.name = this._translate.get('You');
|
14192
14168
|
else {
|
14193
|
-
|
14194
|
-
|
14195
|
-
|
14196
|
-
|
14197
|
-
step.name = nameOf(who);
|
14198
|
-
if (who.role)
|
14199
|
-
step.role = who.role;
|
14200
|
-
}
|
14169
|
+
let who = yield profileOf(recipient.userId);
|
14170
|
+
step.name = nameOf(who);
|
14171
|
+
if (who.role)
|
14172
|
+
step.role = who.role;
|
14201
14173
|
}
|
14202
14174
|
}
|
14203
14175
|
trace.push(step);
|
@@ -14798,7 +14770,7 @@ class CubeMatrixComponent {
|
|
14798
14770
|
this.refresh();
|
14799
14771
|
}
|
14800
14772
|
_addindices() {
|
14801
|
-
const collection = this.indexAt === '
|
14773
|
+
const collection = this.indexAt === 'xAxis' ? this.columns : this.rows;
|
14802
14774
|
this.indices.forEach((x, i) => {
|
14803
14775
|
const header = {
|
14804
14776
|
key: x.name,
|
@@ -14806,10 +14778,10 @@ class CubeMatrixComponent {
|
|
14806
14778
|
index: x,
|
14807
14779
|
accumulate: x.accumulate
|
14808
14780
|
};
|
14809
|
-
if (this.placeAt === '
|
14810
|
-
collection.splice(i, 0, header);
|
14811
|
-
else
|
14781
|
+
if (this.placeAt === 'trailing')
|
14812
14782
|
collection.push(header);
|
14783
|
+
else
|
14784
|
+
collection.splice(i, 0, header);
|
14813
14785
|
});
|
14814
14786
|
}
|
14815
14787
|
_addsumheaders() {
|
@@ -14875,17 +14847,17 @@ class CubeMatrixComponent {
|
|
14875
14847
|
const d = {};
|
14876
14848
|
series.forEach(s => {
|
14877
14849
|
if (s.index) {
|
14878
|
-
if (this.indexAt === '
|
14879
|
-
const row = d[s.index] = {};
|
14880
|
-
s.points.forEach(p => row[p.x] = p.y);
|
14881
|
-
}
|
14882
|
-
else
|
14850
|
+
if (this.indexAt === 'xAxis')
|
14883
14851
|
s.points.forEach(p => {
|
14884
14852
|
let row = d[p.x];
|
14885
14853
|
if (!row)
|
14886
14854
|
row = d[p.x] = {};
|
14887
14855
|
row[s.index] = p.y;
|
14888
14856
|
});
|
14857
|
+
else {
|
14858
|
+
const row = d[s.index] = {};
|
14859
|
+
s.points.forEach(p => row[p.x] = p.y);
|
14860
|
+
}
|
14889
14861
|
}
|
14890
14862
|
else {
|
14891
14863
|
const row = d[s.name] = {};
|
@@ -14908,20 +14880,20 @@ class CubeMatrixComponent {
|
|
14908
14880
|
this.rows.forEach(r => {
|
14909
14881
|
const datarow = data[r.key];
|
14910
14882
|
if (datarow) {
|
14911
|
-
let
|
14883
|
+
let columnTotal = 0;
|
14912
14884
|
this.columns.forEach(c => {
|
14913
14885
|
if (c.accumulate === false || c.sum !== undefined)
|
14914
14886
|
return;
|
14915
14887
|
let val = datarow[c.key];
|
14916
14888
|
if (val !== undefined)
|
14917
|
-
|
14889
|
+
columnTotal += this.indices.length === 0 || this.indexAt !== 'xAxis' ||
|
14918
14890
|
c.index !== undefined ? val : -val;
|
14919
14891
|
});
|
14920
|
-
datarow['_total'] = this._format(
|
14892
|
+
datarow['_total'] = this._format(columnTotal, r);
|
14921
14893
|
if (!r.sum)
|
14922
14894
|
grand += this.indices.length === 0 ||
|
14923
14895
|
this.indexAt === 'xAxis' ||
|
14924
|
-
r.index !== undefined ?
|
14896
|
+
r.index !== undefined ? columnTotal : -columnTotal;
|
14925
14897
|
}
|
14926
14898
|
else
|
14927
14899
|
data[r.key] = {
|
@@ -14931,16 +14903,16 @@ class CubeMatrixComponent {
|
|
14931
14903
|
const totals = data['_total'] = this.totals = {};
|
14932
14904
|
totals['_grand'] = this._format(grand);
|
14933
14905
|
this.columns.forEach(c => {
|
14934
|
-
let
|
14906
|
+
let rowTotal = 0;
|
14935
14907
|
this.rows.forEach(row => {
|
14936
14908
|
if (row.accumulate === false || row.sum !== undefined)
|
14937
14909
|
return;
|
14938
14910
|
const val = data[row.key][c.key];
|
14939
14911
|
if (val !== undefined)
|
14940
|
-
|
14912
|
+
rowTotal += this.indices.length === 0 || this.indexAt === 'xAxis' ||
|
14941
14913
|
row.index !== undefined ? val : -val;
|
14942
14914
|
});
|
14943
|
-
totals[c.key] = this._format(
|
14915
|
+
totals[c.key] = this._format(rowTotal, c);
|
14944
14916
|
});
|
14945
14917
|
}
|
14946
14918
|
_calculatesum(data) {
|
@@ -17324,7 +17296,7 @@ class HomeBase {
|
|
17324
17296
|
this._messaging.new$.subscribe(m => {
|
17325
17297
|
const { model: { formId: name, subject, number } } = m;
|
17326
17298
|
const form = this._session.profile.forms.find(f => f.name === name), msg = this._translate.get('NewMail', form.title, number, subject || '');
|
17327
|
-
this._snackBar.open(msg, this._translate.get('OpenNew'), {
|
17299
|
+
this._snackBar.open(msg, m.userId === this._session.profile.userId ? this._translate.get('OpenNew') : null, {
|
17328
17300
|
duration: 5000,
|
17329
17301
|
direction: this._session.direction,
|
17330
17302
|
politeness: 'assertive'
|
@@ -18778,7 +18750,7 @@ class SlotsComponent {
|
|
18778
18750
|
}
|
18779
18751
|
}
|
18780
18752
|
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: SlotsComponent, deps: [{ token: PANES_DATA }, { token: PromptService }, { token: SessionService }, { token: i0.ChangeDetectorRef }, { token: PanesRouter }, { token: WindowTitleService }, { token: GuideService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
18781
|
-
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: SlotsComponent, selector: "bizdoc-panes", host: { listeners: { "document:keydown.escape": "collapse()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["paning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"
|
18753
|
+
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: SlotsComponent, selector: "bizdoc-panes", host: { listeners: { "document:keydown.escape": "collapse()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["paning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #paning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let p of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"p.badge\" [matBadgeHidden]=\"!p.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{p.icon}}</mat-icon> \r\n {{p.title}}\r\n <mat-icon *ngIf=\"p.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\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: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: QuickToolsComponent, selector: "bizdoc-quicktools" }, { type: i9$3.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { type: NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { type: i9$3.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { type: i13.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": TranslatePipe }, animations: [panesAnimation,
|
18782
18754
|
panesTitleAnimation,
|
18783
18755
|
paneAnimation,
|
18784
18756
|
paramAnimation,
|
@@ -18795,7 +18767,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
18795
18767
|
queryAnimation,
|
18796
18768
|
tabsAnimation,
|
18797
18769
|
tabAnimation
|
18798
|
-
], template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"
|
18770
|
+
], template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #paning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let p of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"p.badge\" [matBadgeHidden]=\"!p.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{p.icon}}</mat-icon> \r\n {{p.title}}\r\n <mat-icon *ngIf=\"p.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"] }]
|
18799
18771
|
}], ctorParameters: function () {
|
18800
18772
|
return [{ type: undefined, decorators: [{
|
18801
18773
|
type: Inject,
|
@@ -26551,7 +26523,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
26551
26523
|
args: ['attr.aria-describedby']
|
26552
26524
|
}] } });
|
26553
26525
|
|
26554
|
-
|
26526
|
+
// https://day.js.org/docs/en/customization/relative-time
|
26527
|
+
dayjs.extend(relativeTime, {
|
26528
|
+
thresholds: [
|
26529
|
+
{ l: 's', r: 1 },
|
26530
|
+
{ l: 'm', r: 1 },
|
26531
|
+
{ l: 'mm', r: 59, d: 'minute' },
|
26532
|
+
{ l: 'h', r: 1 },
|
26533
|
+
{ l: 'hh', r: 24, d: 'hour' },
|
26534
|
+
{ l: 'd', r: 1 },
|
26535
|
+
{ l: 'dd', r: 29, d: 'day' },
|
26536
|
+
{ l: 'M', r: 1 },
|
26537
|
+
{ l: 'MM', r: 11, d: 'month' },
|
26538
|
+
{ l: 'y' },
|
26539
|
+
{ l: 'yy', d: 'year' }
|
26540
|
+
]
|
26541
|
+
});
|
26555
26542
|
dayjs.extend(duration);
|
26556
26543
|
dayjs.extend(calendar);
|
26557
26544
|
const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, CubeChartViewComponent, CubeDocumentSumComponent, CubeDocumentMatrixComponent, CubeDocumentViewComponent, CubePivotViewComponent, TimelineViewComponent,
|
@@ -26936,33 +26923,31 @@ class TraceElementComponent {
|
|
26936
26923
|
this.nodeType = this._session.profile.nodes.find(n => n.name === addInfo.nodeType);
|
26937
26924
|
}
|
26938
26925
|
recipientInfo(recipient) {
|
26939
|
-
|
26940
|
-
|
26941
|
-
|
26942
|
-
|
26943
|
-
|
26944
|
-
const
|
26945
|
-
|
26946
|
-
}
|
26947
|
-
|
26948
|
-
|
26949
|
-
|
26950
|
-
|
26951
|
-
|
26952
|
-
|
26953
|
-
|
26954
|
-
|
26955
|
-
|
26956
|
-
if (
|
26957
|
-
|
26958
|
-
|
26959
|
-
|
26960
|
-
else
|
26961
|
-
|
26962
|
-
|
26963
|
-
|
26964
|
-
return us[0];
|
26965
|
-
}));
|
26926
|
+
return __awaiter(this, void 0, void 0, function* () {
|
26927
|
+
const info = [];
|
26928
|
+
const who = yield this._accounts.get(recipient.userId).toPromise();
|
26929
|
+
if (recipient.escalated) {
|
26930
|
+
const escalations = this.timeline.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
26931
|
+
const escalate = yield this._accounts.get(escalations[0].userId).toPromise();
|
26932
|
+
info.push(this._translate.get('EscalatedBy', this._chat.format(escalate), this._chat.format(who)));
|
26933
|
+
}
|
26934
|
+
if (recipient.substitutingId) {
|
26935
|
+
const substitute = yield this._accounts.get(recipient.substitutingId).toPromise();
|
26936
|
+
if (recipient.byId) {
|
26937
|
+
const by = yield this._accounts.get(recipient.byId).toPromise();
|
26938
|
+
info.push(this._translate.get('SubstitutingBy', this._chat.format(who), this._chat.format(substitute), this._chat.format(by)));
|
26939
|
+
}
|
26940
|
+
else
|
26941
|
+
info.push(this._translate.get('Substituting', this._chat.format(who), this._chat.format(substitute)));
|
26942
|
+
}
|
26943
|
+
else if (recipient.byId) {
|
26944
|
+
const by = yield this._accounts.get(recipient.byId).toPromise();
|
26945
|
+
info.push(this._translate.get('By', this._chat.format(who), this._chat.format(by)));
|
26946
|
+
}
|
26947
|
+
else
|
26948
|
+
info.push(this._chat.format(who));
|
26949
|
+
return info.join(this._translate.comma);
|
26950
|
+
});
|
26966
26951
|
}
|
26967
26952
|
logInfo(log) {
|
26968
26953
|
const observables = [];
|