@antelopejs/dms-mailing 0.4.0 → 0.5.0
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/README.md +1 -1
- package/dist/pages/sends.js +2 -2
- package/dist/pages/sends.js.map +1 -1
- package/dist/pages/suppressions.js +2 -2
- package/dist/pages/suppressions.js.map +1 -1
- package/dist/pages/templates.js +3 -3
- package/dist/pages/templates.js.map +1 -1
- package/frontend-vue/app/components/CategoriesInput.vue +7 -14
- package/frontend-vue/app/components/DuplicateModal.vue +9 -3
- package/frontend-vue/app/components/Editor.vue +3 -3
- package/frontend-vue/app/components/NewTemplateModal.vue +9 -3
- package/frontend-vue/app/components/OverviewGate.vue +20 -29
- package/frontend-vue/app/components/PageHeader.vue +8 -12
- package/frontend-vue/app/components/RealSendModal.vue +3 -1
- package/frontend-vue/app/components/RenderingModal.vue +5 -7
- package/frontend-vue/app/components/RetentionInput.vue +13 -23
- package/frontend-vue/app/components/SendDrawer.vue +5 -2
- package/frontend-vue/app/components/StarterGallery.vue +11 -9
- package/frontend-vue/app/components/TemplateCard.vue +19 -4
- package/frontend-vue/app/components/TemplateDrawer.vue +8 -2
- package/frontend-vue/app/components/TemplateGallery.vue +25 -20
- package/frontend-vue/app/components/TemplatePreviewFrame.vue +8 -6
- package/frontend-vue/app/components/TestSendModal.vue +3 -1
- package/frontend-vue/app/components/VersionHistory.vue +3 -3
- package/frontend-vue/app/components/WebhookStatus.vue +20 -17
- package/frontend-vue/app/components/editor/EditorWorkspace.vue +5 -0
- package/frontend-vue/app/composables/useEditorActions.ts +3 -1
- package/frontend-vue/app/composables/useEditorSession.ts +6 -4
- package/frontend-vue/app/composables/useMailingApi.ts +5 -58
- package/frontend-vue/app/composables/useMailingReads.ts +229 -0
- package/frontend-vue/app/composables/useOverviewSetup.ts +15 -7
- package/frontend-vue/app/composables/useTemplateCategories.ts +8 -27
- package/frontend-vue/app/utils/gallery.ts +19 -7
- package/frontend-vue/app/utils/period.ts +0 -5
- package/frontend-vue/package.json +1 -1
- package/frontend-vue/tests/block-components.test.ts +0 -3
- package/frontend-vue/tests/categories-input.test.ts +44 -13
- package/frontend-vue/tests/conditions.test.ts +0 -2
- package/frontend-vue/tests/editor-block-list.test.ts +1 -0
- package/frontend-vue/tests/editor-session.test.ts +5 -0
- package/frontend-vue/tests/footer-block.test.ts +1 -0
- package/frontend-vue/tests/funnel-card.test.ts +1 -0
- package/frontend-vue/tests/gallery.test.ts +16 -0
- package/frontend-vue/tests/helpers/api-data.ts +173 -0
- package/frontend-vue/tests/i18n-editor.test.ts +0 -9
- package/frontend-vue/tests/new-template-modal.test.ts +18 -5
- package/frontend-vue/tests/on-demand-reads.test.ts +81 -0
- package/frontend-vue/tests/overview-gate.test.ts +60 -21
- package/frontend-vue/tests/page-reads.test.ts +157 -0
- package/frontend-vue/tests/period.test.ts +0 -9
- package/frontend-vue/tests/retention-input.test.ts +31 -9
- package/frontend-vue/tests/send-modals.test.ts +9 -1
- package/frontend-vue/tests/shortcuts.test.ts +1 -0
- package/frontend-vue/tests/template-drawer.test.ts +31 -14
- package/frontend-vue/tests/template-gallery.test.ts +46 -24
- package/frontend-vue/tests/variable-path.test.ts +1 -0
- package/frontend-vue/vitest.config.ts +4 -1
- package/package.json +5 -5
- package/src/pages/sends.ts +2 -2
- package/src/pages/suppressions.ts +2 -2
- package/src/pages/templates.ts +3 -3
- package/frontend-vue/tests/smoke.test.ts +0 -8
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ dashboard and settings. It owns the data (tenant-scoped Mongo tables), renders
|
|
|
12
12
|
e-mails through the DMS html-render chain and sends them through
|
|
13
13
|
`@antelopejs/interface-email`.
|
|
14
14
|
|
|
15
|
-
The module targets `@antelopejs/dms` 0.
|
|
15
|
+
The module targets `@antelopejs/dms` 0.9, `@antelopejs/interface-dms` 0.7 and `@antelopejs/dms-frontend` 0.6. Every read goes through the DMS's `useApiData`: what a page renders is read by the server render and handed to the browser; what a drawer, a dialog, a preview frame or the editor shows is read when it opens or asks (`immediate: false`, `useMailingReads`).
|
|
16
16
|
Like every DMS module, its pages live in the module's own sidebar (Mailing:
|
|
17
17
|
Overview, Templates, Sends; Configure: Settings, Suppression list) and are
|
|
18
18
|
reserved to the platform owner. The design decisions behind the v2 screens are recorded in
|
package/dist/pages/sends.js
CHANGED
|
@@ -86,7 +86,7 @@ const sendAgainAction = (isTest) => ({
|
|
|
86
86
|
},
|
|
87
87
|
target: {
|
|
88
88
|
type: "api",
|
|
89
|
-
url: `${constants_1.API_BASE_PATH}/sends/{_id}/replay`,
|
|
89
|
+
url: `${constants_1.API_BASE_PATH}/sends/{{row._id}}/replay`,
|
|
90
90
|
method: "POST",
|
|
91
91
|
successMessage: "$dms_mailing.sends.actions.sent_again",
|
|
92
92
|
},
|
|
@@ -111,7 +111,7 @@ const suppressedAddressAction = {
|
|
|
111
111
|
},
|
|
112
112
|
target: {
|
|
113
113
|
type: "page",
|
|
114
|
-
url: `${SUPPRESSIONS_PAGE}?email={suppressionAddress}`,
|
|
114
|
+
url: `${SUPPRESSIONS_PAGE}?email={{row.suppressionAddress}}`,
|
|
115
115
|
},
|
|
116
116
|
};
|
|
117
117
|
const permissionMeta = (id, icon) => ({
|
package/dist/pages/sends.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/pages/sends.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sends.js","sourceRoot":"","sources":["../../src/pages/sends.ts"],"names":[],"mappings":"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"}
|
|
@@ -122,7 +122,7 @@ let SuppressionsPageController = class SuppressionsPageController extends (0, pa
|
|
|
122
122
|
showLabel: true,
|
|
123
123
|
target: {
|
|
124
124
|
type: "api",
|
|
125
|
-
url: `${SUPPRESSIONS_URL}/{_id}`,
|
|
125
|
+
url: `${SUPPRESSIONS_URL}/{{row._id}}`,
|
|
126
126
|
method: "DELETE",
|
|
127
127
|
successMessage: key("actions.reactivated"),
|
|
128
128
|
},
|
|
@@ -138,7 +138,7 @@ let SuppressionsPageController = class SuppressionsPageController extends (0, pa
|
|
|
138
138
|
label: key("actions.see_send"),
|
|
139
139
|
icon: "i-ph-paper-plane-tilt",
|
|
140
140
|
rule: { field: "sendId", notEquals: "" },
|
|
141
|
-
target: { type: "page", url: `${constants_1.SENDS_PATH}?record={sendId}` },
|
|
141
|
+
target: { type: "page", url: `${constants_1.SENDS_PATH}?record={{row.sendId}}` },
|
|
142
142
|
},
|
|
143
143
|
],
|
|
144
144
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/pages/suppressions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"suppressions.js","sourceRoot":"","sources":["../../src/pages/suppressions.ts"],"names":[],"mappings":"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"}
|
package/dist/pages/templates.js
CHANGED
|
@@ -120,7 +120,7 @@ let TemplatesPageController = class TemplatesPageController extends (0, page_1.P
|
|
|
120
120
|
label: "$dms_mailing.templates.actions.open_editor",
|
|
121
121
|
icon: "i-ph-pencil-simple",
|
|
122
122
|
isDefault: true,
|
|
123
|
-
target: { type: "page", url: `${constants_1.TEMPLATES_PATH}/{_id}` },
|
|
123
|
+
target: { type: "page", url: `${constants_1.TEMPLATES_PATH}/{{row._id}}` },
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
126
|
label: "$dms_mailing.templates.actions.details",
|
|
@@ -160,7 +160,7 @@ let TemplatesPageController = class TemplatesPageController extends (0, page_1.P
|
|
|
160
160
|
rule: { field: "status", notEquals: constants_1.ARCHIVED_STATUS },
|
|
161
161
|
target: {
|
|
162
162
|
type: "api",
|
|
163
|
-
url: `${constants_1.API_BASE_PATH}/templates/{_id}/archive`,
|
|
163
|
+
url: `${constants_1.API_BASE_PATH}/templates/{{row._id}}/archive`,
|
|
164
164
|
method: "POST",
|
|
165
165
|
successMessage: "$dms_mailing.templates.actions.archived",
|
|
166
166
|
},
|
|
@@ -176,7 +176,7 @@ let TemplatesPageController = class TemplatesPageController extends (0, page_1.P
|
|
|
176
176
|
rule: { field: "status", equals: constants_1.ARCHIVED_STATUS },
|
|
177
177
|
target: {
|
|
178
178
|
type: "api",
|
|
179
|
-
url: `${constants_1.API_BASE_PATH}/templates/{_id}/restore`,
|
|
179
|
+
url: `${constants_1.API_BASE_PATH}/templates/{{row._id}}/restore`,
|
|
180
180
|
method: "POST",
|
|
181
181
|
successMessage: "$dms_mailing.templates.actions.restored",
|
|
182
182
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/pages/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/pages/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import draggable from 'vuedraggable'
|
|
3
3
|
import { useLocalizedDefaults } from '../composables/useLocalizedDefaults'
|
|
4
|
-
import {
|
|
4
|
+
import { useCategoryUsage } from '../composables/useMailingReads'
|
|
5
5
|
import { isMarketingCategory } from '../utils/system-variables'
|
|
6
6
|
import {
|
|
7
7
|
CATEGORY_ICONS,
|
|
@@ -53,7 +53,6 @@ const MOVE_FIELD_COMPONENT = 'DmsSelect'
|
|
|
53
53
|
const LABEL_PART = 'label'
|
|
54
54
|
const ROW_FIELD_UI = { error: 'mt-1 ps-9 text-[12px]' }
|
|
55
55
|
|
|
56
|
-
const api = useMailingApi()
|
|
57
56
|
const { t } = useI18n()
|
|
58
57
|
const localized = useLocalizedDefaults()
|
|
59
58
|
const { confirm } = useConfirm()
|
|
@@ -65,7 +64,11 @@ const root = ref<HTMLElement | null>(null)
|
|
|
65
64
|
const source = computed(() => props.modelValue ?? props.initialValue ?? [])
|
|
66
65
|
const rows = ref<EditableCategory[]>(toRows(source.value))
|
|
67
66
|
const removed = ref<CategoryEntry[]>(movesOf(source.value))
|
|
68
|
-
const
|
|
67
|
+
const usageRead = useCategoryUsage()
|
|
68
|
+
/** Templates per category; none known while the read is missing or failed. */
|
|
69
|
+
const usage = computed<Record<string, number>>(() =>
|
|
70
|
+
usageRead.error.value ? {} : (usageRead.data.value?.counts ?? {}),
|
|
71
|
+
)
|
|
69
72
|
const pickerOpen = ref<string | null>(null)
|
|
70
73
|
let lastEmitted = serializeCategories(currentEntries())
|
|
71
74
|
|
|
@@ -216,14 +219,6 @@ async function moveBy(index: number, offset: number): Promise<void> {
|
|
|
216
219
|
handles?.[moved.index]?.focus()
|
|
217
220
|
}
|
|
218
221
|
|
|
219
|
-
async function loadUsage(): Promise<void> {
|
|
220
|
-
try {
|
|
221
|
-
usage.value = (await api.categoryUsage()).counts
|
|
222
|
-
} catch {
|
|
223
|
-
usage.value = {}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
222
|
watch(source, (value) => {
|
|
228
223
|
if (serializeCategories(value) === lastEmitted) return
|
|
229
224
|
rows.value = toRows(value)
|
|
@@ -238,11 +233,9 @@ watch(
|
|
|
238
233
|
rows.value
|
|
239
234
|
.filter((row) => row.isNew && saved.has(row.id))
|
|
240
235
|
.forEach((row) => (row.isNew = false))
|
|
241
|
-
void
|
|
236
|
+
void usageRead.refresh()
|
|
242
237
|
},
|
|
243
238
|
)
|
|
244
|
-
|
|
245
|
-
onMounted(loadUsage)
|
|
246
239
|
</script>
|
|
247
240
|
|
|
248
241
|
<template>
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
import FormFieldRow from '../build/components/FormFieldRow.vue'
|
|
3
3
|
import FormRows from '../build/components/FormRows.vue'
|
|
4
4
|
import { useMailingApi } from '../composables/useMailingApi'
|
|
5
|
+
import {
|
|
6
|
+
useTemplateContentRead,
|
|
7
|
+
useTemplateListRead,
|
|
8
|
+
} from '../composables/useMailingReads'
|
|
5
9
|
import {
|
|
6
10
|
HTTP_CONFLICT,
|
|
7
11
|
apiErrorMessage,
|
|
@@ -32,6 +36,8 @@ const { t } = useI18n()
|
|
|
32
36
|
const { processApiMessage } = useTranslation()
|
|
33
37
|
|
|
34
38
|
const templateId = computed(() => props.rowData?._id ?? props.templateId ?? '')
|
|
39
|
+
const readTemplates = useTemplateListRead()
|
|
40
|
+
const readContent = useTemplateContentRead(templateId)
|
|
35
41
|
const source = ref<TemplateRow | null>(props.rowData ?? null)
|
|
36
42
|
const takenSlugs = ref(new Set<string>())
|
|
37
43
|
const name = ref('')
|
|
@@ -49,13 +55,13 @@ function prefill(template: TemplateRow): void {
|
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
onMounted(async () => {
|
|
52
|
-
const list = await
|
|
58
|
+
const list = await readTemplates().catch(() => ({ results: [] }))
|
|
53
59
|
takenSlugs.value = new Set(list.results.map((row: TemplateRow) => row.slug))
|
|
54
60
|
source.value ??=
|
|
55
61
|
list.results.find((row: TemplateRow) => row._id === templateId.value) ??
|
|
56
62
|
null
|
|
57
63
|
if (!source.value && templateId.value) {
|
|
58
|
-
const detail = await
|
|
64
|
+
const detail = await readContent().catch(() => null)
|
|
59
65
|
source.value = detail?.template ?? null
|
|
60
66
|
}
|
|
61
67
|
if (source.value) prefill(source.value)
|
|
@@ -174,7 +180,7 @@ async function submit(): Promise<void> {
|
|
|
174
180
|
:ui="{ base: 'font-mono' }"
|
|
175
181
|
:disabled="loading"
|
|
176
182
|
:trailing-icon="slugIssue ? undefined : 'i-ph-check-circle'"
|
|
177
|
-
@update:model-value="(value) => onSlugInput(String(value))"
|
|
183
|
+
@update:model-value="(value: unknown) => onSlugInput(String(value))"
|
|
178
184
|
/>
|
|
179
185
|
</template>
|
|
180
186
|
</FormFieldRow>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import { computed, onMounted, ref } from 'vue'
|
|
3
3
|
import type { TemplateContentResponse } from '../types/mailing'
|
|
4
|
-
import {
|
|
4
|
+
import { useTemplateContentRead } from '../composables/useMailingReads'
|
|
5
5
|
import { useRecordLabel } from '../composables/useEditorContext'
|
|
6
6
|
import { templateIdFrom } from '../utils/editor-route'
|
|
7
7
|
import { TEMPLATES_PATH } from '../utils/pages'
|
|
@@ -15,10 +15,10 @@ const props = defineProps<Props>()
|
|
|
15
15
|
|
|
16
16
|
const { t } = useI18n()
|
|
17
17
|
const route = useDmsRoute()
|
|
18
|
-
const api = useMailingApi()
|
|
19
18
|
const setRecordLabel = useRecordLabel()
|
|
20
19
|
|
|
21
20
|
const templateId = computed(() => templateIdFrom(props.routeParams, route.path))
|
|
21
|
+
const readContent = useTemplateContentRead(templateId)
|
|
22
22
|
const locale = ref<string | null>(
|
|
23
23
|
route.query.locale ? String(route.query.locale) : null,
|
|
24
24
|
)
|
|
@@ -31,7 +31,7 @@ const generation = ref(0)
|
|
|
31
31
|
async function load(): Promise<void> {
|
|
32
32
|
failed.value = false
|
|
33
33
|
try {
|
|
34
|
-
loaded.value = await
|
|
34
|
+
loaded.value = await readContent()
|
|
35
35
|
setRecordLabel(loaded.value.template.name)
|
|
36
36
|
generation.value += 1
|
|
37
37
|
} catch {
|
|
@@ -5,6 +5,10 @@ import FormRows from '../build/components/FormRows.vue'
|
|
|
5
5
|
import NewTemplateSourceTile from './NewTemplateSourceTile.vue'
|
|
6
6
|
import { useLocalizedDefaults } from '../composables/useLocalizedDefaults'
|
|
7
7
|
import { useMailingApi } from '../composables/useMailingApi'
|
|
8
|
+
import {
|
|
9
|
+
useStartersRead,
|
|
10
|
+
useTemplateListRead,
|
|
11
|
+
} from '../composables/useMailingReads'
|
|
8
12
|
import {
|
|
9
13
|
HTTP_CONFLICT,
|
|
10
14
|
apiErrorMessage,
|
|
@@ -85,6 +89,8 @@ const source = ref<SourceChoice>(
|
|
|
85
89
|
const isSubmitted = ref(false)
|
|
86
90
|
const saving = ref(false)
|
|
87
91
|
const templates = ref<TemplateRow[]>([])
|
|
92
|
+
const readTemplates = useTemplateListRead()
|
|
93
|
+
const readStarters = useStartersRead()
|
|
88
94
|
const localized = useLocalizedDefaults()
|
|
89
95
|
const storedStarters = ref<StarterSummary[]>([])
|
|
90
96
|
const starters = computed(() => localized.starters(storedStarters.value))
|
|
@@ -94,8 +100,8 @@ const templateSearch = ref('')
|
|
|
94
100
|
|
|
95
101
|
onMounted(async () => {
|
|
96
102
|
const [templateList, starterList] = await Promise.all([
|
|
97
|
-
|
|
98
|
-
|
|
103
|
+
readTemplates().catch(() => ({ results: [] as TemplateRow[] })),
|
|
104
|
+
readStarters().catch(() => ({ starters: [] as StarterSummary[] })),
|
|
99
105
|
])
|
|
100
106
|
templates.value = templateList.results
|
|
101
107
|
storedStarters.value = starterList.starters
|
|
@@ -324,7 +330,7 @@ async function submit(): Promise<void> {
|
|
|
324
330
|
:ui="{ base: 'font-mono' }"
|
|
325
331
|
:trailing-icon="slugIssue ? undefined : 'i-ph-check-circle'"
|
|
326
332
|
:aria-invalid="Boolean(slugError)"
|
|
327
|
-
@update:model-value="(value) => onSlugInput(String(value))"
|
|
333
|
+
@update:model-value="(value: unknown) => onSlugInput(String(value))"
|
|
328
334
|
/>
|
|
329
335
|
<UBadge
|
|
330
336
|
color="neutral"
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import { useSetupHidesPeriod } from '../composables/useOverviewSetup'
|
|
2
|
+
import { useSetupFacts } from '../composables/useMailingReads'
|
|
4
3
|
import {
|
|
5
4
|
isSetupComplete,
|
|
6
5
|
needsSetup,
|
|
7
6
|
setupSteps,
|
|
8
|
-
type SetupFacts,
|
|
9
7
|
type SetupStep,
|
|
10
8
|
type SetupStepState,
|
|
11
9
|
} from '../utils/overview-setup'
|
|
@@ -13,10 +11,10 @@ import type { Component } from 'vue'
|
|
|
13
11
|
import type { MailingComponentProps } from '../types/component'
|
|
14
12
|
|
|
15
13
|
defineProps<MailingComponentProps>()
|
|
14
|
+
defineOptions({ inheritAttrs: false })
|
|
16
15
|
|
|
17
16
|
type GateState = 'loading' | 'error' | 'ready'
|
|
18
17
|
|
|
19
|
-
const OVERVIEW_PERIOD_SCOPE = 'mailing-overview'
|
|
20
18
|
const NEW_TEMPLATE_MODAL = 'MailingNewTemplateModal'
|
|
21
19
|
const NEW_TEMPLATE_MODAL_SIZE = 'lg'
|
|
22
20
|
const KEY_PREFIX = 'dms_mailing.setup.'
|
|
@@ -34,15 +32,25 @@ const STEP_BUTTON_VARIANTS: Record<SetupStepState, 'solid' | 'outline'> = {
|
|
|
34
32
|
todo: 'outline',
|
|
35
33
|
}
|
|
36
34
|
|
|
37
|
-
const api = useMailingApi()
|
|
38
35
|
const { t } = useI18n()
|
|
39
36
|
const { open: openModal } = useModal()
|
|
40
|
-
const hidesPeriod = useSetupHidesPeriod(OVERVIEW_PERIOD_SCOPE)
|
|
41
37
|
|
|
42
|
-
const facts
|
|
43
|
-
|
|
38
|
+
const { data: facts, error, status, refresh } = useSetupFacts()
|
|
39
|
+
/**
|
|
40
|
+
* The header's period selector sets up once the dashboard has: a server
|
|
41
|
+
* render, which renders the dashboard once the facts are in, would otherwise
|
|
42
|
+
* set the selector up first and render the cards with a period the browser's
|
|
43
|
+
* cards do not have yet as they hydrate.
|
|
44
|
+
*/
|
|
45
|
+
const DashboardRendered = holdPageHeaderActions()
|
|
44
46
|
const isResumed = ref(false)
|
|
45
47
|
|
|
48
|
+
/** A failure shows once its retry is over; the facts read last stay meanwhile. */
|
|
49
|
+
const state = computed<GateState>(() => {
|
|
50
|
+
if (facts.value) return 'ready'
|
|
51
|
+
return error.value && status.value !== 'pending' ? 'error' : 'loading'
|
|
52
|
+
})
|
|
53
|
+
|
|
46
54
|
const steps = computed<SetupStep[]>(() =>
|
|
47
55
|
facts.value ? setupSteps(facts.value) : [],
|
|
48
56
|
)
|
|
@@ -63,40 +71,22 @@ const errorActions = computed(() => [
|
|
|
63
71
|
{
|
|
64
72
|
label: key('retry'),
|
|
65
73
|
icon: 'i-ph-arrows-clockwise',
|
|
66
|
-
onClick: () => void
|
|
74
|
+
onClick: () => void refresh(),
|
|
67
75
|
},
|
|
68
76
|
])
|
|
69
77
|
|
|
70
78
|
const stepDescription = (step: SetupStep): string =>
|
|
71
79
|
key(`steps.${step.id}.${step.state === 'done' ? 'done' : 'description'}`)
|
|
72
80
|
|
|
73
|
-
async function load(): Promise<void> {
|
|
74
|
-
state.value = 'loading'
|
|
75
|
-
try {
|
|
76
|
-
facts.value = await api.setupFacts()
|
|
77
|
-
state.value = 'ready'
|
|
78
|
-
} catch {
|
|
79
|
-
state.value = 'error'
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
81
|
function createTemplate(): void {
|
|
84
82
|
const modal = openModal({
|
|
85
83
|
title: t('dms_mailing.setup.create_template'),
|
|
86
84
|
component: resolveComponent(NEW_TEMPLATE_MODAL) as Component,
|
|
87
85
|
size: NEW_TEMPLATE_MODAL_SIZE,
|
|
88
86
|
})
|
|
89
|
-
|
|
87
|
+
const reread = () => refresh()
|
|
88
|
+
void modal.result.then(reread, reread)
|
|
90
89
|
}
|
|
91
|
-
|
|
92
|
-
watch(isBlocking, (blocking) => {
|
|
93
|
-
hidesPeriod.value = blocking
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
onMounted(load)
|
|
97
|
-
onBeforeUnmount(() => {
|
|
98
|
-
hidesPeriod.value = false
|
|
99
|
-
})
|
|
100
90
|
</script>
|
|
101
91
|
|
|
102
92
|
<template>
|
|
@@ -217,4 +207,5 @@ onBeforeUnmount(() => {
|
|
|
217
207
|
|
|
218
208
|
<slot v-if="showsDashboard" />
|
|
219
209
|
</div>
|
|
210
|
+
<DashboardRendered />
|
|
220
211
|
</template>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { useProviderInfo } from '../composables/useMailingReads'
|
|
3
3
|
import { useSetupHidesPeriod } from '../composables/useOverviewSetup'
|
|
4
4
|
import { presetShortLabelKey } from '../utils/period'
|
|
5
5
|
import type { Component } from 'vue'
|
|
@@ -26,13 +26,18 @@ const props = withDefaults(defineProps<PageHeaderProps>(), {
|
|
|
26
26
|
showProvider: true,
|
|
27
27
|
})
|
|
28
28
|
|
|
29
|
-
const api = useMailingApi()
|
|
30
29
|
const { t } = useI18n()
|
|
31
30
|
|
|
32
31
|
const StatusPill = resolveComponent('DmsStatusPill') as Component
|
|
33
32
|
const PeriodSelector = resolveComponent('DmsPeriodSelector') as Component
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
/** Shown as "no provider" when the read fails. */
|
|
35
|
+
const NO_PROVIDER: ProviderInfo = { name: '', connected: false, features: null }
|
|
36
|
+
|
|
37
|
+
const providerRead = useProviderInfo(() => props.showProvider)
|
|
38
|
+
const provider = computed<ProviderInfo | null>(() =>
|
|
39
|
+
providerRead.error.value ? NO_PROVIDER : providerRead.data.value,
|
|
40
|
+
)
|
|
36
41
|
const hidesPeriod = useSetupHidesPeriod(props.periodScope)
|
|
37
42
|
|
|
38
43
|
const presetLabels = computed(() =>
|
|
@@ -82,15 +87,6 @@ function renderPeriod() {
|
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
usePageHeaderActions(() => [renderProvider(), renderPeriod()])
|
|
85
|
-
|
|
86
|
-
onMounted(async () => {
|
|
87
|
-
if (!props.showProvider) return
|
|
88
|
-
try {
|
|
89
|
-
provider.value = await api.provider()
|
|
90
|
-
} catch {
|
|
91
|
-
provider.value = { name: '', connected: false, features: null }
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
90
|
</script>
|
|
95
91
|
|
|
96
92
|
<template>
|
|
@@ -4,6 +4,7 @@ import { onBeforeUnmount } from 'vue'
|
|
|
4
4
|
import FormFieldRow from '../build/components/FormFieldRow.vue'
|
|
5
5
|
import FormRows from '../build/components/FormRows.vue'
|
|
6
6
|
import { useMailingApi } from '../composables/useMailingApi'
|
|
7
|
+
import { useTemplateContentRead } from '../composables/useMailingReads'
|
|
7
8
|
import type { SendResult } from '../composables/useMailingApi'
|
|
8
9
|
import { useTemplateDrawer } from '../composables/useTemplateDrawer'
|
|
9
10
|
import { apiErrorMessage } from '../utils/api-error'
|
|
@@ -64,6 +65,7 @@ const { uniqueLocales } = useUniqueLocales()
|
|
|
64
65
|
const overlays = useTemplateDrawer()
|
|
65
66
|
|
|
66
67
|
const templateId = computed(() => props.rowData?._id ?? props.templateId ?? '')
|
|
68
|
+
const readContent = useTemplateContentRead(templateId)
|
|
67
69
|
const detail = ref<TemplateContentResponse | null>(null)
|
|
68
70
|
const loading = ref(true)
|
|
69
71
|
const recipients = ref<string[]>([])
|
|
@@ -104,7 +106,7 @@ const missingRequired = computed(() =>
|
|
|
104
106
|
onMounted(async () => {
|
|
105
107
|
if (!templateId.value) return
|
|
106
108
|
try {
|
|
107
|
-
detail.value = await
|
|
109
|
+
detail.value = await readContent()
|
|
108
110
|
values.value = initialSendValues(fields.value, detail.value.testData)
|
|
109
111
|
locale.value = detail.value.fallbackLocale
|
|
110
112
|
} catch (error) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { useSendHtmlRead, useSendRead } from '../composables/useMailingReads'
|
|
3
3
|
import type { SendHtmlResponse, SendRow } from '../types/mailing'
|
|
4
4
|
|
|
5
5
|
type RenderingView = 'desktop' | 'mobile' | 'html'
|
|
@@ -44,7 +44,6 @@ const FRAME_WIDTHS: Record<RenderingView, string> = {
|
|
|
44
44
|
html: '100%',
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
const api = useMailingApi()
|
|
48
47
|
const { t, locale } = useI18n()
|
|
49
48
|
|
|
50
49
|
const view = ref<RenderingView>('desktop')
|
|
@@ -54,6 +53,8 @@ const loading = ref(false)
|
|
|
54
53
|
const failed = ref(false)
|
|
55
54
|
|
|
56
55
|
const sendIdValue = computed(() => props.rowData?._id ?? props.sendId ?? '')
|
|
56
|
+
const readSend = useSendRead(sendIdValue)
|
|
57
|
+
const readHtml = useSendHtmlRead(sendIdValue)
|
|
57
58
|
const key = (path: string, params: Record<string, unknown> = {}): string =>
|
|
58
59
|
t(`${KEY_PREFIX}${path}`, params)
|
|
59
60
|
|
|
@@ -85,7 +86,7 @@ const meta = computed(() => {
|
|
|
85
86
|
|
|
86
87
|
async function loadSend(): Promise<void> {
|
|
87
88
|
if (send.value) return
|
|
88
|
-
const detail = await
|
|
89
|
+
const detail = await readSend()
|
|
89
90
|
send.value = detail.send
|
|
90
91
|
}
|
|
91
92
|
|
|
@@ -94,10 +95,7 @@ async function load(): Promise<void> {
|
|
|
94
95
|
loading.value = true
|
|
95
96
|
failed.value = false
|
|
96
97
|
try {
|
|
97
|
-
const [html] = await Promise.all([
|
|
98
|
-
api.sendHtml(sendIdValue.value),
|
|
99
|
-
loadSend(),
|
|
100
|
-
])
|
|
98
|
+
const [html] = await Promise.all([readHtml(), loadSend()])
|
|
101
99
|
rendering.value = html
|
|
102
100
|
} catch (error) {
|
|
103
101
|
failed.value = true
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { refDebounced } from '@vueuse/core'
|
|
3
|
+
import { useRetentionPreview } from '../composables/useMailingReads'
|
|
4
4
|
import {
|
|
5
5
|
clampRetention,
|
|
6
|
-
|
|
6
|
+
CLOCK_FORMAT,
|
|
7
7
|
isWithinADay,
|
|
8
8
|
MAX_RETENTION_DAYS,
|
|
9
9
|
MIN_RETENTION_DAYS,
|
|
@@ -35,8 +35,8 @@ const DATE_FORMAT: Intl.DateTimeFormatOptions = {
|
|
|
35
35
|
day: 'numeric',
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
const api = useMailingApi()
|
|
39
38
|
const { t, locale } = useI18n()
|
|
39
|
+
const { dateTimeFormat } = useRegionalFormat()
|
|
40
40
|
const { confirm } = useConfirm()
|
|
41
41
|
const form = useEnclosingForm()
|
|
42
42
|
|
|
@@ -56,7 +56,13 @@ const isCustom = computed(
|
|
|
56
56
|
isCustomPicked.value ||
|
|
57
57
|
(days.value !== null && retentionChoice(days.value) === RETENTION_CUSTOM),
|
|
58
58
|
)
|
|
59
|
-
|
|
59
|
+
/** The days the preview reads, once the choice holds still. */
|
|
60
|
+
const previewDays = refDebounced(days, PREVIEW_DEBOUNCE_MS)
|
|
61
|
+
const previewRead = useRetentionPreview(previewDays)
|
|
62
|
+
/** A failed read shows no preview. */
|
|
63
|
+
const preview = computed<RetentionPreview | null>(() =>
|
|
64
|
+
previewRead.error.value ? null : previewRead.data.value,
|
|
65
|
+
)
|
|
60
66
|
|
|
61
67
|
const key = (
|
|
62
68
|
path: string,
|
|
@@ -99,8 +105,8 @@ function previewParams(value: RetentionPreview): Record<string, unknown> {
|
|
|
99
105
|
return {
|
|
100
106
|
when: isWithinADay(value.nextRunAt, new Date())
|
|
101
107
|
? key('tonight')
|
|
102
|
-
: new Date(value.nextRunAt)
|
|
103
|
-
time:
|
|
108
|
+
: dateTimeFormat(DATE_FORMAT).format(new Date(value.nextRunAt)),
|
|
109
|
+
time: dateTimeFormat(CLOCK_FORMAT).format(new Date(value.nextRunAt)),
|
|
104
110
|
count: new Intl.NumberFormat(locale.value).format(value.count),
|
|
105
111
|
duration: key('days', { count: value.days }, value.days),
|
|
106
112
|
}
|
|
@@ -148,22 +154,6 @@ function guardSubmit(): boolean {
|
|
|
148
154
|
return false
|
|
149
155
|
}
|
|
150
156
|
|
|
151
|
-
const loadPreview = useDebounceFn(async (value: number) => {
|
|
152
|
-
try {
|
|
153
|
-
preview.value = await api.retentionPreview(value)
|
|
154
|
-
} catch {
|
|
155
|
-
preview.value = null
|
|
156
|
-
}
|
|
157
|
-
}, PREVIEW_DEBOUNCE_MS)
|
|
158
|
-
|
|
159
|
-
watch(
|
|
160
|
-
days,
|
|
161
|
-
(value) => {
|
|
162
|
-
if (value) void loadPreview(value)
|
|
163
|
-
},
|
|
164
|
-
{ immediate: true },
|
|
165
|
-
)
|
|
166
|
-
|
|
167
157
|
watch(
|
|
168
158
|
() => props.modelValue,
|
|
169
159
|
(value) => {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { TEMPLATES_PATH } from '../utils/pages'
|
|
3
3
|
import { useClipboard } from '@vueuse/core'
|
|
4
4
|
import { useMailingApi } from '../composables/useMailingApi'
|
|
5
|
+
import { useProviderRead, useSendRead } from '../composables/useMailingReads'
|
|
5
6
|
import { useReplayToast } from '../composables/useReplayToast'
|
|
6
7
|
import {
|
|
7
8
|
describeProblem,
|
|
@@ -90,6 +91,8 @@ const { copy } = useClipboard()
|
|
|
90
91
|
const KeyValueList = resolveComponent('DmsKeyValueList') as Component
|
|
91
92
|
|
|
92
93
|
const sendId = computed(() => props.rowData?._id ?? props.sendId ?? '')
|
|
94
|
+
const readSend = useSendRead(sendId)
|
|
95
|
+
const readProvider = useProviderRead()
|
|
93
96
|
const detail = ref<SendDetailResponse | null>(null)
|
|
94
97
|
const tracking = ref<TimelineTracking | null>(null)
|
|
95
98
|
const loading = ref(false)
|
|
@@ -231,7 +234,7 @@ async function load(): Promise<void> {
|
|
|
231
234
|
if (!sendId.value) return
|
|
232
235
|
loading.value = true
|
|
233
236
|
try {
|
|
234
|
-
detail.value = await
|
|
237
|
+
detail.value = await readSend()
|
|
235
238
|
} catch (error) {
|
|
236
239
|
useApiError(error)
|
|
237
240
|
} finally {
|
|
@@ -242,7 +245,7 @@ async function load(): Promise<void> {
|
|
|
242
245
|
/** The provider's tracking, so the timeline waits only for what it reports. */
|
|
243
246
|
async function loadTracking(): Promise<void> {
|
|
244
247
|
try {
|
|
245
|
-
const provider = await
|
|
248
|
+
const provider = await readProvider()
|
|
246
249
|
tracking.value = provider.features
|
|
247
250
|
? {
|
|
248
251
|
openTracking: !!provider.features.openTracking,
|