@bizdoc/core 1.13.0-next.2 → 1.13.0-next.6
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 +51 -77
- package/esm2020/lib/compose/trace/trace.component.mjs +21 -23
- 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 +4 -3
- 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/home/home-base.component.mjs +2 -2
- package/esm2020/lib/shared.module.mjs +17 -2
- package/fesm2015/bizdoc-core.mjs +135 -149
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +131 -147
- 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/core/translations.d.ts +2 -1
- 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',
|
@@ -2343,6 +2345,7 @@ const STRINGS = {
|
|
2343
2345
|
Votes: 'Votes',
|
2344
2346
|
Tasks: 'Tasks',
|
2345
2347
|
System: 'System',
|
2348
|
+
Everything: 'Everything',
|
2346
2349
|
NothingHere: 'Nothing to see here',
|
2347
2350
|
Matrix: 'Matrix',
|
2348
2351
|
Working: 'Working on it...'
|
@@ -2379,7 +2382,7 @@ const STRINGS = {
|
|
2379
2382
|
Skipped: '- דולג',
|
2380
2383
|
Route: 'חותמים',
|
2381
2384
|
Trace: 'הסטוריה',
|
2382
|
-
|
2385
|
+
Everything: 'הסטוריה',
|
2383
2386
|
ProfilerSearchHelp: 'הקלד/י שם משתמש ובחר/י מהרשימה כדי לסקור פעולותיו.',
|
2384
2387
|
TraceSearchHelp: 'הקלד/י מספר מסמך ובחר/י כדי לעקוב אחרי תנועותיו.',
|
2385
2388
|
DiagramVersion: 'גרסה {0}',
|
@@ -6928,7 +6931,7 @@ class ExpandedItemComponent {
|
|
6928
6931
|
this._refreshTask = setInterval(() => this._refresh(), REFRESH_TIME);
|
6929
6932
|
}
|
6930
6933
|
async _note() {
|
6931
|
-
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId } = this.item;
|
6934
|
+
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId, escalated } = this.item;
|
6932
6935
|
if (substitutingId) {
|
6933
6936
|
this._accounts.get(substitutingId).subscribe(u => {
|
6934
6937
|
if (replied) {
|
@@ -6938,19 +6941,15 @@ class ExpandedItemComponent {
|
|
6938
6941
|
else
|
6939
6942
|
this.note = this._translate.personalize('YouSubstituteActionTaken', u.gender, adjective, this._formatUserElement(u), time);
|
6940
6943
|
}
|
6944
|
+
else if (escalated) {
|
6945
|
+
const escalations = log.filter(l => l.time > issued &&
|
6946
|
+
l.type === 'Escalation'
|
6947
|
+
&& l.recipientId === id);
|
6948
|
+
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(escalations[0].duration));
|
6949
|
+
}
|
6941
6950
|
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
|
-
}
|
6951
|
+
const time = this._fromNow(received);
|
6952
|
+
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6954
6953
|
}
|
6955
6954
|
});
|
6956
6955
|
}
|
@@ -6959,9 +6958,9 @@ class ExpandedItemComponent {
|
|
6959
6958
|
if (byId) {
|
6960
6959
|
if (byId === this._session.profile.byId) {
|
6961
6960
|
if (toId)
|
6962
|
-
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('
|
6961
|
+
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
6962
|
else
|
6964
|
-
this.note = this._translate.get('
|
6963
|
+
this.note = this._translate.get('ActionTakenByYou', this._actionName(action, 'you'), this._session.profile.name, time);
|
6965
6964
|
}
|
6966
6965
|
else
|
6967
6966
|
this._accounts.get(byId).subscribe(u => {
|
@@ -7245,7 +7244,7 @@ class BrowseItemsComponent {
|
|
7245
7244
|
this._remove(item);
|
7246
7245
|
});
|
7247
7246
|
this._messaging.new$.pipe(takeUntil(this._destroy)).subscribe(m => {
|
7248
|
-
if (!this.dataSource)
|
7247
|
+
if (!this.dataSource || m.userId !== this._session.profile.userId)
|
7249
7248
|
return;
|
7250
7249
|
const item = this.dataSource.data.find(c => c.id === m.model.id);
|
7251
7250
|
if (!item && this.folderId === m.model.folderId) {
|
@@ -8450,7 +8449,7 @@ class ComposeFormComponent {
|
|
8450
8449
|
return this._mailbox.send(id, version, formId, model, action, params).
|
8451
8450
|
subscribe(r => {
|
8452
8451
|
if (r.toId)
|
8453
|
-
this._accounts.get(r.toId).subscribe(u => this._sb.toast('
|
8452
|
+
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, this._getActionAdjective(action), u.name));
|
8454
8453
|
else
|
8455
8454
|
this._sb.toast('Sent', number, this._getActionAdjective(action));
|
8456
8455
|
this.working = false;
|
@@ -11925,6 +11924,7 @@ class ExploreItemsComponent {
|
|
11925
11924
|
});
|
11926
11925
|
}
|
11927
11926
|
_datasource(data) {
|
11927
|
+
this._data = data;
|
11928
11928
|
this.dataSource = new MatTableDataSource(data);
|
11929
11929
|
this.dataSource.sort = this.sort;
|
11930
11930
|
this.dataSource.paginator = this.paginator;
|
@@ -11949,7 +11949,7 @@ class ExploreItemsComponent {
|
|
11949
11949
|
}
|
11950
11950
|
}))
|
11951
11951
|
}];
|
11952
|
-
this.
|
11952
|
+
this._data.forEach((r, i) => rows.push({
|
11953
11953
|
index: i + 2,
|
11954
11954
|
cells: this.columns.map((c, j) => {
|
11955
11955
|
const isnumber = c.type === 'Currency' || c.type === 'Number';
|
@@ -12054,6 +12054,7 @@ class CubeExplorePaneComponent {
|
|
12054
12054
|
relativeTo: this._pane,
|
12055
12055
|
queryParams: this.axes,
|
12056
12056
|
state: { item },
|
12057
|
+
policy: OpenPolicy.Tab | OpenPolicy.Dismissable,
|
12057
12058
|
group: this._pane.group
|
12058
12059
|
});
|
12059
12060
|
this.loading = false;
|
@@ -13173,8 +13174,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
13173
13174
|
args: [{ name: 'amDurationFormat' }]
|
13174
13175
|
}], ctorParameters: function () { return [{ type: TranslateService }]; } });
|
13175
13176
|
|
13176
|
-
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13177
|
-
const
|
13177
|
+
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution /*, LineRouting, ConnectorBridging, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13178
|
+
const
|
13179
|
+
//ELLIPSIS = 'M 650, 150 a 75,150 0 1,0 1,0 z',
|
13180
|
+
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
13181
|
/** flow-view component*/
|
13179
13182
|
class FlowViewComponent extends TraceBase {
|
13180
13183
|
/** workflow-view ctor */
|
@@ -13190,19 +13193,20 @@ class FlowViewComponent extends TraceBase {
|
|
13190
13193
|
this.diagramConstraints = DiagramConstraints.Default |
|
13191
13194
|
DiagramConstraints.Pan |
|
13192
13195
|
DiagramConstraints.LineRouting |
|
13193
|
-
DiagramConstraints.
|
13196
|
+
DiagramConstraints.Zoom;
|
13194
13197
|
this.layout = {
|
13195
13198
|
type: 'ComplexHierarchicalTree',
|
13196
13199
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
13197
13200
|
horizontalSpacing: 50,
|
13201
|
+
enableRouting: true,
|
13198
13202
|
verticalSpacing: 50,
|
13199
|
-
|
13203
|
+
horizontalAlignment: 'Center',
|
13200
13204
|
connectionDirection: 'Orientation',
|
13201
13205
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
13202
|
-
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
13203
13206
|
};
|
13204
13207
|
this.scrollSettings = {
|
13205
13208
|
minZoom: .5,
|
13209
|
+
scrollLimit: 'Limited',
|
13206
13210
|
canAutoScroll: true,
|
13207
13211
|
currentZoom: 1.2,
|
13208
13212
|
padding: { top: 0, bottom: 0 },
|
@@ -13285,7 +13289,6 @@ class FlowViewComponent extends TraceBase {
|
|
13285
13289
|
obj.style.strokeWidth = 0;
|
13286
13290
|
}
|
13287
13291
|
else {
|
13288
|
-
// obj.shape = { type: 'Bpmn', shape: 'Event' } as BpmnShapeModel;
|
13289
13292
|
obj.width = obj.height = 50;
|
13290
13293
|
if (obj.annotations && obj.annotations.length)
|
13291
13294
|
obj.annotations[0].style.color = this._session.theme.dark ? 'white' : 'black';
|
@@ -13296,7 +13299,8 @@ class FlowViewComponent extends TraceBase {
|
|
13296
13299
|
}
|
13297
13300
|
else {
|
13298
13301
|
obj.style.strokeColor = this._accentColor;
|
13299
|
-
obj.style.fill = recipient && recipient.pending ?
|
13302
|
+
obj.style.fill = recipient && recipient.pending ?
|
13303
|
+
this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : 'transparent';
|
13300
13304
|
}
|
13301
13305
|
obj.style.strokeWidth = 2;
|
13302
13306
|
}
|
@@ -13391,7 +13395,7 @@ class FlowViewComponent extends TraceBase {
|
|
13391
13395
|
}
|
13392
13396
|
}]
|
13393
13397
|
};
|
13394
|
-
if (r > 0)
|
13398
|
+
if (r > 0)
|
13395
13399
|
dconnectors.forEach(c => {
|
13396
13400
|
if (c.targetId === node.id)
|
13397
13401
|
connectors.push({
|
@@ -13401,7 +13405,10 @@ class FlowViewComponent extends TraceBase {
|
|
13401
13405
|
estimate: c.estimate
|
13402
13406
|
}
|
13403
13407
|
});
|
13404
|
-
if (c.sourceId === node.id)
|
13408
|
+
if (c.sourceId === node.id) {
|
13409
|
+
//
|
13410
|
+
if (c.virtual && c.originId !== recipient.id)
|
13411
|
+
return;
|
13405
13412
|
connectors.push({
|
13406
13413
|
sourceID: nod.id,
|
13407
13414
|
targetID: c.targetId,
|
@@ -13409,8 +13416,8 @@ class FlowViewComponent extends TraceBase {
|
|
13409
13416
|
estimate: c.estimate
|
13410
13417
|
}
|
13411
13418
|
});
|
13419
|
+
}
|
13412
13420
|
});
|
13413
|
-
}
|
13414
13421
|
nodes.push(nod);
|
13415
13422
|
if (recipient.action) {
|
13416
13423
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
@@ -13433,56 +13440,40 @@ class FlowViewComponent extends TraceBase {
|
|
13433
13440
|
indicators.push(actionIndicator);
|
13434
13441
|
}
|
13435
13442
|
}
|
13436
|
-
if (recipient.
|
13443
|
+
if (recipient.fyi)
|
13437
13444
|
indicators.push({
|
13438
|
-
id: nod.id + '
|
13445
|
+
id: nod.id + 'fyi',
|
13439
13446
|
shape: {
|
13440
13447
|
type: 'Path',
|
13441
|
-
data:
|
13442
|
-
align: this._session.inverse ? '
|
13448
|
+
data: FYI_PATH,
|
13449
|
+
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13443
13450
|
},
|
13444
13451
|
style: {
|
13445
|
-
fill:
|
13452
|
+
fill: '#1976d2'
|
13446
13453
|
},
|
13447
13454
|
addInfo: {
|
13448
13455
|
indicator: true,
|
13449
13456
|
parentId: nod.id
|
13450
13457
|
}
|
13451
13458
|
});
|
13452
|
-
if (recipient.
|
13453
|
-
|
13454
|
-
id: nod.id + '
|
13459
|
+
if (recipient.escalated) {
|
13460
|
+
const escalateIndicator = {
|
13461
|
+
id: nod.id + 'escalate',
|
13455
13462
|
shape: {
|
13456
13463
|
type: 'Path',
|
13457
|
-
data:
|
13464
|
+
data: ESCALATED_PATH,
|
13458
13465
|
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13459
13466
|
},
|
13460
13467
|
style: {
|
13461
|
-
fill:
|
13468
|
+
fill: this._session.getAccent(900)
|
13462
13469
|
},
|
13463
13470
|
addInfo: {
|
13464
13471
|
indicator: true,
|
13465
13472
|
parentId: nod.id
|
13466
13473
|
}
|
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
|
-
// }
|
13474
|
+
};
|
13475
|
+
indicators.push(escalateIndicator);
|
13476
|
+
}
|
13486
13477
|
}
|
13487
13478
|
}
|
13488
13479
|
else {
|
@@ -13549,36 +13540,6 @@ class FlowViewComponent extends TraceBase {
|
|
13549
13540
|
}
|
13550
13541
|
}
|
13551
13542
|
}
|
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
13543
|
return { connectors, nodes, indicators };
|
13583
13544
|
}
|
13584
13545
|
/**
|
@@ -13594,7 +13555,7 @@ class FlowViewComponent extends TraceBase {
|
|
13594
13555
|
const stateLog = log.find(l => l.type === 'StateChange');
|
13595
13556
|
if (stateLog) {
|
13596
13557
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
13597
|
-
annotation =
|
13558
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
13598
13559
|
}
|
13599
13560
|
if (node.type === START_NODE) {
|
13600
13561
|
if (!node.estimate) {
|
@@ -13615,8 +13576,8 @@ class FlowViewComponent extends TraceBase {
|
|
13615
13576
|
const { min, max } = super._estimateTime(node);
|
13616
13577
|
if (max)
|
13617
13578
|
return !min || min === max ?
|
13618
|
-
this._translate.get('EstimateTime',
|
13619
|
-
this._translate.get('EstimateTimeRange',
|
13579
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
13580
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
13620
13581
|
}
|
13621
13582
|
_tooltip(obj) {
|
13622
13583
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
@@ -13770,11 +13731,25 @@ class FlowViewComponent extends TraceBase {
|
|
13770
13731
|
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
13771
13732
|
}
|
13772
13733
|
}
|
13773
|
-
|
13774
|
-
|
13734
|
+
if (recipient.originId) {
|
13735
|
+
const origin = this.model.recipients.find(r => r.id === recipient.originId);
|
13736
|
+
if (origin.toId) {
|
13737
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action);
|
13738
|
+
const id = origin.byId || origin.userId, name = action.adjective || action.past || action.title;
|
13739
|
+
if (id === this._session.userId) {
|
13740
|
+
tooltip.substituting = this._translate.get('ByYou', name);
|
13741
|
+
}
|
13742
|
+
else {
|
13743
|
+
const who = await this._accounts.get(id).toPromise();
|
13744
|
+
tooltip.substituting = this._translate.get('By', who.name, name);
|
13745
|
+
}
|
13746
|
+
}
|
13747
|
+
}
|
13748
|
+
if (recipient.escalated) {
|
13749
|
+
const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
13775
13750
|
const userIds = escalations.map(e => e.userId);
|
13776
13751
|
const users = await this._accounts.getAll(userIds).toPromise();
|
13777
|
-
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].
|
13752
|
+
const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
|
13778
13753
|
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
13779
13754
|
}
|
13780
13755
|
if (recipient.replied) {
|
@@ -14103,30 +14078,28 @@ class TraceViewComponent extends TraceBase {
|
|
14103
14078
|
step.role = by.role;
|
14104
14079
|
}
|
14105
14080
|
}
|
14106
|
-
else {
|
14081
|
+
else if (recipient.escalated) {
|
14107
14082
|
let escalations = this.model.log.filter(l => l.time > issued &&
|
14108
14083
|
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))));
|
14084
|
+
let escalate = [];
|
14085
|
+
for (let escalation of escalations) {
|
14086
|
+
let who = await profileOf(escalation.userId);
|
14087
|
+
escalate.push(who);
|
14120
14088
|
}
|
14089
|
+
let who = await profileOf(recipient.userId);
|
14090
|
+
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14091
|
+
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14092
|
+
else
|
14093
|
+
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14094
|
+
}
|
14095
|
+
else {
|
14096
|
+
if (recipient.userId === this._session.userId)
|
14097
|
+
step.name = this._translate.get('You');
|
14121
14098
|
else {
|
14122
|
-
|
14123
|
-
|
14124
|
-
|
14125
|
-
|
14126
|
-
step.name = nameOf(who);
|
14127
|
-
if (who.role)
|
14128
|
-
step.role = who.role;
|
14129
|
-
}
|
14099
|
+
let who = await profileOf(recipient.userId);
|
14100
|
+
step.name = nameOf(who);
|
14101
|
+
if (who.role)
|
14102
|
+
step.role = who.role;
|
14130
14103
|
}
|
14131
14104
|
}
|
14132
14105
|
trace.push(step);
|
@@ -14164,10 +14137,10 @@ class TraceViewComponent extends TraceBase {
|
|
14164
14137
|
}
|
14165
14138
|
}
|
14166
14139
|
TraceViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TraceViewComponent, deps: [{ token: SessionService }, { token: TranslateService }, { token: AccountService }, { token: ChatInfo }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component });
|
14167
|
-
TraceViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TraceViewComponent, selector: "bizdoc-trace", inputs: { model: "model" }, outputs: { versionSelected: "versionSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav-toolbar row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'ShowAll'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n <mat-menu #menu> \r\n <button mat-menu-item (click)=\"showAll=false\">\r\n <mat-icon>{{ !showAll?'check':'' }}</mat-icon>\r\n <span>{{'Route' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"showAll=true\">\r\n <mat-icon>{{showAll?'check':''}}</mat-icon>\r\n <span>{{'
|
14140
|
+
TraceViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TraceViewComponent, selector: "bizdoc-trace", inputs: { model: "model" }, outputs: { versionSelected: "versionSelected" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav-toolbar row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'ShowAll'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n <mat-menu #menu> \r\n <button mat-menu-item (click)=\"showAll=false\">\r\n <mat-icon>{{ !showAll?'check':'' }}</mat-icon>\r\n <span>{{'Route' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"showAll=true\">\r\n <mat-icon>{{showAll?'check':''}}</mat-icon>\r\n <span>{{'Everything' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n</div>\r\n<table class=\"mat-table\" @list>\r\n <tbody role=\"rowgroup\">\r\n <tr class=\"mat-row\" *ngFor=\"let l of data\" @item>\r\n <td class=\"mat-cell\">\r\n <span [innerHTML]=\"l.name | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span *ngIf=l.role>{{'JoinComma'|translate}}{{l.role}}</span>\r\n </td>\r\n <td class=\"mat-cell\">\r\n <ng-container [ngSwitch]=\"l.type\">\r\n <ng-container *ngSwitchCase=\"'ActionTaken'\">\r\n <span [innerHTML]=\"l.action | sanitizeHtml\" (click)=\"chat($event)\" class=\"to\"></span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'Submit'\">{{'Issued' | translate}}</span>\r\n <span *ngSwitchCase=\"'Pending'\">{{'IsPending' | translate}}</span>\r\n <span *ngSwitchCase=\"'CheckOut'\">{{'CheckedIn' | translate : l.fileName}}</span>\r\n <span *ngSwitchCase=\"'CheckIn'\">{{'CheckedOut' | translate : l.fileName}}</span>\r\n <span *ngSwitchCase=\"'Estimate'\">{{'Estimate' | translate}}</span>\r\n <span *ngSwitchCase=\"'ModelChange'\">{{'Changed' | translate}}</span>\r\n </ng-container>\r\n <span *ngIf=\"l.fyi\"> {{'FYI'|translate}}</span>\r\n </td>\r\n <td class=\"mat-cell\" [ngSwitch]=\"l.estimate\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n <span *ngIf=\"l.durationMax && l.durationMax === l.durationMin\" [bizdocTooltip]=\"l.durationMax|amDurationFormat\">{{'EstimateTime'| translate : (l.durationMax | amDuration:'s')}}</span>\r\n <span *ngIf=\"l.durationMax && l.durationMax !== l.durationMin\"\r\n [bizdocTooltip]=\"l.durationMax|amDurationFormat\">{{'EstimateTimeRange'| translate : (l.durationMin | amDuration:'s') : (l.durationMax | amDuration:'s')}}</span>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span>{{l.time | amCalendar : null : CALENDAR_SPEC }}</span>\r\n <span *ngIf=\"l.duration\" [bizdocTooltip]=\"l.duration|amDurationFormat\" class=\"duration\"> ({{l.duration | amDuration:'s'}})</span>\r\n </ng-container>\r\n </td>\r\n <td class=\"mat-cell\">\r\n <span *ngIf=\"l.note\">{{l.note}}</span>\r\n <button mat-icon-button *ngIf=\"l.type==='ModelChange'\" (click)=\"compare(l)\" [bizdocTooltip]=\"'Compare'|translate\" bizdocTooltipPosition=\"start\"><mat-icon>more_horiz</mat-icon></button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n", styles: [":host{width:100%}table{width:100%;background:transparent}table td{padding:0 4px}.duration{white-space:nowrap}\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: i8$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i8$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "translate": TranslatePipe, "sanitizeHtml": SanitizeHtmlPipe, "amDurationFormat": DurationFormatPipe, "amDuration": DurationPipe, "amCalendar": CalendarPipe }, animations: [listAnimation, itemAnimation] });
|
14168
14141
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TraceViewComponent, decorators: [{
|
14169
14142
|
type: Component,
|
14170
|
-
args: [{ selector: 'bizdoc-trace', animations: [listAnimation, itemAnimation], template: "<div class=\"nav-toolbar row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'ShowAll'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n <mat-menu #menu> \r\n <button mat-menu-item (click)=\"showAll=false\">\r\n <mat-icon>{{ !showAll?'check':'' }}</mat-icon>\r\n <span>{{'Route' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"showAll=true\">\r\n <mat-icon>{{showAll?'check':''}}</mat-icon>\r\n <span>{{'
|
14143
|
+
args: [{ selector: 'bizdoc-trace', animations: [listAnimation, itemAnimation], template: "<div class=\"nav-toolbar row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" [bizdocTooltip]=\"'ShowAll'|translate\"><mat-icon>filter_list</mat-icon></button>\r\n <mat-menu #menu> \r\n <button mat-menu-item (click)=\"showAll=false\">\r\n <mat-icon>{{ !showAll?'check':'' }}</mat-icon>\r\n <span>{{'Route' | translate }}</span>\r\n </button>\r\n <button mat-menu-item (click)=\"showAll=true\">\r\n <mat-icon>{{showAll?'check':''}}</mat-icon>\r\n <span>{{'Everything' | translate }}</span>\r\n </button>\r\n </mat-menu>\r\n</div>\r\n<table class=\"mat-table\" @list>\r\n <tbody role=\"rowgroup\">\r\n <tr class=\"mat-row\" *ngFor=\"let l of data\" @item>\r\n <td class=\"mat-cell\">\r\n <span [innerHTML]=\"l.name | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span *ngIf=l.role>{{'JoinComma'|translate}}{{l.role}}</span>\r\n </td>\r\n <td class=\"mat-cell\">\r\n <ng-container [ngSwitch]=\"l.type\">\r\n <ng-container *ngSwitchCase=\"'ActionTaken'\">\r\n <span [innerHTML]=\"l.action | sanitizeHtml\" (click)=\"chat($event)\" class=\"to\"></span>\r\n </ng-container>\r\n <span *ngSwitchCase=\"'Submit'\">{{'Issued' | translate}}</span>\r\n <span *ngSwitchCase=\"'Pending'\">{{'IsPending' | translate}}</span>\r\n <span *ngSwitchCase=\"'CheckOut'\">{{'CheckedIn' | translate : l.fileName}}</span>\r\n <span *ngSwitchCase=\"'CheckIn'\">{{'CheckedOut' | translate : l.fileName}}</span>\r\n <span *ngSwitchCase=\"'Estimate'\">{{'Estimate' | translate}}</span>\r\n <span *ngSwitchCase=\"'ModelChange'\">{{'Changed' | translate}}</span>\r\n </ng-container>\r\n <span *ngIf=\"l.fyi\"> {{'FYI'|translate}}</span>\r\n </td>\r\n <td class=\"mat-cell\" [ngSwitch]=\"l.estimate\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n <span *ngIf=\"l.durationMax && l.durationMax === l.durationMin\" [bizdocTooltip]=\"l.durationMax|amDurationFormat\">{{'EstimateTime'| translate : (l.durationMax | amDuration:'s')}}</span>\r\n <span *ngIf=\"l.durationMax && l.durationMax !== l.durationMin\"\r\n [bizdocTooltip]=\"l.durationMax|amDurationFormat\">{{'EstimateTimeRange'| translate : (l.durationMin | amDuration:'s') : (l.durationMax | amDuration:'s')}}</span>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <span>{{l.time | amCalendar : null : CALENDAR_SPEC }}</span>\r\n <span *ngIf=\"l.duration\" [bizdocTooltip]=\"l.duration|amDurationFormat\" class=\"duration\"> ({{l.duration | amDuration:'s'}})</span>\r\n </ng-container>\r\n </td>\r\n <td class=\"mat-cell\">\r\n <span *ngIf=\"l.note\">{{l.note}}</span>\r\n <button mat-icon-button *ngIf=\"l.type==='ModelChange'\" (click)=\"compare(l)\" [bizdocTooltip]=\"'Compare'|translate\" bizdocTooltipPosition=\"start\"><mat-icon>more_horiz</mat-icon></button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n", styles: [":host{width:100%}table{width:100%;background:transparent}table td{padding:0 4px}.duration{white-space:nowrap}\n"] }]
|
14171
14144
|
}], ctorParameters: function () { return [{ type: SessionService }, { type: TranslateService }, { type: AccountService }, { type: ChatInfo }, { type: HubService }]; }, propDecorators: { model: [{
|
14172
14145
|
type: Input
|
14173
14146
|
}], versionSelected: [{
|
@@ -17222,7 +17195,7 @@ class HomeBase {
|
|
17222
17195
|
this._messaging.new$.subscribe(m => {
|
17223
17196
|
const { model: { formId: name, subject, number } } = m;
|
17224
17197
|
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'), {
|
17198
|
+
this._snackBar.open(msg, m.userId === this._session.profile.userId ? this._translate.get('OpenNew') : null, {
|
17226
17199
|
duration: 5000,
|
17227
17200
|
direction: this._session.direction,
|
17228
17201
|
politeness: 'assertive'
|
@@ -18655,7 +18628,7 @@ class SlotsComponent {
|
|
18655
18628
|
}
|
18656
18629
|
}
|
18657
18630
|
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=\"
|
18631
|
+
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
18632
|
panesTitleAnimation,
|
18660
18633
|
paneAnimation,
|
18661
18634
|
paramAnimation,
|
@@ -18672,7 +18645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
18672
18645
|
queryAnimation,
|
18673
18646
|
tabsAnimation,
|
18674
18647
|
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=\"
|
18648
|
+
], 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
18649
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
18677
18650
|
type: Inject,
|
18678
18651
|
args: [PANES_DATA]
|
@@ -26377,7 +26350,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
26377
26350
|
args: ['attr.aria-describedby']
|
26378
26351
|
}] } });
|
26379
26352
|
|
26380
|
-
|
26353
|
+
// https://day.js.org/docs/en/customization/relative-time
|
26354
|
+
dayjs.extend(relativeTime, {
|
26355
|
+
thresholds: [
|
26356
|
+
{ l: 's', r: 1 },
|
26357
|
+
{ l: 'm', r: 1 },
|
26358
|
+
{ l: 'mm', r: 59, d: 'minute' },
|
26359
|
+
{ l: 'h', r: 1 },
|
26360
|
+
{ l: 'hh', r: 24, d: 'hour' },
|
26361
|
+
{ l: 'd', r: 1 },
|
26362
|
+
{ l: 'dd', r: 29, d: 'day' },
|
26363
|
+
{ l: 'M', r: 1 },
|
26364
|
+
{ l: 'MM', r: 11, d: 'month' },
|
26365
|
+
{ l: 'y' },
|
26366
|
+
{ l: 'yy', d: 'year' }
|
26367
|
+
]
|
26368
|
+
});
|
26381
26369
|
dayjs.extend(duration);
|
26382
26370
|
dayjs.extend(calendar);
|
26383
26371
|
const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, CubeChartViewComponent, CubeDocumentSumComponent, CubeDocumentMatrixComponent, CubeDocumentViewComponent, CubePivotViewComponent, TimelineViewComponent,
|
@@ -26759,34 +26747,30 @@ class TraceElementComponent {
|
|
26759
26747
|
this.none = log.length === 0,
|
26760
26748
|
this.nodeType = this._session.profile.nodes.find(n => n.name === addInfo.nodeType);
|
26761
26749
|
}
|
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);
|
26750
|
+
async recipientInfo(recipient) {
|
26751
|
+
const info = [];
|
26752
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
26753
|
+
if (recipient.escalated) {
|
26754
|
+
const escalations = this.timeline.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
26755
|
+
const escalate = await this._accounts.get(escalations[0].userId).toPromise();
|
26756
|
+
info.push(this._translate.get('EscalatedBy', this._chat.format(escalate), this._chat.format(who)));
|
26774
26757
|
}
|
26775
26758
|
if (recipient.substitutingId) {
|
26776
|
-
const
|
26777
|
-
|
26759
|
+
const substitute = await this._accounts.get(recipient.substitutingId).toPromise();
|
26760
|
+
if (recipient.byId) {
|
26761
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26762
|
+
info.push(this._translate.get('SubstitutingBy', this._chat.format(who), this._chat.format(substitute), this._chat.format(by)));
|
26763
|
+
}
|
26764
|
+
else
|
26765
|
+
info.push(this._translate.get('Substituting', this._chat.format(who), this._chat.format(substitute)));
|
26778
26766
|
}
|
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
|
-
}));
|
26767
|
+
else if (recipient.byId) {
|
26768
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26769
|
+
info.push(this._translate.get('By', this._chat.format(who), this._chat.format(by)));
|
26770
|
+
}
|
26771
|
+
else
|
26772
|
+
info.push(this._chat.format(who));
|
26773
|
+
return info.join(this._translate.comma);
|
26790
26774
|
}
|
26791
26775
|
logInfo(log) {
|
26792
26776
|
const observables = [];
|