@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/fesm2015/bizdoc-core.mjs
CHANGED
@@ -128,7 +128,7 @@ import { Spreadsheet, isNumber, SpreadsheetModule, SelectionService as Selection
|
|
128
128
|
import * as i4$1 from '@ctrl/ngx-emoji-mart';
|
129
129
|
import { PickerModule } from '@ctrl/ngx-emoji-mart';
|
130
130
|
import * as i11$1 from '@syncfusion/ej2-angular-diagrams';
|
131
|
-
import { Diagram, UndoRedo, ConnectorDrawingTool, DiagramConstraints, DiagramTools, NodeConstraints, ConnectorConstraints, SelectorConstraints, Node, SymbolPaletteComponent, ComplexHierarchicalTree, BpmnDiagrams, DataBinding, ConnectionPointOrigin, SnapConstraints, ComplexHierarchicalTreeService, DiagramModule, SymbolPaletteModule, ConnectorBridgingService, LineRoutingService, BpmnDiagramsService, LayoutAnimationService, UndoRedoService, SnappingService, ConnectorEditingService, ToolBase } from '@syncfusion/ej2-angular-diagrams';
|
131
|
+
import { Diagram, UndoRedo, ConnectorDrawingTool, DiagramConstraints, DiagramTools, NodeConstraints, ConnectorConstraints, SelectorConstraints, Node, SymbolPaletteComponent, ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution, ConnectionPointOrigin, SnapConstraints, ComplexHierarchicalTreeService, DiagramModule, SymbolPaletteModule, ConnectorBridgingService, LineRoutingService, BpmnDiagramsService, LayoutAnimationService, UndoRedoService, SnappingService, ConnectorEditingService, ToolBase } from '@syncfusion/ej2-angular-diagrams';
|
132
132
|
import * as i9$2 from '@syncfusion/ej2-angular-schedule';
|
133
133
|
import { Schedule, Day, WorkWeek, Month, MonthAgenda, Agenda, Year, ScheduleModule, ExcelExportService as ExcelExportService$2, DayService, WorkWeekService, MonthService, MonthAgendaService, ICalendarExportService, AgendaService, YearService } from '@syncfusion/ej2-angular-schedule';
|
134
134
|
import * as i10$2 from '@syncfusion/ej2-angular-kanban';
|
@@ -1247,6 +1247,8 @@ class MailboxService {
|
|
1247
1247
|
};
|
1248
1248
|
messaging.new$.
|
1249
1249
|
subscribe(m => {
|
1250
|
+
if (m.userId !== _session.profile.userId)
|
1251
|
+
return;
|
1250
1252
|
_session.profile.inboxCount++;
|
1251
1253
|
const folder = _session.profile.folders.find(f => f.name === m.model.folderId);
|
1252
1254
|
folder.count++;
|
@@ -1928,7 +1930,7 @@ const STRINGS = {
|
|
1928
1930
|
NoEstimate: '(No estimate)',
|
1929
1931
|
EstimateTime: '(Estimated time {0})',
|
1930
1932
|
NodeStandardTime: '(Standard time: {0})',
|
1931
|
-
EstimateTimeRange: '(Estimated time {0}
|
1933
|
+
EstimateTimeRange: '(Estimated time between {0} and {1})',
|
1932
1934
|
Connect: 'Connect',
|
1933
1935
|
Requirments: 'Requirments',
|
1934
1936
|
Anyone: 'Anyone',
|
@@ -2348,6 +2350,7 @@ const STRINGS = {
|
|
2348
2350
|
Votes: 'Votes',
|
2349
2351
|
Tasks: 'Tasks',
|
2350
2352
|
System: 'System',
|
2353
|
+
Everything: 'Everything',
|
2351
2354
|
NothingHere: 'Nothing to see here',
|
2352
2355
|
Matrix: 'Matrix',
|
2353
2356
|
Working: 'Working on it...'
|
@@ -2384,7 +2387,7 @@ const STRINGS = {
|
|
2384
2387
|
Skipped: '- דולג',
|
2385
2388
|
Route: 'חותמים',
|
2386
2389
|
Trace: 'הסטוריה',
|
2387
|
-
|
2390
|
+
Everything: 'הסטוריה',
|
2388
2391
|
ProfilerSearchHelp: 'הקלד/י שם משתמש ובחר/י מהרשימה כדי לסקור פעולותיו.',
|
2389
2392
|
TraceSearchHelp: 'הקלד/י מספר מסמך ובחר/י כדי לעקוב אחרי תנועותיו.',
|
2390
2393
|
DiagramVersion: 'גרסה {0}',
|
@@ -6958,7 +6961,7 @@ class ExpandedItemComponent {
|
|
6958
6961
|
}
|
6959
6962
|
_note() {
|
6960
6963
|
return __awaiter(this, void 0, void 0, function* () {
|
6961
|
-
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId } = this.item;
|
6964
|
+
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId, escalated } = this.item;
|
6962
6965
|
if (substitutingId) {
|
6963
6966
|
this._accounts.get(substitutingId).subscribe(u => {
|
6964
6967
|
if (replied) {
|
@@ -6968,19 +6971,15 @@ class ExpandedItemComponent {
|
|
6968
6971
|
else
|
6969
6972
|
this.note = this._translate.personalize('YouSubstituteActionTaken', u.gender, adjective, this._formatUserElement(u), time);
|
6970
6973
|
}
|
6974
|
+
else if (escalated) {
|
6975
|
+
const escalations = log.filter(l => l.time > issued &&
|
6976
|
+
l.type === 'Escalation'
|
6977
|
+
&& l.recipientId === id);
|
6978
|
+
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(escalations[0].duration));
|
6979
|
+
}
|
6971
6980
|
else {
|
6972
|
-
const
|
6973
|
-
|
6974
|
-
l.type === 'Escalation'
|
6975
|
-
&& l.recipientId === id);
|
6976
|
-
if (escalations && escalations.length) {
|
6977
|
-
const duration = dayjs(escalations[0].time).diff(received, 's');
|
6978
|
-
this.note = this._translate.personalize('EscalatedFrom', u.gender, this._formatUserElement(u), this._duration(duration));
|
6979
|
-
}
|
6980
|
-
else {
|
6981
|
-
const time = this._fromNow(received);
|
6982
|
-
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6983
|
-
}
|
6981
|
+
const time = this._fromNow(received);
|
6982
|
+
this.note = this._translate.personalize('SubstitutingNote', u.gender, this._formatUserElement(u), time, note || '');
|
6984
6983
|
}
|
6985
6984
|
});
|
6986
6985
|
}
|
@@ -6989,9 +6988,9 @@ class ExpandedItemComponent {
|
|
6989
6988
|
if (byId) {
|
6990
6989
|
if (byId === this._session.profile.byId) {
|
6991
6990
|
if (toId)
|
6992
|
-
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('
|
6991
|
+
this._accounts.get(toId).subscribe(u => this.note = this._translate.get('ActionTakenByYouTo', this._actionName(action, 'you'), this._formatUserElement(u), this._session.profile.name, time));
|
6993
6992
|
else
|
6994
|
-
this.note = this._translate.get('
|
6993
|
+
this.note = this._translate.get('ActionTakenByYou', this._actionName(action, 'you'), this._session.profile.name, time);
|
6995
6994
|
}
|
6996
6995
|
else
|
6997
6996
|
this._accounts.get(byId).subscribe(u => {
|
@@ -7280,7 +7279,7 @@ class BrowseItemsComponent {
|
|
7280
7279
|
this._remove(item);
|
7281
7280
|
});
|
7282
7281
|
this._messaging.new$.pipe(takeUntil(this._destroy)).subscribe(m => {
|
7283
|
-
if (!this.dataSource)
|
7282
|
+
if (!this.dataSource || m.userId !== this._session.profile.userId)
|
7284
7283
|
return;
|
7285
7284
|
const item = this.dataSource.data.find(c => c.id === m.model.id);
|
7286
7285
|
if (!item && this.folderId === m.model.folderId) {
|
@@ -8493,7 +8492,7 @@ class ComposeFormComponent {
|
|
8493
8492
|
return this._mailbox.send(id, version, formId, model, action, params).
|
8494
8493
|
subscribe(r => {
|
8495
8494
|
if (r.toId)
|
8496
|
-
this._accounts.get(r.toId).subscribe(u => this._sb.toast('
|
8495
|
+
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, this._getActionAdjective(action), u.name));
|
8497
8496
|
else
|
8498
8497
|
this._sb.toast('Sent', number, this._getActionAdjective(action));
|
8499
8498
|
this.working = false;
|
@@ -11976,6 +11975,7 @@ class ExploreItemsComponent {
|
|
11976
11975
|
});
|
11977
11976
|
}
|
11978
11977
|
_datasource(data) {
|
11978
|
+
this._data = data;
|
11979
11979
|
this.dataSource = new MatTableDataSource(data);
|
11980
11980
|
this.dataSource.sort = this.sort;
|
11981
11981
|
this.dataSource.paginator = this.paginator;
|
@@ -12000,7 +12000,7 @@ class ExploreItemsComponent {
|
|
12000
12000
|
}
|
12001
12001
|
}))
|
12002
12002
|
}];
|
12003
|
-
this.
|
12003
|
+
this._data.forEach((r, i) => rows.push({
|
12004
12004
|
index: i + 2,
|
12005
12005
|
cells: this.columns.map((c, j) => {
|
12006
12006
|
const isnumber = c.type === 'Currency' || c.type === 'Number';
|
@@ -12105,6 +12105,7 @@ class CubeExplorePaneComponent {
|
|
12105
12105
|
relativeTo: this._pane,
|
12106
12106
|
queryParams: this.axes,
|
12107
12107
|
state: { item },
|
12108
|
+
policy: OpenPolicy.Tab | OpenPolicy.Dismissable,
|
12108
12109
|
group: this._pane.group
|
12109
12110
|
});
|
12110
12111
|
this.loading = false;
|
@@ -13228,8 +13229,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
13228
13229
|
args: [{ name: 'amDurationFormat' }]
|
13229
13230
|
}], ctorParameters: function () { return [{ type: TranslateService }]; } });
|
13230
13231
|
|
13231
|
-
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13232
|
-
const
|
13232
|
+
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution /*, LineRouting, ConnectorBridging, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13233
|
+
const
|
13234
|
+
//ELLIPSIS = 'M 650, 150 a 75,150 0 1,0 1,0 z',
|
13235
|
+
FYI_PATH = 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z', ESCALATED_PATH = 'M22 5.72l-4.6-3.86-1.29 1.53 4.6 3.86L22 5.72zM7.88 3.39L6.6 1.86 2 5.71l1.29 1.53 4.59-3.85zM12.5 8H11v6l4.75 2.85.75-1.23-4-2.37V8zM12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9c4.97 0 9-4.03 9-9s-4.03-9-9-9zm0 16c-3.87 0-7-3.13-7-7s3.13-7 7-7 7 3.13 7 7-3.13 7-7 7z', WARNNING_PATH$1 = 'M 13.763735,1.8433735 H 6.3037349 l -5.27,5.27 v 7.4599995 l 5.27,5.27 h 7.4600001 l 5.27,-5.27 V 7.1133735 Z m -3.73,14.2999995 c -0.7200001,0 -1.3000001,-0.58 -1.3000001,-1.3 0,-0.72 0.58,-1.3 1.3000001,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3 z m 1,-4.3 H 9.0337349 V 5.8433735 h 2.0000001 z';
|
13233
13236
|
/** flow-view component*/
|
13234
13237
|
class FlowViewComponent extends TraceBase {
|
13235
13238
|
/** workflow-view ctor */
|
@@ -13245,19 +13248,20 @@ class FlowViewComponent extends TraceBase {
|
|
13245
13248
|
this.diagramConstraints = DiagramConstraints.Default |
|
13246
13249
|
DiagramConstraints.Pan |
|
13247
13250
|
DiagramConstraints.LineRouting |
|
13248
|
-
DiagramConstraints.
|
13251
|
+
DiagramConstraints.Zoom;
|
13249
13252
|
this.layout = {
|
13250
13253
|
type: 'ComplexHierarchicalTree',
|
13251
13254
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
13252
13255
|
horizontalSpacing: 50,
|
13256
|
+
enableRouting: true,
|
13253
13257
|
verticalSpacing: 50,
|
13254
|
-
|
13258
|
+
horizontalAlignment: 'Center',
|
13255
13259
|
connectionDirection: 'Orientation',
|
13256
13260
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
13257
|
-
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
13258
13261
|
};
|
13259
13262
|
this.scrollSettings = {
|
13260
13263
|
minZoom: .5,
|
13264
|
+
scrollLimit: 'Limited',
|
13261
13265
|
canAutoScroll: true,
|
13262
13266
|
currentZoom: 1.2,
|
13263
13267
|
padding: { top: 0, bottom: 0 },
|
@@ -13342,7 +13346,6 @@ class FlowViewComponent extends TraceBase {
|
|
13342
13346
|
obj.style.strokeWidth = 0;
|
13343
13347
|
}
|
13344
13348
|
else {
|
13345
|
-
// obj.shape = { type: 'Bpmn', shape: 'Event' } as BpmnShapeModel;
|
13346
13349
|
obj.width = obj.height = 50;
|
13347
13350
|
if (obj.annotations && obj.annotations.length)
|
13348
13351
|
obj.annotations[0].style.color = this._session.theme.dark ? 'white' : 'black';
|
@@ -13353,7 +13356,8 @@ class FlowViewComponent extends TraceBase {
|
|
13353
13356
|
}
|
13354
13357
|
else {
|
13355
13358
|
obj.style.strokeColor = this._accentColor;
|
13356
|
-
obj.style.fill = recipient && recipient.pending ?
|
13359
|
+
obj.style.fill = recipient && recipient.pending ?
|
13360
|
+
this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : 'transparent';
|
13357
13361
|
}
|
13358
13362
|
obj.style.strokeWidth = 2;
|
13359
13363
|
}
|
@@ -13449,7 +13453,7 @@ class FlowViewComponent extends TraceBase {
|
|
13449
13453
|
}
|
13450
13454
|
}]
|
13451
13455
|
};
|
13452
|
-
if (r > 0)
|
13456
|
+
if (r > 0)
|
13453
13457
|
dconnectors.forEach(c => {
|
13454
13458
|
if (c.targetId === node.id)
|
13455
13459
|
connectors.push({
|
@@ -13459,7 +13463,10 @@ class FlowViewComponent extends TraceBase {
|
|
13459
13463
|
estimate: c.estimate
|
13460
13464
|
}
|
13461
13465
|
});
|
13462
|
-
if (c.sourceId === node.id)
|
13466
|
+
if (c.sourceId === node.id) {
|
13467
|
+
//
|
13468
|
+
if (c.virtual && c.originId !== recipient.id)
|
13469
|
+
return;
|
13463
13470
|
connectors.push({
|
13464
13471
|
sourceID: nod.id,
|
13465
13472
|
targetID: c.targetId,
|
@@ -13467,8 +13474,8 @@ class FlowViewComponent extends TraceBase {
|
|
13467
13474
|
estimate: c.estimate
|
13468
13475
|
}
|
13469
13476
|
});
|
13477
|
+
}
|
13470
13478
|
});
|
13471
|
-
}
|
13472
13479
|
nodes.push(nod);
|
13473
13480
|
if (recipient.action) {
|
13474
13481
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
@@ -13491,56 +13498,40 @@ class FlowViewComponent extends TraceBase {
|
|
13491
13498
|
indicators.push(actionIndicator);
|
13492
13499
|
}
|
13493
13500
|
}
|
13494
|
-
if (recipient.
|
13501
|
+
if (recipient.fyi)
|
13495
13502
|
indicators.push({
|
13496
|
-
id: nod.id + '
|
13503
|
+
id: nod.id + 'fyi',
|
13497
13504
|
shape: {
|
13498
13505
|
type: 'Path',
|
13499
|
-
data:
|
13500
|
-
align: this._session.inverse ? '
|
13506
|
+
data: FYI_PATH,
|
13507
|
+
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13501
13508
|
},
|
13502
13509
|
style: {
|
13503
|
-
fill:
|
13510
|
+
fill: '#1976d2'
|
13504
13511
|
},
|
13505
13512
|
addInfo: {
|
13506
13513
|
indicator: true,
|
13507
13514
|
parentId: nod.id
|
13508
13515
|
}
|
13509
13516
|
});
|
13510
|
-
if (recipient.
|
13511
|
-
|
13512
|
-
id: nod.id + '
|
13517
|
+
if (recipient.escalated) {
|
13518
|
+
const escalateIndicator = {
|
13519
|
+
id: nod.id + 'escalate',
|
13513
13520
|
shape: {
|
13514
13521
|
type: 'Path',
|
13515
|
-
data:
|
13522
|
+
data: ESCALATED_PATH,
|
13516
13523
|
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13517
13524
|
},
|
13518
13525
|
style: {
|
13519
|
-
fill:
|
13526
|
+
fill: this._session.getAccent(900)
|
13520
13527
|
},
|
13521
13528
|
addInfo: {
|
13522
13529
|
indicator: true,
|
13523
13530
|
parentId: nod.id
|
13524
13531
|
}
|
13525
|
-
}
|
13526
|
-
|
13527
|
-
|
13528
|
-
// id: nod.id + 'escalate',
|
13529
|
-
// shape: {
|
13530
|
-
// type: 'Path',
|
13531
|
-
// data: ESCALATED_PATH,
|
13532
|
-
// align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13533
|
-
// },
|
13534
|
-
// style: {
|
13535
|
-
// fill: this._session.getAccent(900)
|
13536
|
-
// },
|
13537
|
-
// addInfo: {
|
13538
|
-
// indicator: true,
|
13539
|
-
// parentId: nod.id
|
13540
|
-
// } as NodeInfoModel
|
13541
|
-
// } as NodeModel;
|
13542
|
-
// indicators.push(escalateIndicator);
|
13543
|
-
// }
|
13532
|
+
};
|
13533
|
+
indicators.push(escalateIndicator);
|
13534
|
+
}
|
13544
13535
|
}
|
13545
13536
|
}
|
13546
13537
|
else {
|
@@ -13607,36 +13598,6 @@ class FlowViewComponent extends TraceBase {
|
|
13607
13598
|
}
|
13608
13599
|
}
|
13609
13600
|
}
|
13610
|
-
/**
|
13611
|
-
*
|
13612
|
-
* @param connector
|
13613
|
-
* @param index
|
13614
|
-
* @param vconnectors
|
13615
|
-
*/
|
13616
|
-
function reroute(connector, index) {
|
13617
|
-
while (index < dconnectors.length) {
|
13618
|
-
let dconnector = dconnectors[index];
|
13619
|
-
if (dconnector.sourceId === connector.targetId) {
|
13620
|
-
if (nodes.some(n => n.id === dconnector.targetId))
|
13621
|
-
connectors.push({
|
13622
|
-
sourceID: connector.sourceId,
|
13623
|
-
targetID: dconnector.targetId,
|
13624
|
-
addInfo: {
|
13625
|
-
estimate: dconnector.estimate,
|
13626
|
-
time: dconnector.time
|
13627
|
-
}
|
13628
|
-
});
|
13629
|
-
else
|
13630
|
-
reroute({
|
13631
|
-
time: dconnector.time,
|
13632
|
-
targetId: dconnector.targetId,
|
13633
|
-
estimate: dconnector.estimate,
|
13634
|
-
sourceId: connector.sourceId
|
13635
|
-
}, index + 1);
|
13636
|
-
}
|
13637
|
-
index++;
|
13638
|
-
}
|
13639
|
-
}
|
13640
13601
|
return { connectors, nodes, indicators };
|
13641
13602
|
});
|
13642
13603
|
}
|
@@ -13654,7 +13615,7 @@ class FlowViewComponent extends TraceBase {
|
|
13654
13615
|
const stateLog = log.find(l => l.type === 'StateChange');
|
13655
13616
|
if (stateLog) {
|
13656
13617
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
13657
|
-
annotation =
|
13618
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
13658
13619
|
}
|
13659
13620
|
if (node.type === START_NODE) {
|
13660
13621
|
if (!node.estimate) {
|
@@ -13676,8 +13637,8 @@ class FlowViewComponent extends TraceBase {
|
|
13676
13637
|
const { min, max } = super._estimateTime(node);
|
13677
13638
|
if (max)
|
13678
13639
|
return !min || min === max ?
|
13679
|
-
this._translate.get('EstimateTime',
|
13680
|
-
this._translate.get('EstimateTimeRange',
|
13640
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
13641
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
13681
13642
|
}
|
13682
13643
|
_tooltip(obj) {
|
13683
13644
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
@@ -13834,11 +13795,25 @@ class FlowViewComponent extends TraceBase {
|
|
13834
13795
|
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
13835
13796
|
}
|
13836
13797
|
}
|
13837
|
-
|
13838
|
-
|
13798
|
+
if (recipient.originId) {
|
13799
|
+
const origin = this.model.recipients.find(r => r.id === recipient.originId);
|
13800
|
+
if (origin.toId) {
|
13801
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action);
|
13802
|
+
const id = origin.byId || origin.userId, name = action.adjective || action.past || action.title;
|
13803
|
+
if (id === this._session.userId) {
|
13804
|
+
tooltip.substituting = this._translate.get('ByYou', name);
|
13805
|
+
}
|
13806
|
+
else {
|
13807
|
+
const who = yield this._accounts.get(id).toPromise();
|
13808
|
+
tooltip.substituting = this._translate.get('By', who.name, name);
|
13809
|
+
}
|
13810
|
+
}
|
13811
|
+
}
|
13812
|
+
if (recipient.escalated) {
|
13813
|
+
const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
13839
13814
|
const userIds = escalations.map(e => e.userId);
|
13840
13815
|
const users = yield this._accounts.getAll(userIds).toPromise();
|
13841
|
-
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].
|
13816
|
+
const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
|
13842
13817
|
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
13843
13818
|
}
|
13844
13819
|
if (recipient.replied) {
|
@@ -14174,30 +14149,28 @@ class TraceViewComponent extends TraceBase {
|
|
14174
14149
|
step.role = by.role;
|
14175
14150
|
}
|
14176
14151
|
}
|
14177
|
-
else {
|
14152
|
+
else if (recipient.escalated) {
|
14178
14153
|
let escalations = this.model.log.filter(l => l.time > issued &&
|
14179
14154
|
l.type === 'Escalation' && l.recipientId === recipient.id);
|
14180
|
-
|
14181
|
-
|
14182
|
-
|
14183
|
-
|
14184
|
-
escalate.push(who);
|
14185
|
-
}
|
14186
|
-
let who = yield profileOf(recipient.userId);
|
14187
|
-
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14188
|
-
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14189
|
-
else
|
14190
|
-
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14155
|
+
let escalate = [];
|
14156
|
+
for (let escalation of escalations) {
|
14157
|
+
let who = yield profileOf(escalation.userId);
|
14158
|
+
escalate.push(who);
|
14191
14159
|
}
|
14160
|
+
let who = yield profileOf(recipient.userId);
|
14161
|
+
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14162
|
+
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14163
|
+
else
|
14164
|
+
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14165
|
+
}
|
14166
|
+
else {
|
14167
|
+
if (recipient.userId === this._session.userId)
|
14168
|
+
step.name = this._translate.get('You');
|
14192
14169
|
else {
|
14193
|
-
|
14194
|
-
|
14195
|
-
|
14196
|
-
|
14197
|
-
step.name = nameOf(who);
|
14198
|
-
if (who.role)
|
14199
|
-
step.role = who.role;
|
14200
|
-
}
|
14170
|
+
let who = yield profileOf(recipient.userId);
|
14171
|
+
step.name = nameOf(who);
|
14172
|
+
if (who.role)
|
14173
|
+
step.role = who.role;
|
14201
14174
|
}
|
14202
14175
|
}
|
14203
14176
|
trace.push(step);
|
@@ -14236,10 +14209,10 @@ class TraceViewComponent extends TraceBase {
|
|
14236
14209
|
}
|
14237
14210
|
}
|
14238
14211
|
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 });
|
14239
|
-
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>{{'
|
14212
|
+
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] });
|
14240
14213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TraceViewComponent, decorators: [{
|
14241
14214
|
type: Component,
|
14242
|
-
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>{{'
|
14215
|
+
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"] }]
|
14243
14216
|
}], ctorParameters: function () { return [{ type: SessionService }, { type: TranslateService }, { type: AccountService }, { type: ChatInfo }, { type: HubService }]; }, propDecorators: { model: [{
|
14244
14217
|
type: Input
|
14245
14218
|
}], versionSelected: [{
|
@@ -17324,7 +17297,7 @@ class HomeBase {
|
|
17324
17297
|
this._messaging.new$.subscribe(m => {
|
17325
17298
|
const { model: { formId: name, subject, number } } = m;
|
17326
17299
|
const form = this._session.profile.forms.find(f => f.name === name), msg = this._translate.get('NewMail', form.title, number, subject || '');
|
17327
|
-
this._snackBar.open(msg, this._translate.get('OpenNew'), {
|
17300
|
+
this._snackBar.open(msg, m.userId === this._session.profile.userId ? this._translate.get('OpenNew') : null, {
|
17328
17301
|
duration: 5000,
|
17329
17302
|
direction: this._session.direction,
|
17330
17303
|
politeness: 'assertive'
|
@@ -18778,7 +18751,7 @@ class SlotsComponent {
|
|
18778
18751
|
}
|
18779
18752
|
}
|
18780
18753
|
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: SlotsComponent, deps: [{ token: PANES_DATA }, { token: PromptService }, { token: SessionService }, { token: i0.ChangeDetectorRef }, { token: PanesRouter }, { token: WindowTitleService }, { token: GuideService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
18781
|
-
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: SlotsComponent, selector: "bizdoc-panes", host: { listeners: { "document:keydown.escape": "collapse()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["paning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"
|
18754
|
+
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: SlotsComponent, selector: "bizdoc-panes", host: { listeners: { "document:keydown.escape": "collapse()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["paning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #paning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let p of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"p.badge\" [matBadgeHidden]=\"!p.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{p.icon}}</mat-icon> \r\n {{p.title}}\r\n <mat-icon *ngIf=\"p.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"], components: [{ type: i7$1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: QuickToolsComponent, selector: "bizdoc-quicktools" }, { type: i9$3.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { type: NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { type: i9$3.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { type: i13.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], pipes: { "translate": TranslatePipe }, animations: [panesAnimation,
|
18782
18755
|
panesTitleAnimation,
|
18783
18756
|
paneAnimation,
|
18784
18757
|
paramAnimation,
|
@@ -18795,7 +18768,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
18795
18768
|
queryAnimation,
|
18796
18769
|
tabsAnimation,
|
18797
18770
|
tabAnimation
|
18798
|
-
], template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"
|
18771
|
+
], template: "<div class=\"panes\">\r\n <div class=\"backdrop\" [style.display]=\"dialog ? '' : 'none'\"></div>\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #paning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"navigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let p of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"p.badge\" [matBadgeHidden]=\"!p.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{p.icon}}</mat-icon> \r\n {{p.title}}\r\n <mat-icon *ngIf=\"p.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid #00000014;height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"] }]
|
18799
18772
|
}], ctorParameters: function () {
|
18800
18773
|
return [{ type: undefined, decorators: [{
|
18801
18774
|
type: Inject,
|
@@ -26551,7 +26524,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
26551
26524
|
args: ['attr.aria-describedby']
|
26552
26525
|
}] } });
|
26553
26526
|
|
26554
|
-
|
26527
|
+
// https://day.js.org/docs/en/customization/relative-time
|
26528
|
+
dayjs.extend(relativeTime, {
|
26529
|
+
thresholds: [
|
26530
|
+
{ l: 's', r: 1 },
|
26531
|
+
{ l: 'm', r: 1 },
|
26532
|
+
{ l: 'mm', r: 59, d: 'minute' },
|
26533
|
+
{ l: 'h', r: 1 },
|
26534
|
+
{ l: 'hh', r: 24, d: 'hour' },
|
26535
|
+
{ l: 'd', r: 1 },
|
26536
|
+
{ l: 'dd', r: 29, d: 'day' },
|
26537
|
+
{ l: 'M', r: 1 },
|
26538
|
+
{ l: 'MM', r: 11, d: 'month' },
|
26539
|
+
{ l: 'y' },
|
26540
|
+
{ l: 'yy', d: 'year' }
|
26541
|
+
]
|
26542
|
+
});
|
26555
26543
|
dayjs.extend(duration);
|
26556
26544
|
dayjs.extend(calendar);
|
26557
26545
|
const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, CubeChartViewComponent, CubeDocumentSumComponent, CubeDocumentMatrixComponent, CubeDocumentViewComponent, CubePivotViewComponent, TimelineViewComponent,
|
@@ -26936,33 +26924,31 @@ class TraceElementComponent {
|
|
26936
26924
|
this.nodeType = this._session.profile.nodes.find(n => n.name === addInfo.nodeType);
|
26937
26925
|
}
|
26938
26926
|
recipientInfo(recipient) {
|
26939
|
-
|
26940
|
-
|
26941
|
-
|
26942
|
-
|
26943
|
-
|
26944
|
-
const
|
26945
|
-
|
26946
|
-
}
|
26947
|
-
|
26948
|
-
|
26949
|
-
|
26950
|
-
|
26951
|
-
|
26952
|
-
|
26953
|
-
|
26954
|
-
|
26955
|
-
|
26956
|
-
if (
|
26957
|
-
|
26958
|
-
|
26959
|
-
|
26960
|
-
else
|
26961
|
-
|
26962
|
-
|
26963
|
-
|
26964
|
-
return us[0];
|
26965
|
-
}));
|
26927
|
+
return __awaiter(this, void 0, void 0, function* () {
|
26928
|
+
const info = [];
|
26929
|
+
const who = yield this._accounts.get(recipient.userId).toPromise();
|
26930
|
+
if (recipient.escalated) {
|
26931
|
+
const escalations = this.timeline.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
26932
|
+
const escalate = yield this._accounts.get(escalations[0].userId).toPromise();
|
26933
|
+
info.push(this._translate.get('EscalatedBy', this._chat.format(escalate), this._chat.format(who)));
|
26934
|
+
}
|
26935
|
+
if (recipient.substitutingId) {
|
26936
|
+
const substitute = yield this._accounts.get(recipient.substitutingId).toPromise();
|
26937
|
+
if (recipient.byId) {
|
26938
|
+
const by = yield this._accounts.get(recipient.byId).toPromise();
|
26939
|
+
info.push(this._translate.get('SubstitutingBy', this._chat.format(who), this._chat.format(substitute), this._chat.format(by)));
|
26940
|
+
}
|
26941
|
+
else
|
26942
|
+
info.push(this._translate.get('Substituting', this._chat.format(who), this._chat.format(substitute)));
|
26943
|
+
}
|
26944
|
+
else if (recipient.byId) {
|
26945
|
+
const by = yield this._accounts.get(recipient.byId).toPromise();
|
26946
|
+
info.push(this._translate.get('By', this._chat.format(who), this._chat.format(by)));
|
26947
|
+
}
|
26948
|
+
else
|
26949
|
+
info.push(this._chat.format(who));
|
26950
|
+
return info.join(this._translate.comma);
|
26951
|
+
});
|
26966
26952
|
}
|
26967
26953
|
logInfo(log) {
|
26968
26954
|
const observables = [];
|