@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/fesm2020/bizdoc-core.mjs
CHANGED
@@ -127,7 +127,7 @@ import { Spreadsheet, isNumber, SpreadsheetModule, SelectionService as Selection
|
|
127
127
|
import * as i4$1 from '@ctrl/ngx-emoji-mart';
|
128
128
|
import { PickerModule } from '@ctrl/ngx-emoji-mart';
|
129
129
|
import * as i11$1 from '@syncfusion/ej2-angular-diagrams';
|
130
|
-
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';
|
130
|
+
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';
|
131
131
|
import * as i9$2 from '@syncfusion/ej2-angular-schedule';
|
132
132
|
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';
|
133
133
|
import * as i10$2 from '@syncfusion/ej2-angular-kanban';
|
@@ -1239,6 +1239,8 @@ class MailboxService {
|
|
1239
1239
|
};
|
1240
1240
|
messaging.new$.
|
1241
1241
|
subscribe(m => {
|
1242
|
+
if (m.userId !== _session.profile.userId)
|
1243
|
+
return;
|
1242
1244
|
_session.profile.inboxCount++;
|
1243
1245
|
const folder = _session.profile.folders.find(f => f.name === m.model.folderId);
|
1244
1246
|
folder.count++;
|
@@ -1923,7 +1925,7 @@ const STRINGS = {
|
|
1923
1925
|
NoEstimate: '(No estimate)',
|
1924
1926
|
EstimateTime: '(Estimated time {0})',
|
1925
1927
|
NodeStandardTime: '(Standard time: {0})',
|
1926
|
-
EstimateTimeRange: '(Estimated time {0}
|
1928
|
+
EstimateTimeRange: '(Estimated time between {0} and {1})',
|
1927
1929
|
Connect: 'Connect',
|
1928
1930
|
Requirments: 'Requirments',
|
1929
1931
|
Anyone: 'Anyone',
|
@@ -6928,7 +6930,7 @@ class ExpandedItemComponent {
|
|
6928
6930
|
this._refreshTask = setInterval(() => this._refresh(), REFRESH_TIME);
|
6929
6931
|
}
|
6930
6932
|
async _note() {
|
6931
|
-
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId } = this.item;
|
6933
|
+
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId, escalated } = this.item;
|
6932
6934
|
if (substitutingId) {
|
6933
6935
|
this._accounts.get(substitutingId).subscribe(u => {
|
6934
6936
|
if (replied) {
|
@@ -6938,19 +6940,15 @@ class ExpandedItemComponent {
|
|
6938
6940
|
else
|
6939
6941
|
this.note = this._translate.personalize('YouSubstituteActionTaken', u.gender, adjective, this._formatUserElement(u), time);
|
6940
6942
|
}
|
6943
|
+
else if (escalated) {
|
6944
|
+
const escalations = log.filter(l => l.time > issued &&
|
6945
|
+
l.type === 'Escalation'
|
6946
|
+
&& l.recipientId === id);
|
6947
|
+
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(escalations[0].duration));
|
6948
|
+
}
|
6941
6949
|
else {
|
6942
|
-
const
|
6943
|
-
|
6944
|
-
l.type === 'Escalation'
|
6945
|
-
&& l.recipientId === id);
|
6946
|
-
if (escalations && escalations.length) {
|
6947
|
-
const duration = dayjs(escalations[0].time).diff(received, 's');
|
6948
|
-
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(duration));
|
6949
|
-
}
|
6950
|
-
else {
|
6951
|
-
const time = this._fromNow(received);
|
6952
|
-
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6953
|
-
}
|
6950
|
+
const time = this._fromNow(received);
|
6951
|
+
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6954
6952
|
}
|
6955
6953
|
});
|
6956
6954
|
}
|
@@ -6959,9 +6957,9 @@ class ExpandedItemComponent {
|
|
6959
6957
|
if (byId) {
|
6960
6958
|
if (byId === this._session.profile.byId) {
|
6961
6959
|
if (toId)
|
6962
|
-
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('
|
6960
|
+
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('ActionTakenByYouTo', this._actionName(action, 'you'), this._formatUserElement(u), this._session.profile.name, time));
|
6963
6961
|
else
|
6964
|
-
this.note = this._translate.get('
|
6962
|
+
this.note = this._translate.get('ActionTakenByYou', this._actionName(action, 'you'), this._session.profile.name, time);
|
6965
6963
|
}
|
6966
6964
|
else
|
6967
6965
|
this._accounts.get(byId).subscribe(u => {
|
@@ -7245,7 +7243,7 @@ class BrowseItemsComponent {
|
|
7245
7243
|
this._remove(item);
|
7246
7244
|
});
|
7247
7245
|
this._messaging.new$.pipe(takeUntil(this._destroy)).subscribe(m => {
|
7248
|
-
if (!this.dataSource)
|
7246
|
+
if (!this.dataSource || m.userId !== this._session.profile.userId)
|
7249
7247
|
return;
|
7250
7248
|
const item = this.dataSource.data.find(c => c.id === m.model.id);
|
7251
7249
|
if (!item && this.folderId === m.model.folderId) {
|
@@ -8450,7 +8448,7 @@ class ComposeFormComponent {
|
|
8450
8448
|
return this._mailbox.send(id, version, formId, model, action, params).
|
8451
8449
|
subscribe(r => {
|
8452
8450
|
if (r.toId)
|
8453
|
-
this._accounts.get(r.toId).subscribe(u => this._sb.toast('
|
8451
|
+
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, this._getActionAdjective(action), u.name));
|
8454
8452
|
else
|
8455
8453
|
this._sb.toast('Sent', number, this._getActionAdjective(action));
|
8456
8454
|
this.working = false;
|
@@ -11925,6 +11923,7 @@ class ExploreItemsComponent {
|
|
11925
11923
|
});
|
11926
11924
|
}
|
11927
11925
|
_datasource(data) {
|
11926
|
+
this._data = data;
|
11928
11927
|
this.dataSource = new MatTableDataSource(data);
|
11929
11928
|
this.dataSource.sort = this.sort;
|
11930
11929
|
this.dataSource.paginator = this.paginator;
|
@@ -11949,7 +11948,7 @@ class ExploreItemsComponent {
|
|
11949
11948
|
}
|
11950
11949
|
}))
|
11951
11950
|
}];
|
11952
|
-
this.
|
11951
|
+
this._data.forEach((r, i) => rows.push({
|
11953
11952
|
index: i + 2,
|
11954
11953
|
cells: this.columns.map((c, j) => {
|
11955
11954
|
const isnumber = c.type === 'Currency' || c.type === 'Number';
|
@@ -12054,6 +12053,7 @@ class CubeExplorePaneComponent {
|
|
12054
12053
|
relativeTo: this._pane,
|
12055
12054
|
queryParams: this.axes,
|
12056
12055
|
state: { item },
|
12056
|
+
policy: OpenPolicy.Tab | OpenPolicy.Dismissable,
|
12057
12057
|
group: this._pane.group
|
12058
12058
|
});
|
12059
12059
|
this.loading = false;
|
@@ -13173,8 +13173,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
13173
13173
|
args: [{ name: 'amDurationFormat' }]
|
13174
13174
|
}], ctorParameters: function () { return [{ type: TranslateService }]; } });
|
13175
13175
|
|
13176
|
-
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13177
|
-
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',
|
13176
|
+
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13177
|
+
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',
|
13178
|
+
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';
|
13178
13179
|
/** flow-view component*/
|
13179
13180
|
class FlowViewComponent extends TraceBase {
|
13180
13181
|
/** workflow-view ctor */
|
@@ -13196,13 +13197,15 @@ class FlowViewComponent extends TraceBase {
|
|
13196
13197
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
13197
13198
|
horizontalSpacing: 50,
|
13198
13199
|
verticalSpacing: 50,
|
13199
|
-
|
13200
|
+
//connectorSegments: 'Layout',
|
13201
|
+
//arrangement: ChildArrangement.Linear,
|
13202
|
+
horizontalAlignment: 'Center',
|
13200
13203
|
connectionDirection: 'Orientation',
|
13201
13204
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
13202
|
-
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
13203
13205
|
};
|
13204
13206
|
this.scrollSettings = {
|
13205
13207
|
minZoom: .5,
|
13208
|
+
scrollLimit: 'Limited',
|
13206
13209
|
canAutoScroll: true,
|
13207
13210
|
currentZoom: 1.2,
|
13208
13211
|
padding: { top: 0, bottom: 0 },
|
@@ -13285,7 +13288,6 @@ class FlowViewComponent extends TraceBase {
|
|
13285
13288
|
obj.style.strokeWidth = 0;
|
13286
13289
|
}
|
13287
13290
|
else {
|
13288
|
-
// obj.shape = { type: 'Bpmn', shape: 'Event' } as BpmnShapeModel;
|
13289
13291
|
obj.width = obj.height = 50;
|
13290
13292
|
if (obj.annotations && obj.annotations.length)
|
13291
13293
|
obj.annotations[0].style.color = this._session.theme.dark ? 'white' : 'black';
|
@@ -13296,7 +13298,8 @@ class FlowViewComponent extends TraceBase {
|
|
13296
13298
|
}
|
13297
13299
|
else {
|
13298
13300
|
obj.style.strokeColor = this._accentColor;
|
13299
|
-
obj.style.fill = recipient && recipient.pending ?
|
13301
|
+
obj.style.fill = recipient && recipient.pending ?
|
13302
|
+
this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : 'transparent';
|
13300
13303
|
}
|
13301
13304
|
obj.style.strokeWidth = 2;
|
13302
13305
|
}
|
@@ -13391,7 +13394,7 @@ class FlowViewComponent extends TraceBase {
|
|
13391
13394
|
}
|
13392
13395
|
}]
|
13393
13396
|
};
|
13394
|
-
if (r > 0)
|
13397
|
+
if (r > 0)
|
13395
13398
|
dconnectors.forEach(c => {
|
13396
13399
|
if (c.targetId === node.id)
|
13397
13400
|
connectors.push({
|
@@ -13401,7 +13404,10 @@ class FlowViewComponent extends TraceBase {
|
|
13401
13404
|
estimate: c.estimate
|
13402
13405
|
}
|
13403
13406
|
});
|
13404
|
-
if (c.sourceId === node.id)
|
13407
|
+
if (c.sourceId === node.id) {
|
13408
|
+
//
|
13409
|
+
if (c.virtual && c.originId !== recipient.id)
|
13410
|
+
return;
|
13405
13411
|
connectors.push({
|
13406
13412
|
sourceID: nod.id,
|
13407
13413
|
targetID: c.targetId,
|
@@ -13409,8 +13415,8 @@ class FlowViewComponent extends TraceBase {
|
|
13409
13415
|
estimate: c.estimate
|
13410
13416
|
}
|
13411
13417
|
});
|
13418
|
+
}
|
13412
13419
|
});
|
13413
|
-
}
|
13414
13420
|
nodes.push(nod);
|
13415
13421
|
if (recipient.action) {
|
13416
13422
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
@@ -13433,56 +13439,40 @@ class FlowViewComponent extends TraceBase {
|
|
13433
13439
|
indicators.push(actionIndicator);
|
13434
13440
|
}
|
13435
13441
|
}
|
13436
|
-
if (recipient.
|
13442
|
+
if (recipient.fyi)
|
13437
13443
|
indicators.push({
|
13438
|
-
id: nod.id + '
|
13444
|
+
id: nod.id + 'fyi',
|
13439
13445
|
shape: {
|
13440
13446
|
type: 'Path',
|
13441
|
-
data:
|
13442
|
-
align: this._session.inverse ? '
|
13447
|
+
data: FYI_PATH,
|
13448
|
+
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13443
13449
|
},
|
13444
13450
|
style: {
|
13445
|
-
fill:
|
13451
|
+
fill: '#1976d2'
|
13446
13452
|
},
|
13447
13453
|
addInfo: {
|
13448
13454
|
indicator: true,
|
13449
13455
|
parentId: nod.id
|
13450
13456
|
}
|
13451
13457
|
});
|
13452
|
-
if (recipient.
|
13453
|
-
|
13454
|
-
id: nod.id + '
|
13458
|
+
if (recipient.escalated) {
|
13459
|
+
const escalateIndicator = {
|
13460
|
+
id: nod.id + 'escalate',
|
13455
13461
|
shape: {
|
13456
13462
|
type: 'Path',
|
13457
|
-
data:
|
13463
|
+
data: ESCALATED_PATH,
|
13458
13464
|
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13459
13465
|
},
|
13460
13466
|
style: {
|
13461
|
-
fill:
|
13467
|
+
fill: this._session.getAccent(900)
|
13462
13468
|
},
|
13463
13469
|
addInfo: {
|
13464
13470
|
indicator: true,
|
13465
13471
|
parentId: nod.id
|
13466
13472
|
}
|
13467
|
-
}
|
13468
|
-
|
13469
|
-
|
13470
|
-
// id: nod.id + 'escalate',
|
13471
|
-
// shape: {
|
13472
|
-
// type: 'Path',
|
13473
|
-
// data: ESCALATED_PATH,
|
13474
|
-
// align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13475
|
-
// },
|
13476
|
-
// style: {
|
13477
|
-
// fill: this._session.getAccent(900)
|
13478
|
-
// },
|
13479
|
-
// addInfo: {
|
13480
|
-
// indicator: true,
|
13481
|
-
// parentId: nod.id
|
13482
|
-
// } as NodeInfoModel
|
13483
|
-
// } as NodeModel;
|
13484
|
-
// indicators.push(escalateIndicator);
|
13485
|
-
// }
|
13473
|
+
};
|
13474
|
+
indicators.push(escalateIndicator);
|
13475
|
+
}
|
13486
13476
|
}
|
13487
13477
|
}
|
13488
13478
|
else {
|
@@ -13549,36 +13539,6 @@ class FlowViewComponent extends TraceBase {
|
|
13549
13539
|
}
|
13550
13540
|
}
|
13551
13541
|
}
|
13552
|
-
/**
|
13553
|
-
*
|
13554
|
-
* @param connector
|
13555
|
-
* @param index
|
13556
|
-
* @param vconnectors
|
13557
|
-
*/
|
13558
|
-
function reroute(connector, index) {
|
13559
|
-
while (index < dconnectors.length) {
|
13560
|
-
let dconnector = dconnectors[index];
|
13561
|
-
if (dconnector.sourceId === connector.targetId) {
|
13562
|
-
if (nodes.some(n => n.id === dconnector.targetId))
|
13563
|
-
connectors.push({
|
13564
|
-
sourceID: connector.sourceId,
|
13565
|
-
targetID: dconnector.targetId,
|
13566
|
-
addInfo: {
|
13567
|
-
estimate: dconnector.estimate,
|
13568
|
-
time: dconnector.time
|
13569
|
-
}
|
13570
|
-
});
|
13571
|
-
else
|
13572
|
-
reroute({
|
13573
|
-
time: dconnector.time,
|
13574
|
-
targetId: dconnector.targetId,
|
13575
|
-
estimate: dconnector.estimate,
|
13576
|
-
sourceId: connector.sourceId
|
13577
|
-
}, index + 1);
|
13578
|
-
}
|
13579
|
-
index++;
|
13580
|
-
}
|
13581
|
-
}
|
13582
13542
|
return { connectors, nodes, indicators };
|
13583
13543
|
}
|
13584
13544
|
/**
|
@@ -13594,7 +13554,7 @@ class FlowViewComponent extends TraceBase {
|
|
13594
13554
|
const stateLog = log.find(l => l.type === 'StateChange');
|
13595
13555
|
if (stateLog) {
|
13596
13556
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
13597
|
-
annotation =
|
13557
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
13598
13558
|
}
|
13599
13559
|
if (node.type === START_NODE) {
|
13600
13560
|
if (!node.estimate) {
|
@@ -13615,8 +13575,8 @@ class FlowViewComponent extends TraceBase {
|
|
13615
13575
|
const { min, max } = super._estimateTime(node);
|
13616
13576
|
if (max)
|
13617
13577
|
return !min || min === max ?
|
13618
|
-
this._translate.get('EstimateTime',
|
13619
|
-
this._translate.get('EstimateTimeRange',
|
13578
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
13579
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
13620
13580
|
}
|
13621
13581
|
_tooltip(obj) {
|
13622
13582
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
@@ -13770,11 +13730,25 @@ class FlowViewComponent extends TraceBase {
|
|
13770
13730
|
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
13771
13731
|
}
|
13772
13732
|
}
|
13773
|
-
|
13774
|
-
|
13733
|
+
if (recipient.originId) {
|
13734
|
+
const origin = this.model.recipients.find(r => r.id === recipient.originId);
|
13735
|
+
if (origin.toId) {
|
13736
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action);
|
13737
|
+
const id = origin.byId || origin.userId, name = action.adjective || action.past || action.title;
|
13738
|
+
if (id === this._session.userId) {
|
13739
|
+
tooltip.substituting = this._translate.get('ByYou', name);
|
13740
|
+
}
|
13741
|
+
else {
|
13742
|
+
const who = await this._accounts.get(id).toPromise();
|
13743
|
+
tooltip.substituting = this._translate.get('By', who.name, name);
|
13744
|
+
}
|
13745
|
+
}
|
13746
|
+
}
|
13747
|
+
if (recipient.escalated) {
|
13748
|
+
const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
13775
13749
|
const userIds = escalations.map(e => e.userId);
|
13776
13750
|
const users = await this._accounts.getAll(userIds).toPromise();
|
13777
|
-
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].
|
13751
|
+
const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
|
13778
13752
|
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
13779
13753
|
}
|
13780
13754
|
if (recipient.replied) {
|
@@ -14103,30 +14077,28 @@ class TraceViewComponent extends TraceBase {
|
|
14103
14077
|
step.role = by.role;
|
14104
14078
|
}
|
14105
14079
|
}
|
14106
|
-
else {
|
14080
|
+
else if (recipient.escalated) {
|
14107
14081
|
let escalations = this.model.log.filter(l => l.time > issued &&
|
14108
14082
|
l.type === 'Escalation' && l.recipientId === recipient.id);
|
14109
|
-
|
14110
|
-
|
14111
|
-
|
14112
|
-
|
14113
|
-
escalate.push(who);
|
14114
|
-
}
|
14115
|
-
let who = await profileOf(recipient.userId);
|
14116
|
-
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14117
|
-
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14118
|
-
else
|
14119
|
-
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14083
|
+
let escalate = [];
|
14084
|
+
for (let escalation of escalations) {
|
14085
|
+
let who = await profileOf(escalation.userId);
|
14086
|
+
escalate.push(who);
|
14120
14087
|
}
|
14088
|
+
let who = await profileOf(recipient.userId);
|
14089
|
+
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14090
|
+
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14091
|
+
else
|
14092
|
+
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14093
|
+
}
|
14094
|
+
else {
|
14095
|
+
if (recipient.userId === this._session.userId)
|
14096
|
+
step.name = this._translate.get('You');
|
14121
14097
|
else {
|
14122
|
-
|
14123
|
-
|
14124
|
-
|
14125
|
-
|
14126
|
-
step.name = nameOf(who);
|
14127
|
-
if (who.role)
|
14128
|
-
step.role = who.role;
|
14129
|
-
}
|
14098
|
+
let who = await profileOf(recipient.userId);
|
14099
|
+
step.name = nameOf(who);
|
14100
|
+
if (who.role)
|
14101
|
+
step.role = who.role;
|
14130
14102
|
}
|
14131
14103
|
}
|
14132
14104
|
trace.push(step);
|
@@ -14729,7 +14701,7 @@ class CubeMatrixComponent {
|
|
14729
14701
|
this.refresh();
|
14730
14702
|
}
|
14731
14703
|
_addindices() {
|
14732
|
-
const collection = this.indexAt === '
|
14704
|
+
const collection = this.indexAt === 'xAxis' ? this.columns : this.rows;
|
14733
14705
|
this.indices.forEach((x, i) => {
|
14734
14706
|
const header = {
|
14735
14707
|
key: x.name,
|
@@ -14737,10 +14709,10 @@ class CubeMatrixComponent {
|
|
14737
14709
|
index: x,
|
14738
14710
|
accumulate: x.accumulate
|
14739
14711
|
};
|
14740
|
-
if (this.placeAt === '
|
14741
|
-
collection.splice(i, 0, header);
|
14742
|
-
else
|
14712
|
+
if (this.placeAt === 'trailing')
|
14743
14713
|
collection.push(header);
|
14714
|
+
else
|
14715
|
+
collection.splice(i, 0, header);
|
14744
14716
|
});
|
14745
14717
|
}
|
14746
14718
|
_addsumheaders() {
|
@@ -14806,17 +14778,17 @@ class CubeMatrixComponent {
|
|
14806
14778
|
const d = {};
|
14807
14779
|
series.forEach(s => {
|
14808
14780
|
if (s.index) {
|
14809
|
-
if (this.indexAt === '
|
14810
|
-
const row = d[s.index] = {};
|
14811
|
-
s.points.forEach(p => row[p.x] = p.y);
|
14812
|
-
}
|
14813
|
-
else
|
14781
|
+
if (this.indexAt === 'xAxis')
|
14814
14782
|
s.points.forEach(p => {
|
14815
14783
|
let row = d[p.x];
|
14816
14784
|
if (!row)
|
14817
14785
|
row = d[p.x] = {};
|
14818
14786
|
row[s.index] = p.y;
|
14819
14787
|
});
|
14788
|
+
else {
|
14789
|
+
const row = d[s.index] = {};
|
14790
|
+
s.points.forEach(p => row[p.x] = p.y);
|
14791
|
+
}
|
14820
14792
|
}
|
14821
14793
|
else {
|
14822
14794
|
const row = d[s.name] = {};
|
@@ -14839,20 +14811,20 @@ class CubeMatrixComponent {
|
|
14839
14811
|
this.rows.forEach(r => {
|
14840
14812
|
const datarow = data[r.key];
|
14841
14813
|
if (datarow) {
|
14842
|
-
let
|
14814
|
+
let columnTotal = 0;
|
14843
14815
|
this.columns.forEach(c => {
|
14844
14816
|
if (c.accumulate === false || c.sum !== undefined)
|
14845
14817
|
return;
|
14846
14818
|
let val = datarow[c.key];
|
14847
14819
|
if (val !== undefined)
|
14848
|
-
|
14820
|
+
columnTotal += this.indices.length === 0 || this.indexAt !== 'xAxis' ||
|
14849
14821
|
c.index !== undefined ? val : -val;
|
14850
14822
|
});
|
14851
|
-
datarow['_total'] = this._format(
|
14823
|
+
datarow['_total'] = this._format(columnTotal, r);
|
14852
14824
|
if (!r.sum)
|
14853
14825
|
grand += this.indices.length === 0 ||
|
14854
14826
|
this.indexAt === 'xAxis' ||
|
14855
|
-
r.index !== undefined ?
|
14827
|
+
r.index !== undefined ? columnTotal : -columnTotal;
|
14856
14828
|
}
|
14857
14829
|
else
|
14858
14830
|
data[r.key] = {
|
@@ -14862,16 +14834,16 @@ class CubeMatrixComponent {
|
|
14862
14834
|
const totals = data['_total'] = this.totals = {};
|
14863
14835
|
totals['_grand'] = this._format(grand);
|
14864
14836
|
this.columns.forEach(c => {
|
14865
|
-
let
|
14837
|
+
let rowTotal = 0;
|
14866
14838
|
this.rows.forEach(row => {
|
14867
14839
|
if (row.accumulate === false || row.sum !== undefined)
|
14868
14840
|
return;
|
14869
14841
|
const val = data[row.key][c.key];
|
14870
14842
|
if (val !== undefined)
|
14871
|
-
|
14843
|
+
rowTotal += this.indices.length === 0 || this.indexAt === 'xAxis' ||
|
14872
14844
|
row.index !== undefined ? val : -val;
|
14873
14845
|
});
|
14874
|
-
totals[c.key] = this._format(
|
14846
|
+
totals[c.key] = this._format(rowTotal, c);
|
14875
14847
|
});
|
14876
14848
|
}
|
14877
14849
|
_calculatesum(data) {
|
@@ -17222,7 +17194,7 @@ class HomeBase {
|
|
17222
17194
|
this._messaging.new$.subscribe(m => {
|
17223
17195
|
const { model: { formId: name, subject, number } } = m;
|
17224
17196
|
const form = this._session.profile.forms.find(f => f.name === name), msg = this._translate.get('NewMail', form.title, number, subject || '');
|
17225
|
-
this._snackBar.open(msg, this._translate.get('OpenNew'), {
|
17197
|
+
this._snackBar.open(msg, m.userId === this._session.profile.userId ? this._translate.get('OpenNew') : null, {
|
17226
17198
|
duration: 5000,
|
17227
17199
|
direction: this._session.direction,
|
17228
17200
|
politeness: 'assertive'
|
@@ -18655,7 +18627,7 @@ class SlotsComponent {
|
|
18655
18627
|
}
|
18656
18628
|
}
|
18657
18629
|
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 });
|
18658
|
-
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=\"
|
18630
|
+
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,
|
18659
18631
|
panesTitleAnimation,
|
18660
18632
|
paneAnimation,
|
18661
18633
|
paramAnimation,
|
@@ -18672,7 +18644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
18672
18644
|
queryAnimation,
|
18673
18645
|
tabsAnimation,
|
18674
18646
|
tabAnimation
|
18675
|
-
], 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=\"
|
18647
|
+
], 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"] }]
|
18676
18648
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
18677
18649
|
type: Inject,
|
18678
18650
|
args: [PANES_DATA]
|
@@ -26377,7 +26349,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
26377
26349
|
args: ['attr.aria-describedby']
|
26378
26350
|
}] } });
|
26379
26351
|
|
26380
|
-
|
26352
|
+
// https://day.js.org/docs/en/customization/relative-time
|
26353
|
+
dayjs.extend(relativeTime, {
|
26354
|
+
thresholds: [
|
26355
|
+
{ l: 's', r: 1 },
|
26356
|
+
{ l: 'm', r: 1 },
|
26357
|
+
{ l: 'mm', r: 59, d: 'minute' },
|
26358
|
+
{ l: 'h', r: 1 },
|
26359
|
+
{ l: 'hh', r: 24, d: 'hour' },
|
26360
|
+
{ l: 'd', r: 1 },
|
26361
|
+
{ l: 'dd', r: 29, d: 'day' },
|
26362
|
+
{ l: 'M', r: 1 },
|
26363
|
+
{ l: 'MM', r: 11, d: 'month' },
|
26364
|
+
{ l: 'y' },
|
26365
|
+
{ l: 'yy', d: 'year' }
|
26366
|
+
]
|
26367
|
+
});
|
26381
26368
|
dayjs.extend(duration);
|
26382
26369
|
dayjs.extend(calendar);
|
26383
26370
|
const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, CubeChartViewComponent, CubeDocumentSumComponent, CubeDocumentMatrixComponent, CubeDocumentViewComponent, CubePivotViewComponent, TimelineViewComponent,
|
@@ -26759,34 +26746,30 @@ class TraceElementComponent {
|
|
26759
26746
|
this.none = log.length === 0,
|
26760
26747
|
this.nodeType = this._session.profile.nodes.find(n => n.name === addInfo.nodeType);
|
26761
26748
|
}
|
26762
|
-
recipientInfo(recipient) {
|
26763
|
-
const
|
26764
|
-
|
26765
|
-
|
26766
|
-
|
26767
|
-
escalations.
|
26768
|
-
|
26769
|
-
observables.push(observe);
|
26770
|
-
});
|
26771
|
-
else if (recipient.byId) {
|
26772
|
-
const observe = this._accounts.get(recipient.byId);
|
26773
|
-
observables.push(observe);
|
26749
|
+
async recipientInfo(recipient) {
|
26750
|
+
const info = [];
|
26751
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
26752
|
+
if (recipient.escalated) {
|
26753
|
+
const escalations = this.timeline.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
26754
|
+
const escalate = await this._accounts.get(escalations[0].userId).toPromise();
|
26755
|
+
info.push(this._translate.get('EscalatedBy', this._chat.format(escalate), this._chat.format(who)));
|
26774
26756
|
}
|
26775
26757
|
if (recipient.substitutingId) {
|
26776
|
-
const
|
26777
|
-
|
26758
|
+
const substitute = await this._accounts.get(recipient.substitutingId).toPromise();
|
26759
|
+
if (recipient.byId) {
|
26760
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26761
|
+
info.push(this._translate.get('SubstitutingBy', this._chat.format(who), this._chat.format(substitute), this._chat.format(by)));
|
26762
|
+
}
|
26763
|
+
else
|
26764
|
+
info.push(this._translate.get('Substituting', this._chat.format(who), this._chat.format(substitute)));
|
26778
26765
|
}
|
26779
|
-
|
26780
|
-
|
26781
|
-
|
26782
|
-
|
26783
|
-
|
26784
|
-
|
26785
|
-
|
26786
|
-
else if (recipient.byId)
|
26787
|
-
return this._translate.get('By', us[0], us[1]);
|
26788
|
-
return us[0];
|
26789
|
-
}));
|
26766
|
+
else if (recipient.byId) {
|
26767
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26768
|
+
info.push(this._translate.get('By', this._chat.format(who), this._chat.format(by)));
|
26769
|
+
}
|
26770
|
+
else
|
26771
|
+
info.push(this._chat.format(who));
|
26772
|
+
return info.join(this._translate.comma);
|
26790
26773
|
}
|
26791
26774
|
logInfo(log) {
|
26792
26775
|
const observables = [];
|