@bizdoc/core 1.13.0-next.1 → 1.13.0-next.10
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/assets/bizdoc-schema.json +1 -14
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +5 -2
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +22 -26
- package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -2
- package/esm2020/lib/app.component.mjs +1 -1
- package/esm2020/lib/browse/browse-items.component.mjs +4 -4
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +65 -51
- package/esm2020/lib/compose/form.component.mjs +2 -2
- package/esm2020/lib/compose/trace/flow.component.mjs +136 -145
- package/esm2020/lib/compose/trace/trace.component.mjs +24 -32
- package/esm2020/lib/core/hub.service.mjs +1 -1
- package/esm2020/lib/core/mailbox.service.mjs +31 -6
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/slots/slots.component.mjs +3 -3
- package/esm2020/lib/core/translations.mjs +10 -3
- package/esm2020/lib/cube/cube.service.mjs +3 -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/cube/matrix/table.component.mjs +17 -17
- package/esm2020/lib/home/home-base.component.mjs +2 -2
- package/esm2020/lib/shared.module.mjs +17 -2
- package/fesm2015/bizdoc-core.mjs +330 -283
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +326 -281
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/diff/configuration-diff.component.d.ts +1 -0
- package/lib/admin/document-trace/trace-element.component.d.ts +1 -1
- package/lib/app.component.d.ts +2 -2
- package/lib/browse/expanded-item/expanded-item.component.d.ts +6 -6
- package/lib/core/hub.service.d.ts +1 -0
- package/lib/core/mailbox.service.d.ts +4 -1
- package/lib/core/models.d.ts +7 -0
- package/lib/core/translations.d.ts +8 -1
- package/lib/cube/cube.service.d.ts +1 -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++;
|
@@ -1559,20 +1561,43 @@ function isHttpProgressEvent(event) {
|
|
1559
1561
|
}
|
1560
1562
|
function calculateState(upload, event) {
|
1561
1563
|
if (isHttpProgressEvent(event)) {
|
1562
|
-
return {
|
1564
|
+
return new UploadEvent({
|
1563
1565
|
progress: event.total
|
1564
1566
|
? Math.round((100 * event.loaded) / event.total)
|
1565
1567
|
: upload.progress,
|
1566
1568
|
state: 'progress',
|
1567
|
-
};
|
1569
|
+
});
|
1568
1570
|
}
|
1569
1571
|
if (isHttpResponse(event)) {
|
1570
|
-
return {
|
1572
|
+
return new UploadEvent({
|
1571
1573
|
progress: 100,
|
1572
1574
|
state: 'done',
|
1573
|
-
};
|
1575
|
+
});
|
1574
1576
|
}
|
1575
1577
|
return upload;
|
1578
|
+
}
|
1579
|
+
class UploadEvent {
|
1580
|
+
constructor(options) { }
|
1581
|
+
}
|
1582
|
+
function reportprogress(filename) {
|
1583
|
+
return (source) => source.pipe(map(r => {
|
1584
|
+
//if (event instanceof ProgressEvent) {
|
1585
|
+
// observe.next(new UploadEvent(
|
1586
|
+
// file.name,
|
1587
|
+
// (event as ProgressEvent).loaded,
|
1588
|
+
// (event as ProgressEvent).total
|
1589
|
+
// ));
|
1590
|
+
//} else if (event instanceof HttpResponse) {
|
1591
|
+
// const res = event as HttpResponse<any>;
|
1592
|
+
// if (res.status === 200) {
|
1593
|
+
// const model = res.body as Attachment;
|
1594
|
+
// observe.next(model);
|
1595
|
+
// }
|
1596
|
+
// else
|
1597
|
+
// observe.error({ status: res.status, error: res.body });
|
1598
|
+
// observe.complete();
|
1599
|
+
return r;
|
1600
|
+
}));
|
1576
1601
|
}
|
1577
1602
|
|
1578
1603
|
class ActionRef {
|
@@ -1923,7 +1948,7 @@ const STRINGS = {
|
|
1923
1948
|
NoEstimate: '(No estimate)',
|
1924
1949
|
EstimateTime: '(Estimated time {0})',
|
1925
1950
|
NodeStandardTime: '(Standard time: {0})',
|
1926
|
-
EstimateTimeRange: '(Estimated time {0}
|
1951
|
+
EstimateTimeRange: '(Estimated time between {0} and {1})',
|
1927
1952
|
Connect: 'Connect',
|
1928
1953
|
Requirments: 'Requirments',
|
1929
1954
|
Anyone: 'Anyone',
|
@@ -2072,6 +2097,9 @@ const STRINGS = {
|
|
2072
2097
|
YouRepliedTo: 'You replied {0}',
|
2073
2098
|
ReplyingToYou: '{0} in reply to you',
|
2074
2099
|
ByYou: '{0} by you',
|
2100
|
+
ActionBy: '{0} by {1}',
|
2101
|
+
ActionByBy: '{0} by {1} on behalf of {2}',
|
2102
|
+
ActionByYou: '{0} by you',
|
2075
2103
|
Received: 'Received',
|
2076
2104
|
ChangeLanguage: 'Language',
|
2077
2105
|
NewMail: 'New {0} #{1} {2}',
|
@@ -2343,6 +2371,7 @@ const STRINGS = {
|
|
2343
2371
|
Votes: 'Votes',
|
2344
2372
|
Tasks: 'Tasks',
|
2345
2373
|
System: 'System',
|
2374
|
+
Everything: 'Everything',
|
2346
2375
|
NothingHere: 'Nothing to see here',
|
2347
2376
|
Matrix: 'Matrix',
|
2348
2377
|
Working: 'Working on it...'
|
@@ -2379,7 +2408,7 @@ const STRINGS = {
|
|
2379
2408
|
Skipped: '- דולג',
|
2380
2409
|
Route: 'חותמים',
|
2381
2410
|
Trace: 'הסטוריה',
|
2382
|
-
|
2411
|
+
Everything: 'הסטוריה',
|
2383
2412
|
ProfilerSearchHelp: 'הקלד/י שם משתמש ובחר/י מהרשימה כדי לסקור פעולותיו.',
|
2384
2413
|
TraceSearchHelp: 'הקלד/י מספר מסמך ובחר/י כדי לעקוב אחרי תנועותיו.',
|
2385
2414
|
DiagramVersion: 'גרסה {0}',
|
@@ -2740,6 +2769,9 @@ const STRINGS = {
|
|
2740
2769
|
YouRepliedTo: '{0}השבת ל',
|
2741
2770
|
ReplyingToYou: '{0} השיב לך',
|
2742
2771
|
ByYou: '{0} דרכך',
|
2772
|
+
ActionByYou: '{0} דרכך',
|
2773
|
+
ActionByBy: '{0} דרך {1} בשם {2}',
|
2774
|
+
ActionBy: '{0} דרך {1}',
|
2743
2775
|
EscalatedTo: 'החרפה אל {0} אחרי <em>{1}</em>',
|
2744
2776
|
EscalatedFrom: 'החרפה מ-{0} אחרי <em>{1}</em>',
|
2745
2777
|
EscalatedBy: '{0} הועבר אל {1}',
|
@@ -5680,8 +5712,8 @@ class CubeService {
|
|
5680
5712
|
* get segments
|
5681
5713
|
* @param cube
|
5682
5714
|
*/
|
5683
|
-
segments(cube,
|
5684
|
-
return this._cacheOr(`${
|
5715
|
+
segments(cube, name) {
|
5716
|
+
return this._cacheOr(`${name}-segments`, () => this._http.get(`/api/cube/segments/${cube}/${name}`));
|
5685
5717
|
}
|
5686
5718
|
/**
|
5687
5719
|
* get user patterns
|
@@ -6888,15 +6920,15 @@ function getSecondsUntilUpdate(time) {
|
|
6888
6920
|
|
6889
6921
|
const REFRESH_TIME = 30000, TYPING_HINT_TIME = 1500;
|
6890
6922
|
class ExpandedItemComponent {
|
6891
|
-
constructor(_sb, _chat, _accounts,
|
6923
|
+
constructor(_sb, _chat, _accounts, _mailbox, _session, _dir, _dialog, _translate, _messaging) {
|
6892
6924
|
this._sb = _sb;
|
6893
6925
|
this._chat = _chat;
|
6894
6926
|
this._accounts = _accounts;
|
6895
|
-
this._dir = _dir;
|
6896
|
-
this._translate = _translate;
|
6897
6927
|
this._mailbox = _mailbox;
|
6898
|
-
this._dialog = _dialog;
|
6899
6928
|
this._session = _session;
|
6929
|
+
this._dir = _dir;
|
6930
|
+
this._dialog = _dialog;
|
6931
|
+
this._translate = _translate;
|
6900
6932
|
this._messaging = _messaging;
|
6901
6933
|
this.sent = new EventEmitter();
|
6902
6934
|
this._destroy = new Subject();
|
@@ -6904,22 +6936,22 @@ class ExpandedItemComponent {
|
|
6904
6936
|
ngOnInit() {
|
6905
6937
|
this._messaging.comment$.pipe(takeUntil(this._destroy)).
|
6906
6938
|
subscribe(e => {
|
6907
|
-
if (e.id === this.
|
6939
|
+
if (e.id === this.model.id && (e.model.byId || e.model.userId) !== this._session.userId) {
|
6908
6940
|
this._comments();
|
6909
6941
|
this._accounts.get(e.model.userId).subscribe(u => this._sb.toast('Commented', u.gender, u.name));
|
6910
6942
|
}
|
6911
6943
|
});
|
6912
6944
|
this._messaging.update$.pipe(takeUntil(this._destroy)).subscribe(e => {
|
6913
|
-
if (e.model.id === this.
|
6945
|
+
if (e.model.id === this.model.id) {
|
6914
6946
|
this._refresh();
|
6915
|
-
(e.userId !== this._session.userId) && this._accounts.get(e.userId).subscribe(u => this._sb.toast('MailVersionUpdate', this.
|
6947
|
+
(e.userId !== this._session.userId) && this._accounts.get(e.userId).subscribe(u => this._sb.toast('MailVersionUpdate', this.model.number, u.name));
|
6916
6948
|
}
|
6917
6949
|
});
|
6918
6950
|
this._mailbox.changed.pipe(takeUntil(this._destroy)).subscribe(e => {
|
6919
|
-
if (e.id === this.
|
6951
|
+
if (e.id === this.model.id)
|
6920
6952
|
this._refresh();
|
6921
6953
|
});
|
6922
|
-
this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.
|
6954
|
+
this._messaging.commentTyping$.pipe(takeUntil(this._destroy), filter$1(e => e.id === this.model.documentId)).subscribe(c => {
|
6923
6955
|
this.typing = true;
|
6924
6956
|
clearTimeout(this._typingTask);
|
6925
6957
|
this._typingTask = setTimeout(() => this.typing = false, TYPING_HINT_TIME);
|
@@ -6928,40 +6960,37 @@ class ExpandedItemComponent {
|
|
6928
6960
|
this._refreshTask = setInterval(() => this._refresh(), REFRESH_TIME);
|
6929
6961
|
}
|
6930
6962
|
async _note() {
|
6931
|
-
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId } = this.
|
6963
|
+
const { ownerId, issued, substitutingId, received, replied, log, id, note, byId, action, toId, escalated, originId } = this.model;
|
6932
6964
|
if (substitutingId) {
|
6933
|
-
this._accounts.get(substitutingId).
|
6934
|
-
|
6935
|
-
|
6936
|
-
|
6937
|
-
|
6938
|
-
|
6939
|
-
this.note = this._translate.personalize('YouSubstituteActionTaken', u.gender, adjective, this._formatUserElement(u), time);
|
6940
|
-
}
|
6941
|
-
else {
|
6942
|
-
const escalations = issued &&
|
6943
|
-
log.filter(l => l.time > issued &&
|
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
|
-
}
|
6965
|
+
const substituting = await this._accounts.get(substitutingId).toPromise();
|
6966
|
+
if (replied) {
|
6967
|
+
const time = this._fromNow(replied), action = this._session.profile.actions.find(a => a.name === action), adjective = (action.adjective || action.title).toLowerCase();
|
6968
|
+
if (toId) {
|
6969
|
+
const to = await this._accounts.get(toId).toPromise();
|
6970
|
+
this.note = this._translate.personalize('YouSubstituteActionTakenTo', substituting.gender, adjective, this._formatUserElement(to), this._formatUserElement(substituting), time);
|
6954
6971
|
}
|
6955
|
-
|
6972
|
+
else
|
6973
|
+
this.note = this._translate.personalize('YouSubstituteActionTaken', substituting.gender, adjective, this._formatUserElement(substituting), time);
|
6974
|
+
}
|
6975
|
+
else if (escalated) {
|
6976
|
+
const escalations = log.filter(l => l.time > issued &&
|
6977
|
+
l.type === 'Escalation'
|
6978
|
+
&& l.recipientId === id);
|
6979
|
+
this.note = this._translate.personalize('EscalatedFrom', substituting.gender, this._formatUserElement(substituting), this._duration(escalations[0].duration));
|
6980
|
+
}
|
6981
|
+
else {
|
6982
|
+
const time = this._fromNow(received);
|
6983
|
+
this.note = this._translate.personalize('SubstitutingNote', substituting.gender, this._formatUserElement(substituting), time, note || '');
|
6984
|
+
}
|
6956
6985
|
}
|
6957
6986
|
else if (replied) {
|
6958
6987
|
const time = this._fromNow(replied);
|
6959
6988
|
if (byId) {
|
6960
6989
|
if (byId === this._session.profile.byId) {
|
6961
6990
|
if (toId)
|
6962
|
-
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));
|
6963
6992
|
else
|
6964
|
-
this.note = this._translate.get('
|
6993
|
+
this.note = this._translate.get('ActionTakenByYou', this._actionName(action, 'you'), this._session.profile.name, time);
|
6965
6994
|
}
|
6966
6995
|
else
|
6967
6996
|
this._accounts.get(byId).subscribe(u => {
|
@@ -6986,6 +7015,23 @@ class ExpandedItemComponent {
|
|
6986
7015
|
}
|
6987
7016
|
else if (note)
|
6988
7017
|
this.note = note;
|
7018
|
+
else if (originId) {
|
7019
|
+
const origin = this.model.recipients.find(r => r.id === originId);
|
7020
|
+
if (origin.toId) {
|
7021
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action), adjective = action.adjective || action.past || action.title;
|
7022
|
+
if ((origin.byId || origin.userId) === this._session.userId)
|
7023
|
+
this.note = this._translate.get('ActionByYou', adjective);
|
7024
|
+
else if (origin.byId) {
|
7025
|
+
const who = await this._accounts.get(origin.userId).toPromise();
|
7026
|
+
const by = await this._accounts.get(origin.byId).toPromise();
|
7027
|
+
this.note = this._translate.get('ActionByBy', adjective, by.name, who.name);
|
7028
|
+
}
|
7029
|
+
else {
|
7030
|
+
const who = await this._accounts.get(origin.userId).toPromise();
|
7031
|
+
this.note = this._translate.get('ActionBy', adjective, who.name);
|
7032
|
+
}
|
7033
|
+
}
|
7034
|
+
}
|
6989
7035
|
else if (ownerId === this._session.profile.userId && issued) {
|
6990
7036
|
const time = this._fromNow(issued);
|
6991
7037
|
if (byId) {
|
@@ -7026,9 +7072,9 @@ class ExpandedItemComponent {
|
|
7026
7072
|
}
|
7027
7073
|
/** */
|
7028
7074
|
async _refresh() {
|
7029
|
-
const { actions } = this.
|
7075
|
+
const { actions } = this.model;
|
7030
7076
|
this.actions = actions && actions.length ? this._session.profile.actions.filter(a => actions.indexOf(a.name) > -1) : null;
|
7031
|
-
const { senderId } = this.
|
7077
|
+
const { senderId } = this.model;
|
7032
7078
|
// sender
|
7033
7079
|
if (senderId && (senderId !== this._session.userId)) {
|
7034
7080
|
const who = await this._accounts.get(senderId).toPromise();
|
@@ -7039,13 +7085,13 @@ class ExpandedItemComponent {
|
|
7039
7085
|
this._awaiting();
|
7040
7086
|
}
|
7041
7087
|
_comments() {
|
7042
|
-
const { viewed, comments } = this.
|
7088
|
+
const { viewed, comments } = this.model;
|
7043
7089
|
this.newComments = viewed ?
|
7044
7090
|
comments.filter(c => c.time > viewed && (c.byId || c.userId) !== this._session.userId).length || null : null;
|
7045
7091
|
}
|
7046
7092
|
async _awaiting() {
|
7047
7093
|
//awaiting
|
7048
|
-
let recipients = this.
|
7094
|
+
let recipients = this.model.recipients.filter(r => r.pending && !r.estimate).
|
7049
7095
|
sort((r0, r1) => r0.received > r1.received ? 1 : -1).
|
7050
7096
|
map(r => r.userId);
|
7051
7097
|
recipients = recipients.filter((r, i) => recipients.indexOf(r) === i); /* unique */
|
@@ -7076,10 +7122,10 @@ class ExpandedItemComponent {
|
|
7076
7122
|
* @param action
|
7077
7123
|
*/
|
7078
7124
|
send(action) {
|
7079
|
-
const { id, number, version, formId } = this.
|
7125
|
+
const { id, number, version, formId } = this.model;
|
7080
7126
|
const data = {
|
7081
7127
|
action,
|
7082
|
-
item: this.
|
7128
|
+
item: this.model
|
7083
7129
|
};
|
7084
7130
|
this._dialog.open(ActionDialog, {
|
7085
7131
|
data,
|
@@ -7093,10 +7139,10 @@ class ExpandedItemComponent {
|
|
7093
7139
|
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, adjective.toLowerCase(), u.name));
|
7094
7140
|
else
|
7095
7141
|
this._sb.toast('Sent', number, adjective.toLowerCase());
|
7096
|
-
this.sent.emit(this.
|
7142
|
+
this.sent.emit(this.model);
|
7097
7143
|
this.mode = 'done';
|
7098
7144
|
}, e => {
|
7099
|
-
this._handleResponse(e, this.
|
7145
|
+
this._handleResponse(e, this.model, 'SendErr');
|
7100
7146
|
this.mode = 'failed';
|
7101
7147
|
});
|
7102
7148
|
}
|
@@ -7140,12 +7186,12 @@ class ExpandedItemComponent {
|
|
7140
7186
|
this._typingTask && clearTimeout(this._typingTask);
|
7141
7187
|
}
|
7142
7188
|
}
|
7143
|
-
ExpandedItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExpandedItemComponent, deps: [{ token: PromptService }, { token: ChatInfo }, { token: AccountService }, { token:
|
7144
|
-
ExpandedItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: {
|
7189
|
+
ExpandedItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExpandedItemComponent, deps: [{ token: PromptService }, { token: ChatInfo }, { token: AccountService }, { token: MailboxService }, { token: SessionService }, { token: i7$2.Directionality }, { token: i3$2.MatDialog }, { token: TranslateService }, { token: HubService }], target: i0.ɵɵFactoryTarget.Component });
|
7190
|
+
ExpandedItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: { model: "model" }, outputs: { sent: "sent" }, ngImport: i0, template: "<div class=\"summary\" *ngIf=\"model.summary\" [innerHTML]=\"model.summary\">\r\n</div>\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n <ng-container *ngFor=\"let a of actions\">\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" *ngIf=\"a.icon\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small\" fxLayout=\"row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n \r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n \r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span> \r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div fxLayoutAlign=\"center center\">\r\n <span class=\"mat-small\" *ngIf=\"typing\">{{'SomeoneTyping'|translate}}</span>\r\n <div *ngIf=\"model.comments.length\" class=\"mat-small\">\r\n <span *ngIf=\"!newComments; else newcomments\">{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"model.tags\">\r\n <span *ngFor=\"let tag of model.tags\" class=\"mat-chip mat-standard-chip small-chip\">{{tag}}</span>\r\n </div>\r\n</div>\r\n<ng-template #newcomments>\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n</ng-template>\r\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:-moz-fit-content;max-width:fit-content}\n"], components: [{ type: AttachmentsComponent, selector: "bizdoc-attachments", inputs: ["model", "viewedIndicator", "includeDeleted"] }, { type: DocumentEventsComponent, selector: "bizdoc-events", inputs: ["model"] }, { 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"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }], pipes: { "sanitizeHtml": SanitizeHtmlPipe, "state": StatePipe, "amCalendar": CalendarPipe, "amTimeAgo": TimeAgoPipe, "translate": TranslatePipe } });
|
7145
7191
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ExpandedItemComponent, decorators: [{
|
7146
7192
|
type: Component,
|
7147
|
-
args: [{ selector: 'bizdoc-expanded-item', template: "<div class=\"summary\" *ngIf=\"
|
7148
|
-
}], ctorParameters: function () { return [{ type: PromptService }, { type: ChatInfo }, { type: AccountService }, { type:
|
7193
|
+
args: [{ selector: 'bizdoc-expanded-item', template: "<div class=\"summary\" *ngIf=\"model.summary\" [innerHTML]=\"model.summary\">\r\n</div>\r\n<div>\r\n <bizdoc-attachments [model]=\"model\"></bizdoc-attachments>\r\n <bizdoc-events [model]=\"model\"></bizdoc-events>\r\n</div>\r\n<div class=\"row\">\r\n <span class=\"note\" [innerHTML]=\"note | sanitizeHtml\" (click)=\"chat($event)\"></span>\r\n <span class=\"divider\"></span>\r\n <ng-container *ngFor=\"let a of actions\">\r\n <button mat-icon-button (click)=\"send(a.name)\" [bizdocTooltip]=\"a.title\" *ngIf=\"a.icon\" class=\"tool\">\r\n <mat-icon>{{a.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n</div>\r\n<div class=\"row\">\r\n <div class=\"mat-small\" fxLayout=\"row\">\r\n <span>{{model.stateId | state : 'past' }}</span>\r\n \r\n <span class=\"time\" [bizdocTooltip]=\"model.received | amCalendar\">{{model.received | amTimeAgo}}</span>\r\n \r\n <span [innerHTML]=\"sender | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span> \r\n <span [innerHTML]=\"awaiting | sanitizeHtml\" (click)=\"chat($event)\" class=\"who\"></span>\r\n </div>\r\n <span class=\"divider\"></span>\r\n <div fxLayoutAlign=\"center center\">\r\n <span class=\"mat-small\" *ngIf=\"typing\">{{'SomeoneTyping'|translate}}</span>\r\n <div *ngIf=\"model.comments.length\" class=\"mat-small\">\r\n <span *ngIf=\"!newComments; else newcomments\">{{model.comments.length > 1 ? ('CommentsCount' | translate : model.comments.length) : 'OneComment' | translate }}</span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"model.tags\">\r\n <span *ngFor=\"let tag of model.tags\" class=\"mat-chip mat-standard-chip small-chip\">{{tag}}</span>\r\n </div>\r\n</div>\r\n<ng-template #newcomments>\r\n <span [innerHTML]=\"'NewCommentsCount' | translate : model.comments.length : newComments | sanitizeHtml\"></span>\r\n</ng-template>\r\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden;padding-right:24px;padding-left:24px;text-align:start}.row{align-items:center;min-height:27px;flex-direction:row;box-sizing:border-box;display:flex}.note{font-weight:200}.time{text-transform:uppercase}.summary{max-width:-moz-fit-content;max-width:fit-content}\n"] }]
|
7194
|
+
}], ctorParameters: function () { return [{ type: PromptService }, { type: ChatInfo }, { type: AccountService }, { type: MailboxService }, { type: SessionService }, { type: i7$2.Directionality }, { type: i3$2.MatDialog }, { type: TranslateService }, { type: HubService }]; }, propDecorators: { model: [{
|
7149
7195
|
type: Input
|
7150
7196
|
}], sent: [{
|
7151
7197
|
type: Output
|
@@ -7245,7 +7291,7 @@ class BrowseItemsComponent {
|
|
7245
7291
|
this._remove(item);
|
7246
7292
|
});
|
7247
7293
|
this._messaging.new$.pipe(takeUntil(this._destroy)).subscribe(m => {
|
7248
|
-
if (!this.dataSource)
|
7294
|
+
if (!this.dataSource || m.userId !== this._session.profile.userId)
|
7249
7295
|
return;
|
7250
7296
|
const item = this.dataSource.data.find(c => c.id === m.model.id);
|
7251
7297
|
if (!item && this.folderId === m.model.folderId) {
|
@@ -7578,7 +7624,7 @@ class BrowseItemsComponent {
|
|
7578
7624
|
}
|
7579
7625
|
}
|
7580
7626
|
BrowseItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BrowseItemsComponent, deps: [{ token: MailboxService }, { token: AccountService }, { token: CubeService }, { token: SessionService }, { token: PromptService }, { token: TranslateService }, { token: i0.ChangeDetectorRef }, { token: RouterImpl }, { token: HubService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
7581
|
-
BrowseItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\" *ngIf=\"enableAnalysis\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [item]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], components: [{ type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { type: i10$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { 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: i6$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["item"], outputs: ["sent"] }, { type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i18.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i8$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i22.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i6$2.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5$1.MatCellDef, selector: "[matCellDef]" }, { type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i25.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i8$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i22.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i25.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i22.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { type: i22.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { type: i8$2.MatMenuContent, selector: "ng-template[matMenuContent]" }], pipes: { "translate": TranslatePipe, "amCalendar": CalendarPipe, "amTimeAgo": TimeAgoPipe, "number": i10.DecimalPipe, "currency": i10.CurrencyPipe }, animations: [
|
7627
|
+
BrowseItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BrowseItemsComponent, selector: "bizdoc-browse-items", inputs: { folderId: "folderId", filterType: "filterType", filters: "filters" }, outputs: { onopen: "open", onview: "view" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\" *ngIf=\"enableAnalysis\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [model]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"], components: [{ type: NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { type: i10$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i5$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { 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: i6$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: ExpandedItemComponent, selector: "bizdoc-expanded-item", inputs: ["model"], outputs: ["sent"] }, { type: i5$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i5$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i18.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i8$2.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i22.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i6$2.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i5$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i5$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i5$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i5$1.MatCellDef, selector: "[matCellDef]" }, { type: i5$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: StateDirective, selector: "bizdoc-status", inputs: ["stateId"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i25.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i8$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i5$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i5$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i22.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i6.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i25.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i22.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { type: i22.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { type: i8$2.MatMenuContent, selector: "ng-template[matMenuContent]" }], pipes: { "translate": TranslatePipe, "amCalendar": CalendarPipe, "amTimeAgo": TimeAgoPipe, "number": i10.DecimalPipe, "currency": i10.CurrencyPipe }, animations: [
|
7582
7628
|
listAnimation,
|
7583
7629
|
itemAnimation,
|
7584
7630
|
expandListItemAnimation,
|
@@ -7591,7 +7637,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
7591
7637
|
itemAnimation,
|
7592
7638
|
expandListItemAnimation,
|
7593
7639
|
listItemUpdatedAnimation
|
7594
|
-
], template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\" *ngIf=\"enableAnalysis\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [item]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
|
7640
|
+
], template: "<bizdoc-none *ngIf=\"dataSource?.data.length === 0\" title=\"NoMessages\" [subtitle]=\"!isMobile && folderId === DRAFT ? 'AltN' : null\" icon=\"mail_outline\"></bizdoc-none>\r\n<mat-progress-bar mode=\"query\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<mat-table cdkDropList class=\"data-table\"\r\n [cdkDropListDisabled]=\"isMobile\"\r\n [cdkDropListData]=\"dataSource?.data\"\r\n cdkDropListConnectedTo=\"folders\"\r\n cdkDropListSortingDisabled\r\n [dataSource]=\"dataSource\" matSort multiTemplateDataRows (matSortChange)=\"sortData()\"\r\n id=\"browse-table\" [@list]=\"dataSource\" [style.display]=\"dataSource?.data.length ?'':'none'\">\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef>\r\n <div class=\"\"></div>\r\n <mat-checkbox (change)=\"$event ? masterToggle() : null\" [aria-label]=\"'Check'|translate\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <mat-checkbox (click)=\"$event.stopPropagation()\" [aria-label]=\"'Check'|translate\"\r\n (change)=\"$event ? selection.toggle(item) : null\"\r\n [checked]=\"selection.isSelected(item)\">\r\n </mat-checkbox>\r\n <!-- drag -->\r\n <!--<button mat-icon-button cdkDragHandle\r\n (mousedown)=\"dragDisabled = false\"\r\n (mouseup)=\"dragDisabled = true\"\r\n (touchstart)=\"dragDisabled = false\"\r\n (touchend)=\"dragDisabled = true\"\r\n class=\"drag\" aria-disabled=\"true\" fxHide.xs>\r\n <mat-icon>drag_indicator</mat-icon>\r\n </button>-->\r\n <button mat-icon-button (click)=\"toggleExpanded(item, $event)\" [bizdocTooltip]=\"'Details' | translate\" [attr.aria-label]=\"'Details' | translate\" class=\"tool\"><mat-icon>{{item == expandedElement ? 'unfold_less' : 'unfold_more'}}</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Number column -->\r\n <ng-container matColumnDef=\"number\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Number' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.number}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- Subject column -->\r\n <ng-container matColumnDef=\"subject\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Subject' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.subject}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"owner\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Owner' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.ownerId\" [identity]=\"item.ownerId\" [by]=\"item.ownerById\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sender\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Sender' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-identity-name *ngIf=\"item.senderId\" [identity]=\"item.senderId\" [by]=\"item.byId\"></bizdoc-identity-name>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"received\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.received | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"receivedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"received\">{{'Received' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.received | amCalendar\">{{item.received | amTimeAgo}}</mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"replied\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Replied' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.replied | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issued\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.issued | amCalendar}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"issuedAgo\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"issued\">{{'Issued' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\" [bizdocTooltip]=\"item.issued | amCalendar\"> {{item.issued | amTimeAgo}} </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"state\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header=\"stateId\">{{'Status' | translate }}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <bizdoc-status [stateId]=\"item.stateId\"></bizdoc-status>\r\n </mat-cell>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"customColumns\">\r\n <ng-container *ngFor=\"let c of customColumns\" [matColumnDef]=\"c.name\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header> {{c.title}} </mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\">\r\n <ng-container [ngSwitch]=\"c.type\">\r\n <span *ngSwitchCase=\"'Date'\">\r\n {{item.model[c.name] | amCalendar }}\r\n </span>\r\n <span *ngSwitchCase=\"'Decimal'\">\r\n {{item.model[c.name] | number }}\r\n </span>\r\n <span *ngSwitchCase=\"'Boolean'\">\r\n <mat-checkbox [checked]=\"item.model[c.name]\" [disabled]=\"true\"></mat-checkbox>\r\n </span>\r\n <span *ngSwitchDefault>\r\n {{item.model[c.name]}}z\r\n </span>\r\n </ng-container>\r\n </mat-cell>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Value column -->\r\n <ng-container matColumnDef=\"value\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header>{{'Amount' | translate}}</mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\" class=\"data-column\"> {{item.value | currency : item.currencyCode : 'symbol' : currencyFormat}} </mat-cell>\r\n </ng-container>\r\n\r\n <!-- options column -->\r\n <ng-container matColumnDef=\"options\">\r\n <mat-header-cell *matHeaderCellDef></mat-header-cell>\r\n <mat-cell *matCellDef=\"let item\">\r\n <button mat-icon-button (click)=\"flag(item, $event)\" [bizdocTooltip]=\"'Flagged'| translate\" [attr.aria-label]=\"'ToggleFlagged' | translate\" class=\"tool\"><mat-icon [class.document-flag]=\"item.flag\">{{item.flag ? 'star' : 'star_border'}}</mat-icon></button>\r\n <button mat-icon-button (click)=\"view(item, $event)\" [bizdocTooltip]=\"'View' | translate\" [attr.aria-label]=\"'View' | translate\" class=\"tool\" *ngIf=\"enableAnalysis\"><mat-icon>data_usage</mat-icon></button>\r\n <button mat-icon-button (click)=\"$event.stopPropagation()\" [matMenuTriggerFor]=\"menu\" fxHide.xs [matMenuTriggerData]=\"{item: item}\" [bizdocTooltip]=\"'Options' | translate\" [attr.aria-label]=\"'Options' | translate\" class=\"tool\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-cell>\r\n </ng-container>\r\n <!-- Expanded Content Column -->\r\n <ng-container matColumnDef=\"expandedDetail\">\r\n <mat-cell *matCellDef=\"let item\" [attr.colspan]=\"displayedColumns.length\" [@updated]=\"item == updatedElement\"\r\n [class.read-row]=\"item.read\">\r\n <div [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\" style=\"width: 100%\">\r\n <bizdoc-expanded-item [model]=\"item\" *ngIf=\"item == expandedElement\"></bizdoc-expanded-item>\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></mat-header-row>\r\n <mat-row @item [@updated]=\"item == updatedElement\"\r\n *matRowDef=\"let item; let dataIndex = dataIndex; columns: displayedColumns;\" class=\"element-row\"\r\n cdkDrag [cdkDragData]=\"item\"\r\n [cdkDragDisabled]=\"dragDisabled\"\r\n (cdkDragReleased)=\"dragDisabled = true\"\r\n [ngClass]=\"{'selecteded-row': selectedElement === item,\r\n 'expanded-row': expandedElement === item,\r\n 'odd-row': dataIndex % 2,\r\n 'read-row': item.read}\" matRipple\r\n (click)=\"open(item, $event)\">\r\n <div *cdkDragPreview>\r\n <button mat-icon-button aria-disabled=\"true\"><mat-icon>drag_indicator</mat-icon></button> <span>#{{item.number}}</span>\r\n </div>\r\n <div *cdkDragPlaceholder>\r\n <!-- none -->\r\n </div>\r\n </mat-row>\r\n <mat-row *matRowDef=\"let item; ; let dataIndex = dataIndex; columns: ['expandedDetail']\"\r\n class=\"detail-row\" matRipple\r\n [ngClass]=\"{ 'selecteded-row': selectedElement === item,\r\n 'odd-row': dataIndex % 2\r\n }\"></mat-row>\r\n</mat-table>\r\n<mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"PAGE_SIZE\" [style.display]=\"!isMobile && dataSource?.data.length>PAGE_SIZE ? '':'none'\"></mat-paginator>\r\n<mat-menu #menu=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <button mat-menu-item (click)=\"open(item, $event)\">{{'Open'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"toggleRead(item)\">{{(item.read ?'MarkAsUnread':'MarkAsRead')|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"copy(item)\">{{'Copy'| translate}}</button>\r\n </ng-template>\r\n</mat-menu>\r\n", styles: ["#browse-table{width:100%}#browse-table .detail-row{min-height:0}#browse-table .element-row{cursor:pointer}#browse-table .element-row .drag{cursor:move}#browse-table .read-row{font-weight:100}@media screen and (min-width: 600px){.mat-row .tool{opacity:.05}.mat-row:hover .tool{opacity:1}}::ng-deep .mat-column-options{justify-content:end;padding-inline-end:8px}::ng-deep .mat-column-value{justify-content:right}::ng-deep .mat-column-select{white-space:nowrap}::ng-deep .mat-column-number{white-space:nowrap}\n"] }]
|
7595
7641
|
}], ctorParameters: function () { return [{ type: MailboxService }, { type: AccountService }, { type: CubeService }, { type: SessionService }, { type: PromptService }, { type: TranslateService }, { type: i0.ChangeDetectorRef }, { type: RouterImpl }, { type: HubService }, { type: undefined, decorators: [{
|
7596
7642
|
type: Inject,
|
7597
7643
|
args: [BIZDOC_CONFIG]
|
@@ -8450,7 +8496,7 @@ class ComposeFormComponent {
|
|
8450
8496
|
return this._mailbox.send(id, version, formId, model, action, params).
|
8451
8497
|
subscribe(r => {
|
8452
8498
|
if (r.toId)
|
8453
|
-
this._accounts.get(r.toId).subscribe(u => this._sb.toast('
|
8499
|
+
this._accounts.get(r.toId).subscribe(u => this._sb.toast('SentTo', number, this._getActionAdjective(action), u.name));
|
8454
8500
|
else
|
8455
8501
|
this._sb.toast('Sent', number, this._getActionAdjective(action));
|
8456
8502
|
this.working = false;
|
@@ -11925,6 +11971,7 @@ class ExploreItemsComponent {
|
|
11925
11971
|
});
|
11926
11972
|
}
|
11927
11973
|
_datasource(data) {
|
11974
|
+
this._data = data;
|
11928
11975
|
this.dataSource = new MatTableDataSource(data);
|
11929
11976
|
this.dataSource.sort = this.sort;
|
11930
11977
|
this.dataSource.paginator = this.paginator;
|
@@ -11949,7 +11996,7 @@ class ExploreItemsComponent {
|
|
11949
11996
|
}
|
11950
11997
|
}))
|
11951
11998
|
}];
|
11952
|
-
this.
|
11999
|
+
this._data.forEach((r, i) => rows.push({
|
11953
12000
|
index: i + 2,
|
11954
12001
|
cells: this.columns.map((c, j) => {
|
11955
12002
|
const isnumber = c.type === 'Currency' || c.type === 'Number';
|
@@ -12054,6 +12101,7 @@ class CubeExplorePaneComponent {
|
|
12054
12101
|
relativeTo: this._pane,
|
12055
12102
|
queryParams: this.axes,
|
12056
12103
|
state: { item },
|
12104
|
+
policy: OpenPolicy.Tab | OpenPolicy.Dismissable,
|
12057
12105
|
group: this._pane.group
|
12058
12106
|
});
|
12059
12107
|
this.loading = false;
|
@@ -12527,7 +12575,7 @@ class WorkflowNodeComponent {
|
|
12527
12575
|
if (annotationArg && m[annotationArg.name] !== null && m[annotationArg.name] !== undefined) {
|
12528
12576
|
node.annotations[0].content = m[annotationArg.name];
|
12529
12577
|
}
|
12530
|
-
Object.assign(addInfo, m);
|
12578
|
+
Object.assign(addInfo, cleanup(m));
|
12531
12579
|
this.change.emit();
|
12532
12580
|
}
|
12533
12581
|
if (tool.template) {
|
@@ -13173,8 +13221,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
13173
13221
|
args: [{ name: 'amDurationFormat' }]
|
13174
13222
|
}], ctorParameters: function () { return [{ type: TranslateService }]; } });
|
13175
13223
|
|
13176
|
-
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding /*, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13177
|
-
const
|
13224
|
+
Diagram.Inject(ComplexHierarchicalTree, BpmnDiagrams, DataBinding, LineDistribution /*, LineRouting, ConnectorBridging, LayoutAnimation, LineRouting, ConnectorBridging*/);
|
13225
|
+
const
|
13226
|
+
//ELLIPSIS = 'M 650, 150 a 75,150 0 1,0 1,0 z',
|
13227
|
+
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
13228
|
/** flow-view component*/
|
13179
13229
|
class FlowViewComponent extends TraceBase {
|
13180
13230
|
/** workflow-view ctor */
|
@@ -13190,19 +13240,20 @@ class FlowViewComponent extends TraceBase {
|
|
13190
13240
|
this.diagramConstraints = DiagramConstraints.Default |
|
13191
13241
|
DiagramConstraints.Pan |
|
13192
13242
|
DiagramConstraints.LineRouting |
|
13193
|
-
DiagramConstraints.
|
13243
|
+
DiagramConstraints.Zoom;
|
13194
13244
|
this.layout = {
|
13195
13245
|
type: 'ComplexHierarchicalTree',
|
13196
13246
|
connectionPointOrigin: ConnectionPointOrigin.DifferentPoint,
|
13197
13247
|
horizontalSpacing: 50,
|
13248
|
+
enableRouting: true,
|
13198
13249
|
verticalSpacing: 50,
|
13199
|
-
|
13250
|
+
horizontalAlignment: 'Center',
|
13200
13251
|
connectionDirection: 'Orientation',
|
13201
13252
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
13202
|
-
margin: { left: 10, right: 10, top: 10, bottom: 10 }
|
13203
13253
|
};
|
13204
13254
|
this.scrollSettings = {
|
13205
13255
|
minZoom: .5,
|
13256
|
+
scrollLimit: 'Limited',
|
13206
13257
|
canAutoScroll: true,
|
13207
13258
|
currentZoom: 1.2,
|
13208
13259
|
padding: { top: 0, bottom: 0 },
|
@@ -13285,7 +13336,6 @@ class FlowViewComponent extends TraceBase {
|
|
13285
13336
|
obj.style.strokeWidth = 0;
|
13286
13337
|
}
|
13287
13338
|
else {
|
13288
|
-
// obj.shape = { type: 'Bpmn', shape: 'Event' } as BpmnShapeModel;
|
13289
13339
|
obj.width = obj.height = 50;
|
13290
13340
|
if (obj.annotations && obj.annotations.length)
|
13291
13341
|
obj.annotations[0].style.color = this._session.theme.dark ? 'white' : 'black';
|
@@ -13296,7 +13346,8 @@ class FlowViewComponent extends TraceBase {
|
|
13296
13346
|
}
|
13297
13347
|
else {
|
13298
13348
|
obj.style.strokeColor = this._accentColor;
|
13299
|
-
obj.style.fill = recipient && recipient.pending ?
|
13349
|
+
obj.style.fill = recipient && recipient.pending ?
|
13350
|
+
this._session.getAccent(recipient.userId === this._session.userId ? 500 : 400) : 'transparent';
|
13300
13351
|
}
|
13301
13352
|
obj.style.strokeWidth = 2;
|
13302
13353
|
}
|
@@ -13391,7 +13442,7 @@ class FlowViewComponent extends TraceBase {
|
|
13391
13442
|
}
|
13392
13443
|
}]
|
13393
13444
|
};
|
13394
|
-
if (r > 0)
|
13445
|
+
if (r > 0)
|
13395
13446
|
dconnectors.forEach(c => {
|
13396
13447
|
if (c.targetId === node.id)
|
13397
13448
|
connectors.push({
|
@@ -13401,7 +13452,10 @@ class FlowViewComponent extends TraceBase {
|
|
13401
13452
|
estimate: c.estimate
|
13402
13453
|
}
|
13403
13454
|
});
|
13404
|
-
if (c.sourceId === node.id)
|
13455
|
+
if (c.sourceId === node.id) {
|
13456
|
+
//
|
13457
|
+
if (c.virtual && c.originId && c.originId !== recipient.id)
|
13458
|
+
return;
|
13405
13459
|
connectors.push({
|
13406
13460
|
sourceID: nod.id,
|
13407
13461
|
targetID: c.targetId,
|
@@ -13409,8 +13463,8 @@ class FlowViewComponent extends TraceBase {
|
|
13409
13463
|
estimate: c.estimate
|
13410
13464
|
}
|
13411
13465
|
});
|
13466
|
+
}
|
13412
13467
|
});
|
13413
|
-
}
|
13414
13468
|
nodes.push(nod);
|
13415
13469
|
if (recipient.action) {
|
13416
13470
|
const action = this._session.profile.actions.find(a => a.name === recipient.action);
|
@@ -13433,56 +13487,40 @@ class FlowViewComponent extends TraceBase {
|
|
13433
13487
|
indicators.push(actionIndicator);
|
13434
13488
|
}
|
13435
13489
|
}
|
13436
|
-
if (recipient.
|
13490
|
+
if (recipient.fyi)
|
13437
13491
|
indicators.push({
|
13438
|
-
id: nod.id + '
|
13492
|
+
id: nod.id + 'fyi',
|
13439
13493
|
shape: {
|
13440
13494
|
type: 'Path',
|
13441
|
-
data:
|
13442
|
-
align: this._session.inverse ? '
|
13495
|
+
data: FYI_PATH,
|
13496
|
+
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13443
13497
|
},
|
13444
13498
|
style: {
|
13445
|
-
fill:
|
13499
|
+
fill: '#1976d2'
|
13446
13500
|
},
|
13447
13501
|
addInfo: {
|
13448
13502
|
indicator: true,
|
13449
13503
|
parentId: nod.id
|
13450
13504
|
}
|
13451
13505
|
});
|
13452
|
-
if (recipient.
|
13453
|
-
|
13454
|
-
id: nod.id + '
|
13506
|
+
if (recipient.escalated) {
|
13507
|
+
const escalateIndicator = {
|
13508
|
+
id: nod.id + 'escalate',
|
13455
13509
|
shape: {
|
13456
13510
|
type: 'Path',
|
13457
|
-
data:
|
13511
|
+
data: ESCALATED_PATH,
|
13458
13512
|
align: this._session.inverse ? 'XMinYMax' : 'XMaxYMax'
|
13459
13513
|
},
|
13460
13514
|
style: {
|
13461
|
-
fill:
|
13515
|
+
fill: this._session.getAccent(900)
|
13462
13516
|
},
|
13463
13517
|
addInfo: {
|
13464
13518
|
indicator: true,
|
13465
13519
|
parentId: nod.id
|
13466
13520
|
}
|
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
|
-
// }
|
13521
|
+
};
|
13522
|
+
indicators.push(escalateIndicator);
|
13523
|
+
}
|
13486
13524
|
}
|
13487
13525
|
}
|
13488
13526
|
else {
|
@@ -13549,36 +13587,6 @@ class FlowViewComponent extends TraceBase {
|
|
13549
13587
|
}
|
13550
13588
|
}
|
13551
13589
|
}
|
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
13590
|
return { connectors, nodes, indicators };
|
13583
13591
|
}
|
13584
13592
|
/**
|
@@ -13594,7 +13602,7 @@ class FlowViewComponent extends TraceBase {
|
|
13594
13602
|
const stateLog = log.find(l => l.type === 'StateChange');
|
13595
13603
|
if (stateLog) {
|
13596
13604
|
state = this._session.profile.states.find(s => s.name === stateLog.state);
|
13597
|
-
annotation =
|
13605
|
+
annotation = (node.estimate ? state.future : state.past) || state.title;
|
13598
13606
|
}
|
13599
13607
|
if (node.type === START_NODE) {
|
13600
13608
|
if (!node.estimate) {
|
@@ -13615,8 +13623,8 @@ class FlowViewComponent extends TraceBase {
|
|
13615
13623
|
const { min, max } = super._estimateTime(node);
|
13616
13624
|
if (max)
|
13617
13625
|
return !min || min === max ?
|
13618
|
-
this._translate.get('EstimateTime',
|
13619
|
-
this._translate.get('EstimateTimeRange',
|
13626
|
+
this._translate.get('EstimateTime', dayjs.duration(max).humanize()) :
|
13627
|
+
this._translate.get('EstimateTimeRange', dayjs.duration(min).humanize(), dayjs.duration(max).humanize());
|
13620
13628
|
}
|
13621
13629
|
_tooltip(obj) {
|
13622
13630
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
@@ -13668,23 +13676,55 @@ class FlowViewComponent extends TraceBase {
|
|
13668
13676
|
const tooltip = {};
|
13669
13677
|
let annotation;
|
13670
13678
|
// you
|
13671
|
-
if (
|
13672
|
-
|
13673
|
-
|
13674
|
-
|
13675
|
-
|
13676
|
-
|
13677
|
-
|
13678
|
-
|
13679
|
-
|
13679
|
+
if (recipient.userId === this._session.userId) {
|
13680
|
+
if (this._session.isImpersonating)
|
13681
|
+
annotation = this._session.profile.name;
|
13682
|
+
else
|
13683
|
+
annotation = this._translate.get('You');
|
13684
|
+
if (recipient.role) {
|
13685
|
+
const role = this._session.profile.roles.find(o => o.name === recipient.role);
|
13686
|
+
if (role)
|
13687
|
+
tooltip.role = `- ${role.title}`;
|
13688
|
+
}
|
13689
|
+
}
|
13690
|
+
else
|
13691
|
+
// someone else
|
13692
|
+
{
|
13693
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13694
|
+
annotation = who.name;
|
13695
|
+
if (who.role)
|
13696
|
+
tooltip.role = `- ${who.role}`;
|
13697
|
+
else if (recipient.role) {
|
13698
|
+
const role = this._session.profile.roles.find(o => o.name === recipient.role);
|
13699
|
+
if (role)
|
13700
|
+
tooltip.role = `- ${role.title}`;
|
13701
|
+
}
|
13702
|
+
}
|
13703
|
+
if (recipient.replied) {
|
13704
|
+
const time = this._fromNow(recipient.replied);
|
13705
|
+
if (recipient.byId) {
|
13706
|
+
if (recipient.byId === this._session.profile.byId) {
|
13707
|
+
const action = this._action(recipient.action, this._session.profile.byGender);
|
13708
|
+
if (recipient.toId) {
|
13709
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
13710
|
+
if (recipient.userId === this._session.profile.userId)
|
13680
13711
|
tooltip.note = this._translate.get('ActionTakenByYouTo', action, to.name, this._session.profile.name, time);
|
13712
|
+
else {
|
13713
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13714
|
+
tooltip.note = this._translate.get('ActionTakenByYouTo', action, to.name, who.name, time);
|
13681
13715
|
}
|
13682
|
-
else
|
13683
|
-
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, time);
|
13684
13716
|
}
|
13717
|
+
else if (recipient.userId === this._session.profile.userId)
|
13718
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, time);
|
13685
13719
|
else {
|
13686
|
-
const
|
13687
|
-
|
13720
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13721
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, who.name, time);
|
13722
|
+
}
|
13723
|
+
}
|
13724
|
+
else {
|
13725
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
13726
|
+
const action = this._action(recipient.action, by.gender);
|
13727
|
+
if (recipient.userId === this._session.profile.userId) {
|
13688
13728
|
if (recipient.toId) {
|
13689
13729
|
const to = await this._accounts.get(recipient.toId).toPromise();
|
13690
13730
|
tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, to.name, time);
|
@@ -13692,75 +13732,57 @@ class FlowViewComponent extends TraceBase {
|
|
13692
13732
|
else
|
13693
13733
|
tooltip.note = this._translate.get('YouTakenActionBy', by.name, action, time);
|
13694
13734
|
}
|
13735
|
+
else {
|
13736
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13737
|
+
if (recipient.toId) {
|
13738
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
13739
|
+
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, to.name, who.name, time);
|
13740
|
+
}
|
13741
|
+
else
|
13742
|
+
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name, time);
|
13743
|
+
}
|
13695
13744
|
}
|
13696
|
-
|
13697
|
-
|
13745
|
+
}
|
13746
|
+
else if (recipient.toId) {
|
13747
|
+
const to = await this._accounts.get(recipient.toId).toPromise();
|
13748
|
+
if (recipient.userId === this._session.profile.userId) {
|
13698
13749
|
const action = this._action(recipient.action, this._session.profile.gender);
|
13699
13750
|
if (this._session.isImpersonating)
|
13700
13751
|
tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, to.name, time);
|
13701
13752
|
else
|
13702
13753
|
tooltip.note = this._translate.get('YouTakenActionTo', action, to.name, time);
|
13703
13754
|
}
|
13704
|
-
else if (this._session.isImpersonating) {
|
13705
|
-
const action = this._action(recipient.action, this._session.profile.gender);
|
13706
|
-
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, time);
|
13707
|
-
}
|
13708
13755
|
else {
|
13709
|
-
const
|
13710
|
-
|
13756
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13757
|
+
const action = this._action(recipient.action, who.gender);
|
13758
|
+
tooltip.note = this._translate.get('ActionTakenTo', who.name, action, to.name);
|
13711
13759
|
}
|
13712
13760
|
}
|
13713
|
-
else if (
|
13714
|
-
const
|
13715
|
-
|
13716
|
-
tooltip.note = this._translate.personalize('ReceivedBy', this._session.profile.gender, this._session.profile.name, time);
|
13717
|
-
else
|
13718
|
-
tooltip.note = this._translate.get('YouReceived', time);
|
13761
|
+
else if (this._session.isImpersonating) {
|
13762
|
+
const action = this._action(recipient.action, this._session.profile.gender);
|
13763
|
+
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, time);
|
13719
13764
|
}
|
13720
|
-
if (recipient.
|
13721
|
-
const
|
13722
|
-
|
13723
|
-
|
13765
|
+
else if (recipient.userId === this._session.profile.userId) {
|
13766
|
+
const action = this._action(recipient.action, You);
|
13767
|
+
tooltip.note = this._translate.get('YouTakenAction', action, time);
|
13768
|
+
}
|
13769
|
+
else {
|
13770
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
13771
|
+
const action = this._action(recipient.action, who.gender);
|
13772
|
+
tooltip.note = this._translate.get('ActionTaken', who.name, action, time);
|
13724
13773
|
}
|
13725
13774
|
}
|
13726
|
-
else
|
13727
|
-
|
13728
|
-
|
13775
|
+
else if (!node.estimate) {
|
13776
|
+
const time = this._fromNow(recipient.received);
|
13777
|
+
if (this._session.isImpersonating)
|
13778
|
+
tooltip.note = this._translate.personalize('ReceivedBy', this._session.profile.gender, this._session.profile.name, time);
|
13779
|
+
else
|
13780
|
+
tooltip.note = this._translate.get('YouReceived', time);
|
13781
|
+
}
|
13782
|
+
else if (!recipient.estimate) {
|
13729
13783
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
13730
|
-
|
13731
|
-
|
13732
|
-
tooltip.role = `- ${who.role}`;
|
13733
|
-
else if (recipient.role) {
|
13734
|
-
const crole = this._session.profile.roles.find(o => o.name === recipient.role);
|
13735
|
-
if (crole)
|
13736
|
-
tooltip.role = `- ${crole.title}`;
|
13737
|
-
}
|
13738
|
-
if (recipient.replied) {
|
13739
|
-
const time = this._fromNow(recipient.replied);
|
13740
|
-
if (recipient.byId) {
|
13741
|
-
const by = await this._accounts.get(recipient.byId).toPromise();
|
13742
|
-
const action = this._action(recipient.action, by.gender);
|
13743
|
-
if (recipient.toId) {
|
13744
|
-
const to = await this._accounts.get(recipient.toId).toPromise();
|
13745
|
-
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, to.name, who.name, time);
|
13746
|
-
}
|
13747
|
-
else
|
13748
|
-
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name, time);
|
13749
|
-
}
|
13750
|
-
else if (recipient.toId) {
|
13751
|
-
const to = await this._accounts.get(recipient.toId).toPromise();
|
13752
|
-
const action = this._action(recipient.action, who.gender);
|
13753
|
-
tooltip.note = this._translate.get('ActionTakenTo', who.name, action, to.name);
|
13754
|
-
}
|
13755
|
-
else {
|
13756
|
-
const action = this._action(recipient.action, who.gender);
|
13757
|
-
tooltip.note = this._translate.get('ActionTaken', who.name, action, time);
|
13758
|
-
}
|
13759
|
-
}
|
13760
|
-
else if (!recipient.estimate) {
|
13761
|
-
const time = this._fromNow(recipient.received);
|
13762
|
-
tooltip.note = this._translate.personalize('ReceivedTime', who.gender, time);
|
13763
|
-
}
|
13784
|
+
const time = this._fromNow(recipient.received);
|
13785
|
+
tooltip.note = this._translate.personalize('ReceivedTime', who.gender, time);
|
13764
13786
|
}
|
13765
13787
|
if (recipient.substitutingId) {
|
13766
13788
|
if (recipient.substitutingId === this._session.userId)
|
@@ -13770,11 +13792,28 @@ class FlowViewComponent extends TraceBase {
|
|
13770
13792
|
tooltip.substituting = this._translate.personalize('SubstitutingFor', substituting.gender, substituting.name);
|
13771
13793
|
}
|
13772
13794
|
}
|
13773
|
-
|
13774
|
-
|
13795
|
+
if (recipient.originId && !recipient.replied) {
|
13796
|
+
const origin = this.model.recipients.find(r => r.id === recipient.originId);
|
13797
|
+
if (origin.toId) {
|
13798
|
+
const action = this._session.profile.actions.find(a => a.name === origin.action), adjective = action.adjective || action.past || action.title;
|
13799
|
+
if ((origin.byId || origin.userId) === this._session.userId)
|
13800
|
+
tooltip.substituting = this._translate.get('ActionByYou', adjective);
|
13801
|
+
else if (origin.byId) {
|
13802
|
+
const who = await this._accounts.get(origin.userId).toPromise();
|
13803
|
+
const by = await this._accounts.get(origin.byId).toPromise();
|
13804
|
+
tooltip.substituting = this._translate.get('ActionByBy', adjective, by.name, who.name);
|
13805
|
+
}
|
13806
|
+
else {
|
13807
|
+
const who = await this._accounts.get(origin.userId).toPromise();
|
13808
|
+
tooltip.substituting = this._translate.get('ActionBy', adjective, who.name);
|
13809
|
+
}
|
13810
|
+
}
|
13811
|
+
}
|
13812
|
+
if (recipient.escalated) {
|
13813
|
+
const escalations = this.model.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
13775
13814
|
const userIds = escalations.map(e => e.userId);
|
13776
13815
|
const users = await this._accounts.getAll(userIds).toPromise();
|
13777
|
-
const duration = this._duration.transform(dayjs(escalations[escalations.length - 1].
|
13816
|
+
const duration = this._duration.transform(dayjs.duration(escalations[escalations.length - 1].duration, 's'));
|
13778
13817
|
tooltip.escalation = this._translate.get('EscalatedTo', this._translate.join(users.map(u => u.name)), duration);
|
13779
13818
|
}
|
13780
13819
|
if (recipient.replied) {
|
@@ -13988,22 +14027,16 @@ class TraceViewComponent extends TraceBase {
|
|
13988
14027
|
}
|
13989
14028
|
}
|
13990
14029
|
else if (recipient.byId) {
|
13991
|
-
let who = await profileOf(recipient.userId);
|
13992
|
-
if (recipient.byId === this._session.userId)
|
14030
|
+
let who = await profileOf(recipient.userId), by = await profileOf(recipient.byId);
|
14031
|
+
if (recipient.byId === this._session.userId)
|
13993
14032
|
step.name = this._translate.get('ByYou', nameOf(who));
|
13994
|
-
if (action)
|
13995
|
-
step.action = await actionBy(action, You, recipient.toId);
|
13996
|
-
}
|
13997
14033
|
else {
|
13998
|
-
let by = await profileOf(recipient.byId);
|
13999
14034
|
step.name = this._translate.get('By', nameOf(who), nameOf(by));
|
14000
14035
|
if (by.role)
|
14001
14036
|
step.role = by.role;
|
14002
|
-
if (action)
|
14003
|
-
step.action = await actionBy(action, by.gender, recipient.toId);
|
14004
14037
|
}
|
14005
14038
|
if (action)
|
14006
|
-
step.action = await actionBy(action,
|
14039
|
+
step.action = await actionBy(action, by.gender, recipient.toId);
|
14007
14040
|
}
|
14008
14041
|
else {
|
14009
14042
|
if (recipient.userId === this._session.userId)
|
@@ -14103,30 +14136,28 @@ class TraceViewComponent extends TraceBase {
|
|
14103
14136
|
step.role = by.role;
|
14104
14137
|
}
|
14105
14138
|
}
|
14106
|
-
else {
|
14139
|
+
else if (recipient.escalated) {
|
14107
14140
|
let escalations = this.model.log.filter(l => l.time > issued &&
|
14108
14141
|
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))));
|
14142
|
+
let escalate = [];
|
14143
|
+
for (let escalation of escalations) {
|
14144
|
+
let who = await profileOf(escalation.userId);
|
14145
|
+
escalate.push(who);
|
14120
14146
|
}
|
14147
|
+
let who = await profileOf(recipient.userId);
|
14148
|
+
if (escalations.length === 1 && escalate[0] === this._session.userId)
|
14149
|
+
step.name = this._translate.get('EscalatedByYou', nameOf(who));
|
14150
|
+
else
|
14151
|
+
step.name = this._translate.get('EscalatedBy', nameOf(who), this._translate.join(escalate.map(e => nameOf(e))));
|
14152
|
+
}
|
14153
|
+
else {
|
14154
|
+
if (recipient.userId === this._session.userId)
|
14155
|
+
step.name = this._translate.get('You');
|
14121
14156
|
else {
|
14122
|
-
|
14123
|
-
|
14124
|
-
|
14125
|
-
|
14126
|
-
step.name = nameOf(who);
|
14127
|
-
if (who.role)
|
14128
|
-
step.role = who.role;
|
14129
|
-
}
|
14157
|
+
let who = await profileOf(recipient.userId);
|
14158
|
+
step.name = nameOf(who);
|
14159
|
+
if (who.role)
|
14160
|
+
step.role = who.role;
|
14130
14161
|
}
|
14131
14162
|
}
|
14132
14163
|
trace.push(step);
|
@@ -14164,10 +14195,10 @@ class TraceViewComponent extends TraceBase {
|
|
14164
14195
|
}
|
14165
14196
|
}
|
14166
14197
|
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>{{'
|
14198
|
+
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
14199
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TraceViewComponent, decorators: [{
|
14169
14200
|
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>{{'
|
14201
|
+
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
14202
|
}], ctorParameters: function () { return [{ type: SessionService }, { type: TranslateService }, { type: AccountService }, { type: ChatInfo }, { type: HubService }]; }, propDecorators: { model: [{
|
14172
14203
|
type: Input
|
14173
14204
|
}], versionSelected: [{
|
@@ -14729,7 +14760,7 @@ class CubeMatrixComponent {
|
|
14729
14760
|
this.refresh();
|
14730
14761
|
}
|
14731
14762
|
_addindices() {
|
14732
|
-
const collection = this.indexAt === '
|
14763
|
+
const collection = this.indexAt === 'xAxis' ? this.columns : this.rows;
|
14733
14764
|
this.indices.forEach((x, i) => {
|
14734
14765
|
const header = {
|
14735
14766
|
key: x.name,
|
@@ -14737,10 +14768,10 @@ class CubeMatrixComponent {
|
|
14737
14768
|
index: x,
|
14738
14769
|
accumulate: x.accumulate
|
14739
14770
|
};
|
14740
|
-
if (this.placeAt === '
|
14741
|
-
collection.splice(i, 0, header);
|
14742
|
-
else
|
14771
|
+
if (this.placeAt === 'trailing')
|
14743
14772
|
collection.push(header);
|
14773
|
+
else
|
14774
|
+
collection.splice(i, 0, header);
|
14744
14775
|
});
|
14745
14776
|
}
|
14746
14777
|
_addsumheaders() {
|
@@ -14806,17 +14837,17 @@ class CubeMatrixComponent {
|
|
14806
14837
|
const d = {};
|
14807
14838
|
series.forEach(s => {
|
14808
14839
|
if (s.index) {
|
14809
|
-
if (this.indexAt === '
|
14810
|
-
const row = d[s.index] = {};
|
14811
|
-
s.points.forEach(p => row[p.x] = p.y);
|
14812
|
-
}
|
14813
|
-
else
|
14840
|
+
if (this.indexAt === 'xAxis')
|
14814
14841
|
s.points.forEach(p => {
|
14815
14842
|
let row = d[p.x];
|
14816
14843
|
if (!row)
|
14817
14844
|
row = d[p.x] = {};
|
14818
14845
|
row[s.index] = p.y;
|
14819
14846
|
});
|
14847
|
+
else {
|
14848
|
+
const row = d[s.index] = {};
|
14849
|
+
s.points.forEach(p => row[p.x] = p.y);
|
14850
|
+
}
|
14820
14851
|
}
|
14821
14852
|
else {
|
14822
14853
|
const row = d[s.name] = {};
|
@@ -14839,20 +14870,20 @@ class CubeMatrixComponent {
|
|
14839
14870
|
this.rows.forEach(r => {
|
14840
14871
|
const datarow = data[r.key];
|
14841
14872
|
if (datarow) {
|
14842
|
-
let
|
14873
|
+
let columnTotal = 0;
|
14843
14874
|
this.columns.forEach(c => {
|
14844
14875
|
if (c.accumulate === false || c.sum !== undefined)
|
14845
14876
|
return;
|
14846
14877
|
let val = datarow[c.key];
|
14847
14878
|
if (val !== undefined)
|
14848
|
-
|
14879
|
+
columnTotal += this.indices.length === 0 || this.indexAt !== 'xAxis' ||
|
14849
14880
|
c.index !== undefined ? val : -val;
|
14850
14881
|
});
|
14851
|
-
datarow['_total'] = this._format(
|
14882
|
+
datarow['_total'] = this._format(columnTotal, r);
|
14852
14883
|
if (!r.sum)
|
14853
14884
|
grand += this.indices.length === 0 ||
|
14854
14885
|
this.indexAt === 'xAxis' ||
|
14855
|
-
r.index !== undefined ?
|
14886
|
+
r.index !== undefined ? columnTotal : -columnTotal;
|
14856
14887
|
}
|
14857
14888
|
else
|
14858
14889
|
data[r.key] = {
|
@@ -14862,16 +14893,16 @@ class CubeMatrixComponent {
|
|
14862
14893
|
const totals = data['_total'] = this.totals = {};
|
14863
14894
|
totals['_grand'] = this._format(grand);
|
14864
14895
|
this.columns.forEach(c => {
|
14865
|
-
let
|
14896
|
+
let rowTotal = 0;
|
14866
14897
|
this.rows.forEach(row => {
|
14867
14898
|
if (row.accumulate === false || row.sum !== undefined)
|
14868
14899
|
return;
|
14869
14900
|
const val = data[row.key][c.key];
|
14870
14901
|
if (val !== undefined)
|
14871
|
-
|
14902
|
+
rowTotal += this.indices.length === 0 || this.indexAt === 'xAxis' ||
|
14872
14903
|
row.index !== undefined ? val : -val;
|
14873
14904
|
});
|
14874
|
-
totals[c.key] = this._format(
|
14905
|
+
totals[c.key] = this._format(rowTotal, c);
|
14875
14906
|
});
|
14876
14907
|
}
|
14877
14908
|
_calculatesum(data) {
|
@@ -17222,7 +17253,7 @@ class HomeBase {
|
|
17222
17253
|
this._messaging.new$.subscribe(m => {
|
17223
17254
|
const { model: { formId: name, subject, number } } = m;
|
17224
17255
|
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'), {
|
17256
|
+
this._snackBar.open(msg, m.userId === this._session.profile.userId ? this._translate.get('OpenNew') : null, {
|
17226
17257
|
duration: 5000,
|
17227
17258
|
direction: this._session.direction,
|
17228
17259
|
politeness: 'assertive'
|
@@ -18655,7 +18686,7 @@ class SlotsComponent {
|
|
18655
18686
|
}
|
18656
18687
|
}
|
18657
18688
|
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=\"
|
18689
|
+
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
18690
|
panesTitleAnimation,
|
18660
18691
|
paneAnimation,
|
18661
18692
|
paramAnimation,
|
@@ -18672,7 +18703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
18672
18703
|
queryAnimation,
|
18673
18704
|
tabsAnimation,
|
18674
18705
|
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=\"
|
18706
|
+
], 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
18707
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
18677
18708
|
type: Inject,
|
18678
18709
|
args: [PANES_DATA]
|
@@ -26377,7 +26408,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
|
|
26377
26408
|
args: ['attr.aria-describedby']
|
26378
26409
|
}] } });
|
26379
26410
|
|
26380
|
-
|
26411
|
+
// https://day.js.org/docs/en/customization/relative-time
|
26412
|
+
dayjs.extend(relativeTime, {
|
26413
|
+
thresholds: [
|
26414
|
+
{ l: 's', r: 1 },
|
26415
|
+
{ l: 'm', r: 1 },
|
26416
|
+
{ l: 'mm', r: 59, d: 'minute' },
|
26417
|
+
{ l: 'h', r: 1 },
|
26418
|
+
{ l: 'hh', r: 24, d: 'hour' },
|
26419
|
+
{ l: 'd', r: 1 },
|
26420
|
+
{ l: 'dd', r: 29, d: 'day' },
|
26421
|
+
{ l: 'M', r: 1 },
|
26422
|
+
{ l: 'MM', r: 11, d: 'month' },
|
26423
|
+
{ l: 'y' },
|
26424
|
+
{ l: 'yy', d: 'year' }
|
26425
|
+
]
|
26426
|
+
});
|
26381
26427
|
dayjs.extend(duration);
|
26382
26428
|
dayjs.extend(calendar);
|
26383
26429
|
const CORE_COMPONENTS = [CubeParallelViewComponent, CubeExploreViewComponent, CubeChartViewComponent, CubeDocumentSumComponent, CubeDocumentMatrixComponent, CubeDocumentViewComponent, CubePivotViewComponent, TimelineViewComponent,
|
@@ -26759,34 +26805,30 @@ class TraceElementComponent {
|
|
26759
26805
|
this.none = log.length === 0,
|
26760
26806
|
this.nodeType = this._session.profile.nodes.find(n => n.name === addInfo.nodeType);
|
26761
26807
|
}
|
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);
|
26808
|
+
async recipientInfo(recipient) {
|
26809
|
+
const info = [];
|
26810
|
+
const who = await this._accounts.get(recipient.userId).toPromise();
|
26811
|
+
if (recipient.escalated) {
|
26812
|
+
const escalations = this.timeline.log.filter(l => l.type === 'Escalation' && l.recipientId === recipient.id);
|
26813
|
+
const escalate = await this._accounts.get(escalations[0].userId).toPromise();
|
26814
|
+
info.push(this._translate.get('EscalatedBy', this._chat.format(escalate), this._chat.format(who)));
|
26774
26815
|
}
|
26775
26816
|
if (recipient.substitutingId) {
|
26776
|
-
const
|
26777
|
-
|
26817
|
+
const substitute = await this._accounts.get(recipient.substitutingId).toPromise();
|
26818
|
+
if (recipient.byId) {
|
26819
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26820
|
+
info.push(this._translate.get('SubstitutingBy', this._chat.format(who), this._chat.format(substitute), this._chat.format(by)));
|
26821
|
+
}
|
26822
|
+
else
|
26823
|
+
info.push(this._translate.get('Substituting', this._chat.format(who), this._chat.format(substitute)));
|
26778
26824
|
}
|
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
|
-
}));
|
26825
|
+
else if (recipient.byId) {
|
26826
|
+
const by = await this._accounts.get(recipient.byId).toPromise();
|
26827
|
+
info.push(this._translate.get('By', this._chat.format(who), this._chat.format(by)));
|
26828
|
+
}
|
26829
|
+
else
|
26830
|
+
info.push(this._chat.format(who));
|
26831
|
+
return info.join(this._translate.comma);
|
26790
26832
|
}
|
26791
26833
|
logInfo(log) {
|
26792
26834
|
const observables = [];
|
@@ -27208,7 +27250,10 @@ let SystemDiffComponent = class SystemDiffComponent {
|
|
27208
27250
|
* @param index
|
27209
27251
|
*/
|
27210
27252
|
compare(index) {
|
27211
|
-
const { time: date1 } = this.versions[index],
|
27253
|
+
const { time: date1, file } = this.versions[index], version = this.versions.slice(index + 1).find(v => v.file === file);
|
27254
|
+
if (!version)
|
27255
|
+
return;
|
27256
|
+
const { time: date2 } = version;
|
27212
27257
|
this._working.next(25);
|
27213
27258
|
this._utilityRef.execute({ date1, date2 }).subscribe(r => {
|
27214
27259
|
this.html = '';
|