From 0a69c00cc855346eafa52c7c4f8e6dfeedda4df1 Mon Sep 17 00:00:00 2001 From: Lera24 Date: Thu, 25 Jul 2024 12:08:07 +0300 Subject: [PATCH 01/25] feature: add changes in enums, add locale and email-task-timeline-row component[WTEL-4798] --- package-lock.json | 8 +- package.json | 2 +- src/app/locale/en/en.js | 2 + src/app/locale/ru/ru.js | 2 + src/app/locale/ua/ua.js | 2 + .../components/task-row/task-timeline-row.vue | 7 +- .../components/utils/timeline-flow-line.vue | 7 ++ .../components/utils/timeline-pin.vue | 10 +++ .../utils/timeline-rounded-action.vue | 16 +++- .../components/utils/timeline-task-status.vue | 4 + .../timeline/enums/TimelinePinType.enum.js | 4 + .../timeline/enums/TimelineTaskKind.enum.js | 3 + .../timeline/enums/TimelineTaskStatus.enum.js | 2 + .../task-row/email-task-timeline-row.vue | 90 +++++++++++++++++++ 14 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue diff --git a/package-lock.json b/package-lock.json index cad0e821..32028177 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^10.10.0", - "@webitel/ui-sdk": "^24.6.45", + "@webitel/ui-sdk": "^24.8.1", "axios": "^1.7.2", "deep-equal": "^2.2.1", "dompurify": "^3.1.2", @@ -2063,9 +2063,9 @@ } }, "node_modules/@webitel/ui-sdk": { - "version": "24.6.45", - "resolved": "https://registry.npmjs.org/@webitel/ui-sdk/-/ui-sdk-24.6.45.tgz", - "integrity": "sha512-u5aPwlK5Vh6s0SFK+T9/Cd7powGDDCmV2ad5Q8iro+TMddK05NLkJtJQ6/FYOmO5rKYd5tOeJw5yzC20r5Uh2A==", + "version": "24.8.1", + "resolved": "https://registry.npmjs.org/@webitel/ui-sdk/-/ui-sdk-24.8.1.tgz", + "integrity": "sha512-1VjbgT1sWX5e1TEgVTu+a89RpYLY5dURONo5CD/whtkaQ1sacEEgyBrxDEyrktOsgYwfD5BC3VBeyvSAw8XVNA==", "dependencies": { "@floating-ui/vue": "^1.0.1", "@morev/vue-transitions": "^3.0.2", diff --git a/package.json b/package.json index 72178653..15736aec 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^10.10.0", - "@webitel/ui-sdk": "^24.6.45", + "@webitel/ui-sdk": "^24.8.1", "axios": "^1.7.2", "deep-equal": "^2.2.1", "dompurify": "^3.1.2", diff --git a/src/app/locale/en/en.js b/src/app/locale/en/en.js index 57b83491..326b6df4 100644 --- a/src/app/locale/en/en.js +++ b/src/app/locale/en/en.js @@ -25,6 +25,8 @@ export default { [TimelineTaskStatusEnum.MISSED]: 'Missed', [TimelineTaskStatusEnum.TRANSFERRED]: 'Transferred', [TimelineTaskStatusEnum.ENDED]: 'Ended', + [TimelineTaskStatusEnum.SENT]: 'Sent', + [TimelineTaskStatusEnum.RECEIVED]: 'Received', }, eventType: { [WebitelContactsTimelineEventType.Call]: 'Call | Calls', diff --git a/src/app/locale/ru/ru.js b/src/app/locale/ru/ru.js index 45baaafc..fffdc2b0 100644 --- a/src/app/locale/ru/ru.js +++ b/src/app/locale/ru/ru.js @@ -25,6 +25,8 @@ export default { [TimelineTaskStatusEnum.MISSED]: 'Пропущен', [TimelineTaskStatusEnum.TRANSFERRED]: 'Переведено', [TimelineTaskStatusEnum.ENDED]: 'Конец', + [TimelineTaskStatusEnum.SENT]: 'Отправлено', + [TimelineTaskStatusEnum.RECEIVED]: 'Получено', }, eventType: { [WebitelContactsTimelineEventType.Call]: 'Звонок | Звонки', diff --git a/src/app/locale/ua/ua.js b/src/app/locale/ua/ua.js index 2b931840..4cc1f574 100644 --- a/src/app/locale/ua/ua.js +++ b/src/app/locale/ua/ua.js @@ -25,6 +25,8 @@ export default { [TimelineTaskStatusEnum.MISSED]: 'Пропущений', [TimelineTaskStatusEnum.TRANSFERRED]: 'Переведено', [TimelineTaskStatusEnum.ENDED]: 'Кінець', + [TimelineTaskStatusEnum.SENT]: 'Надіслано', + [TimelineTaskStatusEnum.RECEIVED]: 'Отримано', }, eventType: { [WebitelContactsTimelineEventType.Call]: 'Дзвінок | Дзвінки', diff --git a/src/modules/contacts/modules/timeline/components/task-row/task-timeline-row.vue b/src/modules/contacts/modules/timeline/components/task-row/task-timeline-row.vue index e34db2f3..e3482d32 100644 --- a/src/modules/contacts/modules/timeline/components/task-row/task-timeline-row.vue +++ b/src/modules/contacts/modules/timeline/components/task-row/task-timeline-row.vue @@ -2,7 +2,7 @@ @@ -12,6 +12,7 @@ import { computed } from 'vue'; import { WebitelContactsTimelineEventType } from 'webitel-sdk'; import CallTaskTimelineRow from '../../modules/calls/components/task-row/call-task-timeline-row.vue'; import ChatTaskTimelineRow from '../../modules/chats/components/task-row/chat-task-timeline-row.vue'; +import EmailTaskTimelineRow from '../../modules/emails/components/task-row/email-task-timeline-row.vue'; const props = defineProps({ task: { @@ -24,12 +25,16 @@ const props = defineProps({ }, }); +const isDetailed = computed(() => props.task?.isDetailed || props.task.type === WebitelContactsTimelineEventType.Email); + const component = computed(() => { switch (props.task.type) { case WebitelContactsTimelineEventType.Chat: return ChatTaskTimelineRow; case WebitelContactsTimelineEventType.Call: return CallTaskTimelineRow; + case WebitelContactsTimelineEventType.Email: + return EmailTaskTimelineRow; default: throw new Error(`Unknown item type, ${props.task.type}!`); } diff --git a/src/modules/contacts/modules/timeline/components/utils/timeline-flow-line.vue b/src/modules/contacts/modules/timeline/components/utils/timeline-flow-line.vue index de3184ce..58a1fc8b 100644 --- a/src/modules/contacts/modules/timeline/components/utils/timeline-flow-line.vue +++ b/src/modules/contacts/modules/timeline/components/utils/timeline-flow-line.vue @@ -18,12 +18,15 @@ const props = defineProps({ 'secondary', 'chat', 'transfer', + 'email', ].includes(v), }, }); diff --git a/src/modules/contacts/modules/timeline/components/utils/timeline-pin.vue b/src/modules/contacts/modules/timeline/components/utils/timeline-pin.vue index 5aa08823..9dbc9892 100644 --- a/src/modules/contacts/modules/timeline/components/utils/timeline-pin.vue +++ b/src/modules/contacts/modules/timeline/components/utils/timeline-pin.vue @@ -145,6 +145,16 @@ const stateMap = { color: 'transfer', icon: 'call-transfer', }, + [TimelinePinType.EMAIL_INBOUND]: { + component: TimelineRoundedAction, + color: 'email', + icon: 'email-inbound', + }, + [TimelinePinType.EMAIL_OUTBOUND]: { + component: TimelineRoundedAction, + color: 'email', + icon: 'email-outbound', + }, }; const state = computed(() => { diff --git a/src/modules/contacts/modules/timeline/components/utils/timeline-rounded-action.vue b/src/modules/contacts/modules/timeline/components/utils/timeline-rounded-action.vue index 62250ec7..679e22fa 100644 --- a/src/modules/contacts/modules/timeline/components/utils/timeline-rounded-action.vue +++ b/src/modules/contacts/modules/timeline/components/utils/timeline-rounded-action.vue @@ -20,7 +20,7 @@ const props = defineProps({ color: { type: String, default: 'secondary', - validator: (value) => ['primary', 'success', 'error', 'chat', 'secondary'].includes(value), + validator: (value) => ['primary', 'success', 'error', 'chat', 'secondary', 'email'].includes(value), }, }); @@ -32,6 +32,9 @@ const iColor = computed(() => (props.color === 'secondary') ? 'default' : 'on-da diff --git a/src/modules/contacts/modules/timeline/components/utils/timeline-task-status.vue b/src/modules/contacts/modules/timeline/components/utils/timeline-task-status.vue index 3b43c8b4..e00c4e6c 100644 --- a/src/modules/contacts/modules/timeline/components/utils/timeline-task-status.vue +++ b/src/modules/contacts/modules/timeline/components/utils/timeline-task-status.vue @@ -25,6 +25,10 @@ const statusColor = computed(() => { switch (props.status) { case TimelineTaskStatus.STARTED: return 'success'; + case TimelineTaskStatus.SENT: + return 'success'; + case TimelineTaskStatus.RECEIVED: + return 'success'; case TimelineTaskStatus.TRANSFERRED: return 'transfer'; default: diff --git a/src/modules/contacts/modules/timeline/enums/TimelinePinType.enum.js b/src/modules/contacts/modules/timeline/enums/TimelinePinType.enum.js index 19c03196..73400208 100644 --- a/src/modules/contacts/modules/timeline/enums/TimelinePinType.enum.js +++ b/src/modules/contacts/modules/timeline/enums/TimelinePinType.enum.js @@ -27,6 +27,10 @@ const TimelinePinType = Object.freeze({ CALL_MISSED: 'CALL_MISSED', CALL_INBOUND_ON_IVR: 'CALL_INBOUND_ON_IVR', CALL_TRANSFER: 'CALL_TRANSFER', + + // email-related pins + EMAIL_INBOUND: 'EMAIL_INBOUND', + EMAIL_OUTBOUND: 'EMAIL_OUTBOUND', }); export default TimelinePinType; diff --git a/src/modules/contacts/modules/timeline/enums/TimelineTaskKind.enum.js b/src/modules/contacts/modules/timeline/enums/TimelineTaskKind.enum.js index c58520a4..0a1d2836 100644 --- a/src/modules/contacts/modules/timeline/enums/TimelineTaskKind.enum.js +++ b/src/modules/contacts/modules/timeline/enums/TimelineTaskKind.enum.js @@ -11,6 +11,9 @@ const TimelineTaskKind = Object.freeze({ CHAT_INBOUND: 'CHAT_INBOUND', // CHAT_OUTBOUND: 'CHAT_OUTBOUND', CHAT_ENDED: 'CHAT_ENDED', + + EMAIL_INBOUND: 'EMAIL_INBOUND', + EMAIL_OUTBOUND: 'EMAIL_OUTBOUND', }); export default TimelineTaskKind; diff --git a/src/modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js b/src/modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js index 56c14efc..437cb05a 100644 --- a/src/modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js +++ b/src/modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js @@ -8,6 +8,8 @@ const TimelineTaskStatus = Object.freeze({ MISSED: 'missed', TRANSFERRED: 'transferred', ENDED: 'ended', + SENT: 'sent', + RECEIVED: 'received', }); export default TimelineTaskStatus; diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue new file mode 100644 index 00000000..7e08d8d2 --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue @@ -0,0 +1,90 @@ + + From ebc39870a951036a7c5c4db64b4df0df821eb016 Mon Sep 17 00:00:00 2001 From: Lera24 Date: Thu, 25 Jul 2024 14:50:28 +0300 Subject: [PATCH 02/25] feature: add email-task-timelone-component[WTEL-4799] --- src/app/locale/en/en.js | 4 + src/app/locale/ru/ru.js | 4 + src/app/locale/ua/ua.js | 4 + .../utils/timeline-row-initiator.vue | 2 +- .../task-row/email-task-timeline-header.vue | 119 ++++++++++++++++++ .../task-row/email-task-timeline-row.vue | 3 + 6 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue diff --git a/src/app/locale/en/en.js b/src/app/locale/en/en.js index 326b6df4..57ee997a 100644 --- a/src/app/locale/en/en.js +++ b/src/app/locale/en/en.js @@ -33,6 +33,10 @@ export default { [WebitelContactsTimelineEventType.Chat]: 'Chat | Chats', [WebitelContactsTimelineEventType.Email]: 'Email | Emails', }, + emails: { + to: 'To', + cc: 'CC', + }, }, communications: { communications: 'Communication option | Communication options', diff --git a/src/app/locale/ru/ru.js b/src/app/locale/ru/ru.js index fffdc2b0..9167bd8e 100644 --- a/src/app/locale/ru/ru.js +++ b/src/app/locale/ru/ru.js @@ -33,6 +33,10 @@ export default { [WebitelContactsTimelineEventType.Chat]: 'Чат | Чаты', [WebitelContactsTimelineEventType.Email]: 'Письмо | Письма', }, + emails: { + to: 'Кому', + cc: 'CC', + }, }, communications: { communications: 'Средство связи | Средства связи', diff --git a/src/app/locale/ua/ua.js b/src/app/locale/ua/ua.js index 4cc1f574..fc275b00 100644 --- a/src/app/locale/ua/ua.js +++ b/src/app/locale/ua/ua.js @@ -33,6 +33,10 @@ export default { [WebitelContactsTimelineEventType.Chat]: 'Чат | Чати', [WebitelContactsTimelineEventType.Email]: 'Лист | Листи', }, + emails: { + to: 'Кому', + cc: 'CC', + }, }, communications: { communications: 'Засіб зв\'язку | Засоби зв\'язку', diff --git a/src/modules/contacts/modules/timeline/components/utils/timeline-row-initiator.vue b/src/modules/contacts/modules/timeline/components/utils/timeline-row-initiator.vue index 7a84c763..dc75edc2 100644 --- a/src/modules/contacts/modules/timeline/components/utils/timeline-row-initiator.vue +++ b/src/modules/contacts/modules/timeline/components/utils/timeline-row-initiator.vue @@ -54,7 +54,7 @@ const props = defineProps({ @extend %typo-subtitle-1; display: flex; align-items: center; - gap: var(--spacing-sm); + gap: var(--spacing-xs); .wt-icon, .wt-avatar { diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue new file mode 100644 index 00000000..4280b4b5 --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue index 7e08d8d2..7f8dce4d 100644 --- a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue @@ -26,6 +26,8 @@ @@ -42,6 +44,7 @@ import TimelineRowInfo from '../../../../components/utils/timeline-row-info.vue' import TimelinePinType from '../../../../enums/TimelinePinType.enum.js'; import TimelineTaskKind from '../../../../enums/TimelineTaskKind.enum.js'; import TimelineTaskStatusEnum from '../../../../enums/TimelineTaskStatus.enum.js'; +import EmailTaskTimelineHeader from './email-task-timeline-header.vue'; const props = defineProps({ task: { From 059dff4d0b287106619c1733ee06256b690204d6 Mon Sep 17 00:00:00 2001 From: Lera24 Date: Wed, 31 Jul 2024 17:03:02 +0300 Subject: [PATCH 03/25] feature: add files, subject, header changes[WTEL-4801] --- package-lock.json | 62 +++++++++-- package.json | 5 +- src/app/locale/en/en.js | 1 + src/app/locale/ru/ru.js | 1 + src/app/locale/ua/ua.js | 1 + .../chat-point-timeline-row-file.vue | 14 +-- .../email-point-timeline-row-subject.vue | 45 ++++++++ .../point-row/email-point-timeline-row.vue | 75 +++++++++++++ .../email-points-timeline-row-file.vue | 81 ++++++++++++++ ...il-points-timeline-row-files-container.vue | 34 ++++++ .../email-task-timeline-header-section.vue | 59 ++++++++++ .../task-row/email-task-timeline-header.vue | 102 +++++------------- .../task-row/email-task-timeline-row.vue | 4 +- .../modules/timeline/utils/downloadFile.js | 10 ++ 14 files changed, 392 insertions(+), 102 deletions(-) create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-point-timeline-row-subject.vue create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-point-timeline-row.vue create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-file.vue create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-files-container.vue create mode 100644 src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header-section.vue create mode 100644 src/modules/contacts/modules/timeline/utils/downloadFile.js diff --git a/package-lock.json b/package-lock.json index 32028177..c801ef05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,13 +12,14 @@ "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^10.10.0", - "@webitel/ui-sdk": "^24.8.1", + "@webitel/ui-sdk": "^24.8.7", "axios": "^1.7.2", "deep-equal": "^2.2.1", - "dompurify": "^3.1.2", + "dompurify": "^3.1.6", "linkify-html": "^4.1.3", "linkifyjs": "^4.1.3", "lodash": "^4.17.21", + "markdown-it": "^14.1.0", "vue": "^3.4.27", "vue-i18n": "^9.13.1", "vue-router": "^4.3.2", @@ -2063,9 +2064,9 @@ } }, "node_modules/@webitel/ui-sdk": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/@webitel/ui-sdk/-/ui-sdk-24.8.1.tgz", - "integrity": "sha512-1VjbgT1sWX5e1TEgVTu+a89RpYLY5dURONo5CD/whtkaQ1sacEEgyBrxDEyrktOsgYwfD5BC3VBeyvSAw8XVNA==", + "version": "24.8.7", + "resolved": "https://registry.npmjs.org/@webitel/ui-sdk/-/ui-sdk-24.8.7.tgz", + "integrity": "sha512-PASpgPkCuSZElLv9oNDNq+S1isdQibIACnkHGfAr2fTB3xlFmPMO+emtiw1gjr/bT3kK82okctsiQzpZ+yWaBQ==", "dependencies": { "@floating-ui/vue": "^1.0.1", "@morev/vue-transitions": "^3.0.2", @@ -2189,8 +2190,7 @@ "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", @@ -3651,9 +3651,9 @@ } }, "node_modules/dompurify": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.4.tgz", - "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==" + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" }, "node_modules/domutils": { "version": "1.7.0", @@ -6062,6 +6062,14 @@ "linkifyjs": "^4.0.0" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/linkifyjs": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.3.tgz", @@ -6212,6 +6220,22 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -6229,6 +6253,11 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, "node_modules/merge-options": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", @@ -7383,6 +7412,14 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", @@ -9148,6 +9185,11 @@ "node": ">=14.17" } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" + }, "node_modules/ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", diff --git a/package.json b/package.json index 15736aec..45ab6970 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,14 @@ "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^10.10.0", - "@webitel/ui-sdk": "^24.8.1", + "@webitel/ui-sdk": "^24.8.7", "axios": "^1.7.2", "deep-equal": "^2.2.1", - "dompurify": "^3.1.2", + "dompurify": "^3.1.6", "linkify-html": "^4.1.3", "linkifyjs": "^4.1.3", "lodash": "^4.17.21", + "markdown-it": "^14.1.0", "vue": "^3.4.27", "vue-i18n": "^9.13.1", "vue-router": "^4.3.2", diff --git a/src/app/locale/en/en.js b/src/app/locale/en/en.js index 57ee997a..3235d560 100644 --- a/src/app/locale/en/en.js +++ b/src/app/locale/en/en.js @@ -36,6 +36,7 @@ export default { emails: { to: 'To', cc: 'CC', + subject: 'Subject', }, }, communications: { diff --git a/src/app/locale/ru/ru.js b/src/app/locale/ru/ru.js index 9167bd8e..a2f04586 100644 --- a/src/app/locale/ru/ru.js +++ b/src/app/locale/ru/ru.js @@ -36,6 +36,7 @@ export default { emails: { to: 'Кому', cc: 'CC', + subject: 'Тема', }, }, communications: { diff --git a/src/app/locale/ua/ua.js b/src/app/locale/ua/ua.js index fc275b00..b968773d 100644 --- a/src/app/locale/ua/ua.js +++ b/src/app/locale/ua/ua.js @@ -36,6 +36,7 @@ export default { emails: { to: 'Кому', cc: 'CC', + subject: 'Тема', }, }, communications: { diff --git a/src/modules/contacts/modules/timeline/modules/chats/components/point-row/chat-point-timeline-row-file.vue b/src/modules/contacts/modules/timeline/modules/chats/components/point-row/chat-point-timeline-row-file.vue index 1e6969a9..c42806d2 100644 --- a/src/modules/contacts/modules/timeline/modules/chats/components/point-row/chat-point-timeline-row-file.vue +++ b/src/modules/contacts/modules/timeline/modules/chats/components/point-row/chat-point-timeline-row-file.vue @@ -4,16 +4,15 @@ :icon="icon" /> {{ props.file.name }} diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-point-timeline-row.vue b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-point-timeline-row.vue new file mode 100644 index 00000000..a2a599cf --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-point-timeline-row.vue @@ -0,0 +1,75 @@ + + + + diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-file.vue b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-file.vue new file mode 100644 index 00000000..1a29c544 --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-file.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-files-container.vue b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-files-container.vue new file mode 100644 index 00000000..bf2f5b6e --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/point-row/email-points-timeline-row-files-container.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header-section.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header-section.vue new file mode 100644 index 00000000..daa4bb5f --- /dev/null +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header-section.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue index 4280b4b5..0b161494 100644 --- a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-header.vue @@ -1,77 +1,40 @@ + + + - - - + @@ -82,6 +45,7 @@ import { useI18n } from 'vue-i18n'; import TimelineRowInitiator from '../../../../components/utils/timeline-row-initiator.vue'; import TimelineInitiatorType from '../../../../enums/TimelineInitiatorType.enum.js'; +import EmailTaskTimelineHeaderSection from './email-task-timeline-header-section.vue'; const props = defineProps({ task: { @@ -101,19 +65,5 @@ const hiddenCopyRecipients = computed(() => props.task.cc.slice(0, -1)); display: flex; flex-wrap: wrap; gap: var(--spacing-xs); - - &__wrapper { - display: flex; - align-items: center; - gap: var(--spacing-xs); - } - - &__inner { - padding: var(--spacing-xs); - } - - &__name { - @extend %typo-subtitle-1; - } } diff --git a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue index 7f8dce4d..5564974f 100644 --- a/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue +++ b/src/modules/contacts/modules/timeline/modules/emails/components/task-row/email-task-timeline-row.vue @@ -26,7 +26,7 @@