@webx-ui/module-inbox 0.10.0 → 0.11.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/dist/FormEditorPage-B2Q0gTp3.js +889 -0
- package/dist/FormEditorPage-B2Q0gTp3.js.map +1 -0
- package/dist/FormNotifications.d.ts +3 -1
- package/dist/{InboxPage-PAtQ48A2.js → InboxPage-iMQ0pjrR.js} +2 -2
- package/dist/{InboxPage-PAtQ48A2.js.map → InboxPage-iMQ0pjrR.js.map} +1 -1
- package/dist/{StatusesPage-xVeRPm4u.js → StatusesPage-arNMRLzM.js} +2 -2
- package/dist/{StatusesPage-xVeRPm4u.js.map → StatusesPage-arNMRLzM.js.map} +1 -1
- package/dist/SubmissionPage-BDI8xL0N.js +642 -0
- package/dist/SubmissionPage-BDI8xL0N.js.map +1 -0
- package/dist/{index-BJ-mLCee.js → index-gLN73Ici.js} +51 -49
- package/dist/index-gLN73Ici.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types.d.ts +41 -0
- package/package.json +1 -1
- package/dist/FormEditorPage-CXYnpKAh.js +0 -856
- package/dist/FormEditorPage-CXYnpKAh.js.map +0 -1
- package/dist/SubmissionPage-DI8jAaud.js +0 -608
- package/dist/SubmissionPage-DI8jAaud.js.map +0 -1
- package/dist/index-BJ-mLCee.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubmissionPage-BDI8xL0N.js","sources":["../src/SubmissionPage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, watch, type Component } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport {\n useAdmin,\n useErrorText,\n useTranslate,\n WxDate,\n WxNotes,\n WxScreenHead,\n type ScreenAction,\n} from '@webx-ui/module-admin'\nimport {\n confirm,\n localizedValue,\n toast,\n useLocales,\n WxAction,\n WxAlert,\n WxBadge,\n WxButton,\n WxCard,\n WxDescriptions,\n WxDescriptionsItem,\n WxEmpty,\n WxFileCard,\n WxSelect,\n WxSkeleton,\n WxTab,\n WxTabs,\n WxText,\n WxTimeline,\n WxTimelineItem,\n} from '@webx-ui/core'\nimport { createInboxApi } from './api'\nimport { useInboxMessages, useStatusName } from './i18n'\nimport type {\n ChannelDelivery,\n InboxRecipient,\n InboxStatus,\n InboxSubmission,\n SubmissionEvent,\n SubmissionValue,\n} from './types'\n\n/**\n * One submission, on a screen of its own (§11).\n *\n * A dialog over the list would have kept the filters under the reader's hand, and it was\n * rejected for one reason: a submission needs an address somebody can send. It goes into the\n * mail to whoever deals with it, it gets pasted into a chat, an agent links to it. What the\n * dialog would have given back is paid for here instead — the list's whole state travels in\n * the address, so the way out lands exactly where the reader was, and the arrows walk the same\n * filtered pile.\n */\nconst props = withDefaults(defineProps<{ base?: string }>(), { base: '/inbox' })\n\nconst context = useAdmin()\nconst api = createInboxApi(context)\nconst route = useRoute()\nconst router = useRouter()\nconst locales = useLocales()\nuseInboxMessages()\n\nconst t = useTranslate('webx-inbox')\n/* The notes feed is the panel's own, and so is the word for it: a second \"Notes\" in this\n module's dictionary would be the same line translated twice. */\nconst panel = useTranslate('webx-admin')\n/* Not the server's `message`: the panel says how a request failed in its own words. */\nconst message = useErrorText()\n\nconst submission = ref<InboxSubmission | null>(null)\nconst statuses = ref<InboxStatus[]>([])\nconst admins = ref<InboxRecipient[]>([])\nconst loading = ref(true)\n\nconst canUpdate = computed(() => context.can('inbox.update'))\n\n/**\n * What draws a module's enclosure (§2.20): the panel type `inbox-enclosure:<kind>` the module\n * registered — a configuration as a table, a basket as its lines. Without one, the enclosure's\n * text is shown as it came, in the letter's lines.\n */\nfunction enclosureView(value: SubmissionValue): Component | null {\n if (value.type !== 'enclosure' || value.field_id !== null) return null\n const payload = value.payload as { kind?: unknown } | null\n const kind = typeof payload?.kind === 'string' ? payload.kind : value.name\n\n return context.types[`inbox-enclosure:${kind}`]?.component ?? null\n}\n\nconst id = computed(() => Number(route.params.id))\n\n/** Everything the list was looking at, carried along so the arrows walk the same pile. */\nconst filter = computed(() => ({\n view: typeof route.query.view === 'string' ? route.query.view : undefined,\n search: typeof route.query.search === 'string' ? route.query.search : undefined,\n assignee: typeof route.query.assignee === 'string' ? route.query.assignee : undefined,\n}))\n\n/** Back to the list, on the form, the tab and the page it was left at. */\nconst backTo = computed(() => ({ path: props.base, query: { ...route.query } }))\n\nconst statusOptions = computed(() =>\n statuses.value.map((status) => ({ value: status.id, label: name(status) })),\n)\n\n/* Nobody is not an option in the list but the empty state of the control: a select whose\n first line means \"none\" is one somebody picks by accident, and `clearable` already says\n it. */\nconst assigneeOptions = computed(() =>\n admins.value.map((admin) => ({ value: admin.id, label: admin.name })),\n)\n\n/* In the panel's language, not the content's: a status is a word of the interface. */\nconst name = useStatusName()\n\nconst heading = computed(() => t('panel.submission', { id: String(id.value) }))\n\nconst formTitle = computed(() => {\n const form = submission.value?.form\n\n return form === undefined\n ? ''\n : localizedValue(form.title ?? {}, locales.active.value, form.slug ?? '')\n})\n\n/**\n * Where a reply goes.\n *\n * The form says which field holds the sender's address (`email_field`); without one, the first\n * answer that was asked as an e-mail is the honest guess, and where there is none the button\n * is simply not there — a `mailto:` with nothing after it opens an empty window.\n */\nconst replyTo = computed(() => {\n const values = submission.value?.values ?? []\n const answer = values.find((value) => value.type === 'email' && (value.value ?? '') !== '')\n\n return answer?.value ?? null\n})\n\nconst mailto = computed(() => {\n if (replyTo.value === null) return null\n\n const subject = encodeURIComponent(`${formTitle.value} — ${heading.value}`)\n\n return `mailto:${replyTo.value}?subject=${subject}`\n})\n\nasync function load(): Promise<void> {\n loading.value = true\n\n try {\n submission.value = await api.submission(id.value, filter.value)\n } catch (error) {\n toast.danger(message(error))\n void router.replace(backTo.value)\n } finally {\n loading.value = false\n }\n}\n\nasync function lists(): Promise<void> {\n try {\n statuses.value = await api.statuses()\n\n // Only where there is something to do with them: assigning is `inbox.update`, and the\n // list of administrators is not a reader's business.\n if (canUpdate.value) {\n admins.value = await api.recipients()\n }\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\n/* The arrows change the address without leaving the screen, so the record has to follow it. */\nwatch(id, () => void load(), { immediate: true })\n\nvoid lists()\n\nasync function save(input: { status_id?: number; assignee_id?: number | null }): Promise<void> {\n try {\n submission.value = await api.saveSubmission(id.value, input)\n toast.success(t('panel.saved'))\n } catch (error) {\n toast.danger(message(error))\n await load()\n }\n}\n\nfunction onStatus(value: unknown): void {\n if (typeof value === 'number') void save({ status_id: value })\n}\n\nfunction onAssignee(value: unknown): void {\n void save({ assignee_id: typeof value === 'number' ? value : null })\n}\n\n/*\n * What the screen offers: answering it, and — behind the `···` — what is done to the pile it\n * came from. Replying is the main action by §18.3, so it is the one that keeps a button of its\n * own once the head runs out of room.\n */\nconst actions = computed<ScreenAction[]>(() => {\n const list: ScreenAction[] = []\n\n if (mailto.value) {\n list.push({\n key: 'reply',\n label: t('panel.reply'),\n icon: 'mail',\n primary: true,\n href: mailto.value,\n target: '_self',\n })\n }\n\n if (canUpdate.value && submission.value !== null) {\n list.push(\n {\n key: 'unread',\n icon: 'eye-off',\n label: t('panel.mark-unread'),\n menu: true,\n run: () => void unread(),\n },\n {\n key: 'notify',\n icon: 'mail',\n label: t('panel.notify-again'),\n menu: true,\n run: () => void notifyAgain(),\n },\n {\n key: 'delete',\n icon: 'trash',\n label: t('panel.delete'),\n danger: true,\n run: () => void remove(),\n },\n )\n }\n\n return list\n})\n\n/*\n * The letter once more — after the mail settings were fixed, or for one stuck in a queue that\n * no worker reads. A form that names nobody is refused by the server, and that is said here.\n */\nasync function notifyAgain(): Promise<void> {\n try {\n submission.value = await api.notifySubmission(id.value)\n toast.success(t('panel.notify-sent-again'))\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nconst notification = computed(() => submission.value?.notification ?? null)\n\nfunction recipientState(state: string): string {\n return t(`panel.notify-recipient-${state}`)\n}\n\n/*\n * What the channels of the notifications module made of it (NOTIFICATIONS §15.3) — null on a\n * site without that module, and then there is no tab for it at all.\n */\nconst channels = computed(() => submission.value?.channels ?? null)\n\n/* A channel that did not deliver is said above the strip: nobody opens a tab to look for it. */\nconst channelsFailed = computed(() => (channels.value ?? []).some((row) => row.status === 'failed'))\n\nconst channelsRetryable = computed(() => (channels.value ?? []).some((row) => row.retryable))\n\nfunction channelTone(row: ChannelDelivery): 'danger' | 'success' | 'warning' | 'default' {\n if (row.status === 'failed') return 'danger'\n // Sent into a trap is not delivered: the label says so, and the colour must not contradict it.\n if (row.status === 'sent' && row.trap) return 'warning'\n if (row.status === 'sent') return 'success'\n if (row.status === 'skipped') return 'warning'\n\n return 'default'\n}\n\nasync function unread(): Promise<void> {\n try {\n await api.massSubmissions({ ids: [id.value], action: 'unread' })\n // Straight back to the list: a submission marked unread and then left open is one the\n // next request would mark read again.\n void router.push(backTo.value)\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nasync function remove(): Promise<void> {\n const agreed = await confirm({\n title: t('panel.delete-submission-title'),\n message: t('panel.delete-submission-text'),\n confirmText: t('panel.delete'),\n cancelText: t('panel.cancel'),\n tone: 'danger',\n })\n\n if (!agreed) return\n\n try {\n await api.removeSubmission(id.value)\n toast.success(t('panel.deleted'))\n void router.push(backTo.value)\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nfunction go(to: number | null): void {\n if (to === null) return\n\n void router.push({ path: `${props.base}/submissions/${to}`, query: { ...route.query } })\n}\n\n/**\n * A status the log names, in the words the panel calls it by.\n *\n * The log stores the key on purpose — read months later, the row it pointed at may have been\n * renamed or deleted, and history must not be rewritten by either. So the key is translated\n * where the panel still has that status, and shown as it stands where it does not: `spam` is\n * a poorer line than \"Спам\", and an invented one would be worse than both.\n */\nfunction statusName(key: string): string {\n const status = statuses.value.find((one) => one.key === key)\n\n return status === undefined ? key : name(status)\n}\n\nconst namesNobody = computed(\n () => submission.value?.events?.some((event) => event.type === 'no_recipients') ?? false,\n)\n\n/** One line of the log, in words rather than as a pair of columns. */\nfunction line(event: SubmissionEvent): string {\n switch (event.type) {\n case 'created':\n return t('panel.event-created')\n case 'status':\n return t('panel.event-status', { to: statusName(event.to ?? '') })\n case 'assignee':\n return event.to === null || event.to === ''\n ? t('panel.event-unassigned')\n : t('panel.event-assignee', { to: event.to })\n case 'note':\n return t('panel.event-note')\n case 'notified':\n return t('panel.event-notified')\n // A handler of `webx-inbox.handlers`: `from` is its class, shown by its own short name.\n case 'handled':\n return t('panel.event-handled', { name: handlerName(event.from) })\n case 'handler_error':\n return t('panel.event-handler-error', {\n name: handlerName(event.from),\n error: event.to ?? '',\n })\n case 'no_recipients':\n return t('panel.event-no-recipients')\n case 'notify_queued':\n return t('panel.event-notify-queued')\n case 'notify_failed':\n return t('panel.event-notify-failed', { to: event.to ?? '' })\n // An answer corrected by hand: named by the label it was asked under, when it still has one.\n case 'value':\n return t('panel.event-value', {\n field: answerLabel(event.field ?? ''),\n from: event.from ?? '',\n to: event.to ?? '',\n })\n default:\n return event.type\n }\n}\n\nfunction answerLabel(name: string): string {\n const answer = submission.value?.values.find((value) => value.name === name)\n\n return answer?.label || name\n}\n\nfunction handlerName(name: string | null): string {\n return (name ?? '').split('\\\\').pop() ?? ''\n}\n\nfunction kilobytes(size: number): string {\n return `${Math.max(1, Math.round(size / 1024))} KB`\n}\n\n/** The metadata worth showing, in the order somebody reads it, with the empty ones left out. */\nconst details = computed(() => {\n const meta = submission.value?.meta ?? {}\n\n const rows: { label: string; value: string; link?: boolean }[] = []\n\n if (typeof meta.page === 'string' && meta.page !== '') {\n rows.push({ label: t('panel.meta-page'), value: meta.page, link: true })\n }\n\n // Where on that page the form stood — the footer, an article — beside the page it answers.\n const placement = submission.value?.placement\n if (typeof placement === 'string' && placement !== '') {\n rows.push({ label: t('panel.meta-placement'), value: placement })\n }\n\n if (typeof meta.referrer === 'string' && meta.referrer !== '') {\n rows.push({ label: t('panel.meta-referrer'), value: meta.referrer, link: true })\n }\n\n for (const [key, value] of Object.entries(meta.utm ?? {})) {\n rows.push({ label: key, value: String(value) })\n }\n\n if (typeof meta.locale === 'string' && meta.locale !== '') {\n rows.push({ label: t('panel.meta-locale'), value: meta.locale })\n }\n\n if (typeof meta.ip === 'string' && meta.ip !== '') {\n rows.push({ label: t('panel.meta-ip'), value: meta.ip })\n }\n\n if (typeof meta.user_agent === 'string' && meta.user_agent !== '') {\n rows.push({ label: t('panel.meta-agent'), value: meta.user_agent })\n }\n\n return rows\n})\n</script>\n\n<template>\n <div class=\"wx-submission\">\n <wx-screen-head :title=\"heading\" :subtitle=\"formTitle\" :back=\"backTo\" :actions=\"actions\">\n <!--\n The same pile the reader was looking at, one step at a time. Not an action with a word\n on it, so not something the head can fold into a menu: an arrow with nowhere to go is\n disabled rather than hidden, because a control that changes shape at the ends is one\n that moves under the hand.\n -->\n <template #extra>\n <wx-action\n icon=\"chevron-left\"\n size=\"lg\"\n :title=\"t('panel.previous')\"\n :disabled=\"!submission?.previous_id\"\n @click=\"go(submission?.previous_id ?? null)\"\n />\n <wx-action\n icon=\"chevron-right\"\n size=\"lg\"\n :title=\"t('panel.next')\"\n :disabled=\"!submission?.next_id\"\n @click=\"go(submission?.next_id ?? null)\"\n />\n </template>\n </wx-screen-head>\n\n <wx-skeleton v-if=\"loading\" :rows=\"6\" />\n\n <div v-else-if=\"submission\" class=\"wx-submission__panes\">\n <div class=\"wx-submission__main\">\n <wx-card :title=\"t('panel.answers')\">\n <wx-empty\n v-if=\"submission.values.length === 0\"\n size=\"sm\"\n :description=\"t('panel.no-answers')\"\n />\n <!-- The labels are the snapshot written when it arrived, never the field's current\n words: a submission from a year ago has to read as it did (§2.2). -->\n <wx-descriptions v-else :columns=\"1\" layout=\"vertical\">\n <wx-descriptions-item\n v-for=\"value in submission.values\"\n :key=\"value.id\"\n :label=\"value.label ?? value.name\"\n >\n <component\n :is=\"enclosureView(value)\"\n v-if=\"enclosureView(value)\"\n :payload=\"value.payload\"\n :value=\"value.value\"\n />\n <p\n v-else\n :class=\"['wx-submission__value', { 'is-enclosure': value.type === 'enclosure' }]\"\n >\n {{ value.value || '—' }}\n </p>\n </wx-descriptions-item>\n </wx-descriptions>\n </wx-card>\n\n <wx-card v-if=\"submission.files.length > 0\" :title=\"t('panel.attachments')\">\n <div class=\"wx-submission__files\">\n <!-- Through the panel and not from the disk: the bytes are behind the same\n permission as the submission, for as long as the reader has it (§8). -->\n <wx-file-card\n v-for=\"file in submission.files\"\n :key=\"file.id\"\n :name=\"file.name\"\n :type=\"file.mime ?? undefined\"\n :download-url=\"file.url\"\n :download-label=\"t('panel.download')\"\n size=\"sm\"\n >\n <template #meta>{{ kilobytes(file.size) }}</template>\n </wx-file-card>\n </div>\n </wx-card>\n\n <!--\n Everything about the submission rather than in it, behind one strip.\n\n Three cards stacked down a column is three headings to read past before the eye gets\n to the one that was wanted, and on a phone it is three screens of scrolling. They are\n not read together — a note is written while replying, the log is opened when\n something looks wrong, the metadata once — so only one of them is ever the answer.\n Pills rather than a line, and inside the card rather than over it: this is one card\n changing its contents, not a place in the panel that can be navigated to. The strip is\n the card's heading — which is why there is no other one.\n -->\n <wx-alert\n v-if=\"channelsFailed\"\n type=\"warning\"\n :closable=\"false\"\n :title=\"t('panel.channels-failed')\"\n />\n\n <wx-card class=\"wx-submission__more\">\n <wx-tabs variant=\"pill\" :aria-label=\"heading\">\n <wx-tab value=\"notes\" :label=\"panel('notes.title')\">\n <!-- The feed is the panel's own, not this module's: the same one will hang off\n an order and a client (§2.17). Its heading is the tab. -->\n <wx-notes\n :id=\"submission.id\"\n type=\"inbox_submission\"\n title=\"\"\n :can=\"canUpdate\"\n @change=\"load\"\n />\n </wx-tab>\n\n <wx-tab value=\"log\" :label=\"t('panel.log')\">\n <wx-timeline size=\"sm\">\n <wx-timeline-item v-for=\"event in submission.events\" :key=\"event.id\">\n <!-- What happened on one line and who did it when on the next: three inline\n pieces in a row run into each other, and a log is read down. -->\n <wx-text size=\"sm\" as=\"p\" class=\"wx-submission__event\">{{ line(event) }}</wx-text>\n <p class=\"wx-submission__by\">\n <wx-text size=\"sm\" tone=\"muted\">\n {{ event.author?.name ?? t('panel.system') }}\n </wx-text>\n <wx-date :value=\"event.created_at\" />\n </p>\n </wx-timeline-item>\n </wx-timeline>\n </wx-tab>\n\n <wx-tab value=\"details\" :label=\"t('panel.details')\">\n <div class=\"wx-submission__fields\">\n <wx-descriptions :columns=\"1\" layout=\"vertical\" size=\"sm\">\n <wx-descriptions-item :label=\"t('panel.received')\">\n <wx-date :value=\"submission.created_at\" tone=\"default\" />\n </wx-descriptions-item>\n <wx-descriptions-item :label=\"t('panel.meta-source')\">\n <wx-badge :type=\"submission.source === 'panel' ? 'info' : 'default'\">\n {{\n submission.source === 'panel'\n ? t('panel.source-panel')\n : t('panel.source-web')\n }}\n </wx-badge>\n </wx-descriptions-item>\n <wx-descriptions-item v-for=\"row in details\" :key=\"row.label\" :label=\"row.label\">\n <a v-if=\"row.link\" :href=\"row.value\" target=\"_blank\" rel=\"noreferrer\">{{\n row.value\n }}</a>\n <span v-else class=\"wx-submission__detail\">{{ row.value }}</span>\n </wx-descriptions-item>\n\n <!-- One more pair rather than a block of its own: whether anybody was told is a\n fact about the submission like the rest, and it keeps their rhythm.\n An unsent notification is a mark on the submission, not a lost one\n (§2.10). Queued is not sent: on a site with a queue a worker sends it,\n and a worker can be missing or hold old mail settings (§9). -->\n <wx-descriptions-item :label=\"t('panel.tab-notifications')\">\n <div class=\"wx-submission__notification\">\n <wx-alert\n v-if=\"notification?.state === 'failed'\"\n type=\"warning\"\n :closable=\"false\"\n :title=\"t('panel.notify-failed')\"\n >\n <span class=\"wx-submission__detail\">{{ notification.error }}</span>\n </wx-alert>\n <span v-else-if=\"notification?.state === 'queued'\">\n {{ t('panel.notify-queued') }}\n <!-- When it leaves: a queue the scheduler runs sends it a minute later. -->\n <wx-text\n v-if=\"notification.hint && !notification.stalled\"\n size=\"sm\"\n tone=\"muted\"\n as=\"span\"\n class=\"wx-submission__hint\"\n >\n {{ notification.hint }}\n </wx-text>\n </span>\n <span v-else-if=\"notification?.state === 'delivered'\">\n {{ t('panel.notified') }}\n </span>\n <!-- Nobody named is not a letter waiting in the queue, and says so. -->\n <span v-else-if=\"namesNobody\">{{ t('panel.notified-nobody') }}</span>\n <span v-else>{{ t('panel.not-notified') }}</span>\n\n <!-- Waiting longer than a working queue takes, or taken by a trap: the two\n ways a letter looks fine here and never arrives. -->\n <wx-alert\n v-for=\"warning in notification?.warnings ?? []\"\n :key=\"warning\"\n type=\"warning\"\n variant=\"soft\"\n :closable=\"false\"\n :description=\"warning\"\n />\n\n <ul\n v-if=\"notification && notification.recipients.length > 0\"\n class=\"wx-submission__recipients\"\n >\n <li v-for=\"one in notification.recipients\" :key=\"one.address\">\n <span class=\"wx-submission__detail\">{{ one.address }}</span>\n <wx-badge\n :type=\"\n one.state === 'failed'\n ? 'danger'\n : one.trap\n ? 'warning'\n : one.state === 'delivered'\n ? 'success'\n : 'default'\n \"\n >\n {{ recipientState(one.trap ? 'trapped' : one.state) }}\n </wx-badge>\n </li>\n </ul>\n\n <div\n v-if=\"\n canUpdate &&\n (notification?.state === 'failed' || notification?.state === 'queued')\n \"\n >\n <wx-button size=\"sm\" @click=\"notifyAgain\">{{\n t('panel.notify-again')\n }}</wx-button>\n </div>\n </div>\n </wx-descriptions-item>\n </wx-descriptions>\n </div>\n </wx-tab>\n <wx-tab v-if=\"channels\" value=\"channels\" :label=\"t('panel.channels')\">\n <div class=\"wx-submission__fields\">\n <wx-text v-if=\"channels.length === 0\" size=\"sm\" tone=\"muted\">\n {{ t('panel.channels-none') }}\n </wx-text>\n <ul v-else class=\"wx-submission__recipients\">\n <li v-for=\"row in channels\" :key=\"row.id\" class=\"wx-submission__channel\">\n <div class=\"wx-submission__channel-text\">\n <wx-text size=\"sm\">{{ row.channel }}</wx-text>\n <wx-text v-if=\"row.recipient !== ''\" size=\"sm\" tone=\"muted\">\n {{ row.recipient_label ?? row.recipient }}\n </wx-text>\n <wx-text\n v-if=\"row.error ?? row.reason_label\"\n size=\"sm\"\n tone=\"muted\"\n class=\"wx-submission__detail\"\n >\n {{ row.error ?? row.reason_label }}\n </wx-text>\n </div>\n <wx-badge :type=\"channelTone(row)\">{{ row.status_label }}</wx-badge>\n </li>\n </ul>\n\n <div v-if=\"canUpdate && channelsRetryable\">\n <wx-button size=\"sm\" @click=\"notifyAgain\">{{\n t('panel.notify-again')\n }}</wx-button>\n </div>\n </div>\n </wx-tab>\n </wx-tabs>\n </wx-card>\n </div>\n\n <aside class=\"wx-submission__aside\">\n <wx-card>\n <div class=\"wx-submission__fields\">\n <label class=\"wx-submission__field\">\n <wx-text size=\"sm\" tone=\"muted\">{{ t('panel.status') }}</wx-text>\n <wx-select\n :model-value=\"submission.status?.id ?? null\"\n :options=\"statusOptions\"\n :disabled=\"!canUpdate\"\n @update:model-value=\"onStatus\"\n />\n </label>\n\n <label class=\"wx-submission__field\">\n <wx-text size=\"sm\" tone=\"muted\">{{ t('panel.assignee') }}</wx-text>\n <wx-select\n :model-value=\"submission.assignee?.id ?? null\"\n :options=\"assigneeOptions\"\n :disabled=\"!canUpdate\"\n clearable\n :placeholder=\"t('panel.unassigned')\"\n @update:model-value=\"onAssignee\"\n />\n </label>\n </div>\n </wx-card>\n </aside>\n </div>\n </div>\n</template>\n\n<style scoped>\n.wx-submission {\n display: flex;\n flex-direction: column;\n /* The panel says how far apart things stand, and it says something different on a phone\n than on a desktop (8, 12, 16). Writing the desktop number here is what made this screen\n the one place in the panel with desktop air on a 375px screen. */\n gap: var(--wx-gap, var(--wx-space-16));\n min-width: 0;\n /* The panes below decide their own layout from the width of the screen rather than of the\n window: the panel has a sidebar, and the window knows nothing about it. */\n container-type: inline-size;\n}\n\n.wx-submission__panes {\n display: flex;\n flex-direction: column;\n gap: var(--wx-gap, var(--wx-space-16));\n min-width: 0;\n}\n\n.wx-submission__main,\n.wx-submission__aside {\n display: flex;\n flex-direction: column;\n gap: var(--wx-gap, var(--wx-space-16));\n min-width: 0;\n}\n\n/* The answers are what the screen is for, so they take the room; everything about the\n submission rather than in it stands beside them. */\n@container (min-width: 900px) {\n .wx-submission__panes {\n flex-direction: row;\n align-items: flex-start;\n }\n\n .wx-submission__main {\n flex: 1 1 auto;\n }\n\n .wx-submission__aside {\n flex: 0 0 320px;\n max-width: 320px;\n }\n}\n\n.wx-submission__value {\n margin: 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n}\n\n/* An enclosure nobody draws reads as the letter does: its lines, kept in columns. */\n.wx-submission__value.is-enclosure {\n font-family: var(--wx-font-family-mono);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-submission__detail {\n overflow-wrap: anywhere;\n}\n\n.wx-submission__notification {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-8);\n}\n\n/* Under \"waiting\", on a line of its own: when the letter leaves is the answer to the next question. */\n.wx-submission__hint {\n display: block;\n}\n\n.wx-submission__recipients {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wx-submission__recipients li {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-8);\n overflow-wrap: anywhere;\n}\n\n/* The channel, who it went to and why not on the left; the badge stays on the right. */\n.wx-submission__recipients li.wx-submission__channel {\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.wx-submission__channel-text {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.wx-submission__event {\n margin: 0;\n}\n\n.wx-submission__by {\n display: flex;\n align-items: baseline;\n gap: var(--wx-space-6);\n flex-wrap: wrap;\n margin: 0;\n}\n\n.wx-submission__files {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wx-space-8);\n}\n\n.wx-submission__fields {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-12);\n}\n\n.wx-submission__field {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-4);\n}\n</style>\n"],"names":["props","__props","context","useAdmin","api","createInboxApi","route","useRoute","router","useRouter","locales","useLocales","useInboxMessages","t","useTranslate","panel","message","useErrorText","submission","ref","statuses","admins","loading","canUpdate","computed","enclosureView","value","payload","kind","id","filter","backTo","statusOptions","status","name","assigneeOptions","admin","useStatusName","heading","formTitle","form","localizedValue","replyTo","mailto","subject","load","error","toast","lists","watch","save","input","onStatus","onAssignee","actions","list","unread","notifyAgain","remove","notification","recipientState","state","channels","channelsFailed","row","channelsRetryable","channelTone","confirm","go","to","statusName","key","one","namesNobody","event","line","handlerName","answerLabel","kilobytes","size","details","meta","rows","placement","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","WxScreenHead","WxAction","_cache","$event","_createBlock","WxSkeleton","_hoisted_2","_createElementVNode","_hoisted_3","WxCard","WxEmpty","WxDescriptions","_Fragment","_renderList","WxDescriptionsItem","_resolveDynamicComponent","_normalizeClass","_toDisplayString","_hoisted_4","file","WxFileCard","WxAlert","WxTabs","WxTab","WxNotes","WxTimeline","WxTimelineItem","WxText","_createTextVNode","_hoisted_5","WxDate","_hoisted_6","WxBadge","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","warning","_hoisted_15","_hoisted_16","_hoisted_17","WxButton","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","WxSelect","_hoisted_25"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { inject as Qe, defineComponent as oe, useModel as Fe, computed as A, ref as U, watch as ge, openBlock as m, createElementBlock as M, createElementVNode as G, toDisplayString as I, createCommentVNode as W, createBlock as _, unref as e, withCtx as d, createTextVNode as z, createVNode as u, mergeModels as Ie, nextTick as Je, isRef as Pe, Fragment as Z, renderList as Oe, useTemplateRef as et, createSlots as
|
|
2
|
-
import { useLocales as ie, localizedValue as pe, WxBadge as xe, WxAction as
|
|
1
|
+
import { inject as Qe, defineComponent as oe, useModel as Fe, computed as A, ref as U, watch as ge, openBlock as m, createElementBlock as M, createElementVNode as G, toDisplayString as I, createCommentVNode as W, createBlock as _, unref as e, withCtx as d, createTextVNode as z, createVNode as u, mergeModels as Ie, nextTick as Je, isRef as Pe, Fragment as Z, renderList as Oe, useTemplateRef as et, createSlots as Le, mergeProps as tt, defineAsyncComponent as _e } from "vue";
|
|
2
|
+
import { useLocales as ie, localizedValue as pe, WxBadge as xe, WxAction as De, WxAutocomplete as lt, useModal as Me, WxDialog as He, WxAlert as Ne, WxSkeleton as at, WxFormItem as L, WxTextarea as nt, WxSelect as we, WxRadioGroup as st, WxCheckboxGroup as ot, WxCheckbox as se, WxDatePicker as Ue, WxInput as K, WxSpace as Xe, WxButton as te, toast as j, useElementWidth as it, createModal as Ge, WxTabs as rt, WxTable as ut, WxEntityCard as dt, WxAvatar as qe, WxIcon as ke, WxTooltip as ct, WxText as ee, confirm as Ye, WxLocales as mt, WxRichText as ze, WxInputNumber as me, WxTagsInput as pt, WxCard as ht, WxEmpty as ft, WxSortableList as vt } from "@webx-ui/core";
|
|
3
3
|
import { useAdmin as re, i18nKey as bt, useTranslate as le, createRelationsApi as yt, useErrorText as Ve, rowMenuWidth as gt, WxScreenHead as xt, WxRowMenu as We, WxDate as Re, WxFilterChips as wt, useRichTextLabels as kt, useShortcodesWhen as _t, useRemoveConfirm as Vt, slugify as Tt } from "@webx-ui/module-admin";
|
|
4
4
|
import { useRoute as $t, useRouter as St } from "vue-router";
|
|
5
5
|
const At = {
|
|
@@ -48,6 +48,7 @@ const At = {
|
|
|
48
48
|
"redirect-help": "A page of the site opens in the language the form was sent in, or in the main one when it has no translation. Nowhere — the thank-you takes the form’s place.",
|
|
49
49
|
recipients: "Who is written to",
|
|
50
50
|
"recipients-help": "Nobody here means nobody is told. The submission is kept either way.",
|
|
51
|
+
"mail-route": "Letters leave through",
|
|
51
52
|
"no-recipients": "Nobody yet.",
|
|
52
53
|
"add-admin": "Add an administrator",
|
|
53
54
|
"add-email": "Add an address",
|
|
@@ -187,6 +188,7 @@ const At = {
|
|
|
187
188
|
"notify-recipient-queued": "waiting",
|
|
188
189
|
"notify-recipient-delivered": "sent",
|
|
189
190
|
"notify-recipient-failed": "failed",
|
|
191
|
+
"notify-recipient-trapped": "test transport",
|
|
190
192
|
"event-notify-queued": "The notification was queued",
|
|
191
193
|
"event-notify-failed": "The notification to :to failed",
|
|
192
194
|
"event-value": "Answer “:field” corrected: “:from” → “:to”"
|
|
@@ -360,7 +362,7 @@ const Nt = { class: "wx-inbox-form-field" }, Ut = {
|
|
|
360
362
|
]),
|
|
361
363
|
_: 1
|
|
362
364
|
})) : W("", !0),
|
|
363
|
-
n.disabled ? W("", !0) : (m(), _(e(
|
|
365
|
+
n.disabled ? W("", !0) : (m(), _(e(De), {
|
|
364
366
|
key: 1,
|
|
365
367
|
type: "remove",
|
|
366
368
|
size: "sm",
|
|
@@ -406,19 +408,19 @@ function rl(a = {}) {
|
|
|
406
408
|
{
|
|
407
409
|
path: n,
|
|
408
410
|
name: "webx.inbox",
|
|
409
|
-
component: () => import("./InboxPage-
|
|
411
|
+
component: () => import("./InboxPage-iMQ0pjrR.js"),
|
|
410
412
|
props: { base: n }
|
|
411
413
|
},
|
|
412
414
|
{
|
|
413
415
|
path: `${n}/statuses`,
|
|
414
416
|
name: "webx.inbox.statuses",
|
|
415
|
-
component: () => import("./StatusesPage-
|
|
417
|
+
component: () => import("./StatusesPage-arNMRLzM.js"),
|
|
416
418
|
props: { base: n }
|
|
417
419
|
},
|
|
418
420
|
{
|
|
419
421
|
path: `${n}/forms/:id(\\d+)`,
|
|
420
422
|
name: "webx.inbox.form",
|
|
421
|
-
component: () => import("./FormEditorPage-
|
|
423
|
+
component: () => import("./FormEditorPage-B2Q0gTp3.js"),
|
|
422
424
|
props: { base: n }
|
|
423
425
|
},
|
|
424
426
|
// A submission has an address of its own, not a dialog over the list (§11): it goes in
|
|
@@ -426,7 +428,7 @@ function rl(a = {}) {
|
|
|
426
428
|
{
|
|
427
429
|
path: `${n}/submissions/:id(\\d+)`,
|
|
428
430
|
name: "webx.inbox.submission",
|
|
429
|
-
component: () => import("./SubmissionPage-
|
|
431
|
+
component: () => import("./SubmissionPage-BDI8xL0N.js"),
|
|
430
432
|
props: { base: n }
|
|
431
433
|
}
|
|
432
434
|
],
|
|
@@ -610,7 +612,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
610
612
|
key: 0,
|
|
611
613
|
rows: 4
|
|
612
614
|
})) : (m(), M(Z, { key: 1 }, [
|
|
613
|
-
(m(!0), M(Z, null, Oe(H.value, (i) => (m(), _(e(
|
|
615
|
+
(m(!0), M(Z, null, Oe(H.value, (i) => (m(), _(e(L), {
|
|
614
616
|
key: i.id,
|
|
615
617
|
label: $(i),
|
|
616
618
|
help: E(i.help),
|
|
@@ -678,7 +680,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
678
680
|
_: 1
|
|
679
681
|
}, 8, ["open", "title"]));
|
|
680
682
|
}
|
|
681
|
-
}), Ot = /* @__PURE__ */ fe(Pt, [["__scopeId", "data-v-72006299"]]),
|
|
683
|
+
}), Ot = /* @__PURE__ */ fe(Pt, [["__scopeId", "data-v-72006299"]]), Lt = { class: "wx-submissions__mass" }, Dt = { class: "wx-submissions__state" }, Mt = 640, Ht = /* @__PURE__ */ oe({
|
|
682
684
|
__name: "SubmissionList",
|
|
683
685
|
props: {
|
|
684
686
|
form: {},
|
|
@@ -746,7 +748,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
746
748
|
const h = y.value?.columns?.[F];
|
|
747
749
|
return h ? o.values[h.key] ?? "" : "";
|
|
748
750
|
}
|
|
749
|
-
const
|
|
751
|
+
const D = A(() => {
|
|
750
752
|
const o = y.value?.columns ?? [];
|
|
751
753
|
return q.value ? [{ key: "card", label: "" }] : [
|
|
752
754
|
...o.map((F, h) => ({
|
|
@@ -909,7 +911,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
909
911
|
default: d(() => [
|
|
910
912
|
u(e(ut), {
|
|
911
913
|
data: y.value,
|
|
912
|
-
columns:
|
|
914
|
+
columns: D.value,
|
|
913
915
|
"row-key": "id",
|
|
914
916
|
searchable: "",
|
|
915
917
|
clickable: "",
|
|
@@ -928,9 +930,9 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
928
930
|
onRowClick: s,
|
|
929
931
|
onStateChange: f,
|
|
930
932
|
onSelectionChange: F[1] || (F[1] = (h, ce) => P.value = ce)
|
|
931
|
-
},
|
|
933
|
+
}, Le({
|
|
932
934
|
"cell-status": d(({ row: h }) => [
|
|
933
|
-
G("div",
|
|
935
|
+
G("div", Dt, [
|
|
934
936
|
h.status ? (m(), _(e(xe), {
|
|
935
937
|
key: 0,
|
|
936
938
|
type: h.status.color
|
|
@@ -1023,7 +1025,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1023
1025
|
P.value.length > 0 ? {
|
|
1024
1026
|
name: "actions",
|
|
1025
1027
|
fn: d(() => [
|
|
1026
|
-
G("div",
|
|
1028
|
+
G("div", Lt, [
|
|
1027
1029
|
u(e(ee), {
|
|
1028
1030
|
size: "sm",
|
|
1029
1031
|
weight: "medium"
|
|
@@ -1060,7 +1062,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1060
1062
|
ve.value ? {
|
|
1061
1063
|
name: "filters",
|
|
1062
1064
|
fn: d(() => [
|
|
1063
|
-
u(e(
|
|
1065
|
+
u(e(L), {
|
|
1064
1066
|
label: e(p)("panel.meta-placement")
|
|
1065
1067
|
}, {
|
|
1066
1068
|
default: d(() => [
|
|
@@ -1212,25 +1214,25 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1212
1214
|
() => Array.isArray(y.value.choices) ? y.value.choices : []
|
|
1213
1215
|
), de = A({
|
|
1214
1216
|
get: () => Array.isArray(y.value.extensions) ? y.value.extensions : [],
|
|
1215
|
-
set: (f) =>
|
|
1217
|
+
set: (f) => D(
|
|
1216
1218
|
"extensions",
|
|
1217
1219
|
f.map((r) => r.replace(/^\./, ""))
|
|
1218
1220
|
)
|
|
1219
1221
|
});
|
|
1220
|
-
function
|
|
1222
|
+
function D(f, r) {
|
|
1221
1223
|
y.value = { ...y.value, [f]: r };
|
|
1222
1224
|
}
|
|
1223
1225
|
function $e() {
|
|
1224
|
-
|
|
1226
|
+
D("choices", [...Q.value, { value: "", label: {} }]);
|
|
1225
1227
|
}
|
|
1226
1228
|
function Se(f) {
|
|
1227
|
-
|
|
1229
|
+
D(
|
|
1228
1230
|
"choices",
|
|
1229
1231
|
Q.value.filter((r, s) => s !== f)
|
|
1230
1232
|
);
|
|
1231
1233
|
}
|
|
1232
1234
|
function J(f, r) {
|
|
1233
|
-
|
|
1235
|
+
D(
|
|
1234
1236
|
"choices",
|
|
1235
1237
|
Q.value.map((s, O) => O === f ? { ...s, ...r } : s)
|
|
1236
1238
|
);
|
|
@@ -1297,7 +1299,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1297
1299
|
]),
|
|
1298
1300
|
default: d(() => [
|
|
1299
1301
|
G("div", Yt, [
|
|
1300
|
-
u(e(
|
|
1302
|
+
u(e(L), {
|
|
1301
1303
|
label: e(l)("fields.type")
|
|
1302
1304
|
}, {
|
|
1303
1305
|
default: d(() => [
|
|
@@ -1309,7 +1311,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1309
1311
|
]),
|
|
1310
1312
|
_: 1
|
|
1311
1313
|
}, 8, ["label"]),
|
|
1312
|
-
u(e(
|
|
1314
|
+
u(e(L), {
|
|
1313
1315
|
label: e(l)("fields.title"),
|
|
1314
1316
|
error: ae("title"),
|
|
1315
1317
|
required: ""
|
|
@@ -1324,7 +1326,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1324
1326
|
_: 1
|
|
1325
1327
|
}, 8, ["label", "error"]),
|
|
1326
1328
|
x.value !== "hidden" ? (m(), M(Z, { key: 0 }, [
|
|
1327
|
-
x.value !== "consent" ? (m(), _(e(
|
|
1329
|
+
x.value !== "consent" ? (m(), _(e(L), {
|
|
1328
1330
|
key: 0,
|
|
1329
1331
|
label: e(l)("fields.placeholder")
|
|
1330
1332
|
}, {
|
|
@@ -1337,7 +1339,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1337
1339
|
]),
|
|
1338
1340
|
_: 1
|
|
1339
1341
|
}, 8, ["label"])) : W("", !0),
|
|
1340
|
-
u(e(
|
|
1342
|
+
u(e(L), {
|
|
1341
1343
|
label: e(l)("fields.help")
|
|
1342
1344
|
}, {
|
|
1343
1345
|
default: d(() => [
|
|
@@ -1350,7 +1352,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1350
1352
|
_: 1
|
|
1351
1353
|
}, 8, ["label"])
|
|
1352
1354
|
], 64)) : W("", !0),
|
|
1353
|
-
x.value === "consent" ? (m(), _(e(
|
|
1355
|
+
x.value === "consent" ? (m(), _(e(L), {
|
|
1354
1356
|
key: 1,
|
|
1355
1357
|
label: e(l)("fields.consent-text"),
|
|
1356
1358
|
help: e(l)("fields.consent-text-help")
|
|
@@ -1359,7 +1361,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1359
1361
|
u(Xt, {
|
|
1360
1362
|
"model-value": y.value.text ?? {},
|
|
1361
1363
|
"min-height": "100px",
|
|
1362
|
-
"onUpdate:modelValue": r[4] || (r[4] = (s) =>
|
|
1364
|
+
"onUpdate:modelValue": r[4] || (r[4] = (s) => D("text", s))
|
|
1363
1365
|
}, null, 8, ["model-value"])
|
|
1364
1366
|
]),
|
|
1365
1367
|
_: 1
|
|
@@ -1399,7 +1401,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1399
1401
|
placeholder: e(l)("fields.choice-label"),
|
|
1400
1402
|
"onUpdate:modelValue": (Y) => J(O, { label: Y })
|
|
1401
1403
|
}, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"]),
|
|
1402
|
-
u(e(
|
|
1404
|
+
u(e(De), tt({
|
|
1403
1405
|
icon: "trash",
|
|
1404
1406
|
tone: "danger",
|
|
1405
1407
|
title: e(l)("fields.delete")
|
|
@@ -1432,7 +1434,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1432
1434
|
})) : W("", !0)
|
|
1433
1435
|
])) : W("", !0),
|
|
1434
1436
|
G("div", Kt, [
|
|
1435
|
-
x.value === "textarea" ? (m(), _(e(
|
|
1437
|
+
x.value === "textarea" ? (m(), _(e(L), {
|
|
1436
1438
|
key: 0,
|
|
1437
1439
|
label: e(l)("fields.rows")
|
|
1438
1440
|
}, {
|
|
@@ -1441,12 +1443,12 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1441
1443
|
"model-value": y.value.rows ?? 5,
|
|
1442
1444
|
min: 2,
|
|
1443
1445
|
max: 30,
|
|
1444
|
-
"onUpdate:modelValue": r[5] || (r[5] = (s) =>
|
|
1446
|
+
"onUpdate:modelValue": r[5] || (r[5] = (s) => D("rows", s))
|
|
1445
1447
|
}, null, 8, ["model-value"])
|
|
1446
1448
|
]),
|
|
1447
1449
|
_: 1
|
|
1448
1450
|
}, 8, ["label"])) : W("", !0),
|
|
1449
|
-
["text", "email", "textarea"].includes(x.value) ? (m(), _(e(
|
|
1451
|
+
["text", "email", "textarea"].includes(x.value) ? (m(), _(e(L), {
|
|
1450
1452
|
key: 1,
|
|
1451
1453
|
label: e(l)("fields.maxlength")
|
|
1452
1454
|
}, {
|
|
@@ -1455,12 +1457,12 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1455
1457
|
"model-value": y.value.maxlength ?? null,
|
|
1456
1458
|
min: 1,
|
|
1457
1459
|
max: 2e4,
|
|
1458
|
-
"onUpdate:modelValue": r[6] || (r[6] = (s) =>
|
|
1460
|
+
"onUpdate:modelValue": r[6] || (r[6] = (s) => D("maxlength", s))
|
|
1459
1461
|
}, null, 8, ["model-value"])
|
|
1460
1462
|
]),
|
|
1461
1463
|
_: 1
|
|
1462
1464
|
}, 8, ["label"])) : W("", !0),
|
|
1463
|
-
x.value === "tel" ? (m(), _(e(
|
|
1465
|
+
x.value === "tel" ? (m(), _(e(L), {
|
|
1464
1466
|
key: 2,
|
|
1465
1467
|
label: e(l)("fields.pattern"),
|
|
1466
1468
|
help: e(l)("fields.pattern-help")
|
|
@@ -1468,64 +1470,64 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1468
1470
|
default: d(() => [
|
|
1469
1471
|
u(e(K), {
|
|
1470
1472
|
"model-value": y.value.pattern ?? "",
|
|
1471
|
-
"onUpdate:modelValue": r[7] || (r[7] = (s) =>
|
|
1473
|
+
"onUpdate:modelValue": r[7] || (r[7] = (s) => D("pattern", s))
|
|
1472
1474
|
}, null, 8, ["model-value"])
|
|
1473
1475
|
]),
|
|
1474
1476
|
_: 1
|
|
1475
1477
|
}, 8, ["label", "help"])) : W("", !0),
|
|
1476
1478
|
x.value === "date" ? (m(), M(Z, { key: 3 }, [
|
|
1477
|
-
u(e(
|
|
1479
|
+
u(e(L), {
|
|
1478
1480
|
label: e(l)("fields.earliest")
|
|
1479
1481
|
}, {
|
|
1480
1482
|
default: d(() => [
|
|
1481
1483
|
u(e(Ue), {
|
|
1482
1484
|
clearable: "",
|
|
1483
1485
|
"model-value": y.value.min ?? null,
|
|
1484
|
-
"onUpdate:modelValue": r[8] || (r[8] = (s) =>
|
|
1486
|
+
"onUpdate:modelValue": r[8] || (r[8] = (s) => D("min", s))
|
|
1485
1487
|
}, null, 8, ["model-value"])
|
|
1486
1488
|
]),
|
|
1487
1489
|
_: 1
|
|
1488
1490
|
}, 8, ["label"]),
|
|
1489
|
-
u(e(
|
|
1491
|
+
u(e(L), {
|
|
1490
1492
|
label: e(l)("fields.latest")
|
|
1491
1493
|
}, {
|
|
1492
1494
|
default: d(() => [
|
|
1493
1495
|
u(e(Ue), {
|
|
1494
1496
|
clearable: "",
|
|
1495
1497
|
"model-value": y.value.max ?? null,
|
|
1496
|
-
"onUpdate:modelValue": r[9] || (r[9] = (s) =>
|
|
1498
|
+
"onUpdate:modelValue": r[9] || (r[9] = (s) => D("max", s))
|
|
1497
1499
|
}, null, 8, ["model-value"])
|
|
1498
1500
|
]),
|
|
1499
1501
|
_: 1
|
|
1500
1502
|
}, 8, ["label"])
|
|
1501
1503
|
], 64)) : W("", !0),
|
|
1502
1504
|
x.value === "checkbox" ? (m(), M(Z, { key: 4 }, [
|
|
1503
|
-
u(e(
|
|
1505
|
+
u(e(L), {
|
|
1504
1506
|
label: e(l)("fields.min-choices")
|
|
1505
1507
|
}, {
|
|
1506
1508
|
default: d(() => [
|
|
1507
1509
|
u(e(me), {
|
|
1508
1510
|
"model-value": y.value.min ?? null,
|
|
1509
1511
|
min: 0,
|
|
1510
|
-
"onUpdate:modelValue": r[10] || (r[10] = (s) =>
|
|
1512
|
+
"onUpdate:modelValue": r[10] || (r[10] = (s) => D("min", s))
|
|
1511
1513
|
}, null, 8, ["model-value"])
|
|
1512
1514
|
]),
|
|
1513
1515
|
_: 1
|
|
1514
1516
|
}, 8, ["label"]),
|
|
1515
|
-
u(e(
|
|
1517
|
+
u(e(L), {
|
|
1516
1518
|
label: e(l)("fields.max-choices")
|
|
1517
1519
|
}, {
|
|
1518
1520
|
default: d(() => [
|
|
1519
1521
|
u(e(me), {
|
|
1520
1522
|
"model-value": y.value.max ?? null,
|
|
1521
1523
|
min: 0,
|
|
1522
|
-
"onUpdate:modelValue": r[11] || (r[11] = (s) =>
|
|
1524
|
+
"onUpdate:modelValue": r[11] || (r[11] = (s) => D("max", s))
|
|
1523
1525
|
}, null, 8, ["model-value"])
|
|
1524
1526
|
]),
|
|
1525
1527
|
_: 1
|
|
1526
1528
|
}, 8, ["label"])
|
|
1527
1529
|
], 64)) : W("", !0),
|
|
1528
|
-
x.value === "file" ? (m(), _(e(
|
|
1530
|
+
x.value === "file" ? (m(), _(e(L), {
|
|
1529
1531
|
key: 5,
|
|
1530
1532
|
label: e(l)("fields.max-size")
|
|
1531
1533
|
}, {
|
|
@@ -1533,14 +1535,14 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1533
1535
|
u(e(me), {
|
|
1534
1536
|
"model-value": y.value.max_size ?? null,
|
|
1535
1537
|
min: 1,
|
|
1536
|
-
"onUpdate:modelValue": r[12] || (r[12] = (s) =>
|
|
1538
|
+
"onUpdate:modelValue": r[12] || (r[12] = (s) => D("max_size", s))
|
|
1537
1539
|
}, null, 8, ["model-value"])
|
|
1538
1540
|
]),
|
|
1539
1541
|
_: 1
|
|
1540
1542
|
}, 8, ["label"])) : W("", !0)
|
|
1541
1543
|
]),
|
|
1542
1544
|
x.value === "file" ? (m(), M(Z, { key: 3 }, [
|
|
1543
|
-
u(e(
|
|
1545
|
+
u(e(L), {
|
|
1544
1546
|
label: e(l)("fields.extensions"),
|
|
1545
1547
|
help: e(l)("fields.extensions-help")
|
|
1546
1548
|
}, {
|
|
@@ -1555,7 +1557,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1555
1557
|
u(e(se), {
|
|
1556
1558
|
"model-value": !!y.value.multiple,
|
|
1557
1559
|
label: e(l)("fields.multiple"),
|
|
1558
|
-
"onUpdate:modelValue": r[14] || (r[14] = (s) =>
|
|
1560
|
+
"onUpdate:modelValue": r[14] || (r[14] = (s) => D("multiple", s))
|
|
1559
1561
|
}, null, 8, ["model-value", "label"])
|
|
1560
1562
|
], 64)) : W("", !0),
|
|
1561
1563
|
G("div", Zt, [
|
|
@@ -1592,7 +1594,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1592
1594
|
]),
|
|
1593
1595
|
_: 1
|
|
1594
1596
|
}),
|
|
1595
|
-
u(e(
|
|
1597
|
+
u(e(L), {
|
|
1596
1598
|
label: e(l)("fields.name"),
|
|
1597
1599
|
help: e(l)("fields.name-help", { name: q.value.trim() || "name" }),
|
|
1598
1600
|
error: ae("name")
|
|
@@ -1690,7 +1692,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1690
1692
|
}
|
|
1691
1693
|
return (k, y) => (m(), _(e(ht), {
|
|
1692
1694
|
title: e(t)("panel.tab-fields")
|
|
1693
|
-
},
|
|
1695
|
+
}, Le({
|
|
1694
1696
|
default: d(() => [
|
|
1695
1697
|
C.value ? (m(), _(e(ft), {
|
|
1696
1698
|
key: 0,
|
|
@@ -1778,7 +1780,7 @@ const Bt = { class: "wx-inbox-by-hand" }, Pt = /* @__PURE__ */ oe({
|
|
|
1778
1780
|
} : void 0
|
|
1779
1781
|
]), 1032, ["title"]));
|
|
1780
1782
|
}
|
|
1781
|
-
}), ml = /* @__PURE__ */ fe(al, [["__scopeId", "data-v-5d9f662e"]]), pl = _e(() => import("./InboxPage-
|
|
1783
|
+
}), ml = /* @__PURE__ */ fe(al, [["__scopeId", "data-v-5d9f662e"]]), pl = _e(() => import("./InboxPage-iMQ0pjrR.js")), hl = _e(() => import("./FormEditorPage-B2Q0gTp3.js")), fl = _e(() => import("./StatusesPage-arNMRLzM.js")), vl = _e(() => import("./SubmissionPage-BDI8xL0N.js"));
|
|
1782
1784
|
export {
|
|
1783
1785
|
ml as F,
|
|
1784
1786
|
dl as S,
|
|
@@ -1798,4 +1800,4 @@ export {
|
|
|
1798
1800
|
ul as o,
|
|
1799
1801
|
he as u
|
|
1800
1802
|
};
|
|
1801
|
-
//# sourceMappingURL=index-
|
|
1803
|
+
//# sourceMappingURL=index-gLN73Ici.js.map
|