@webx-ui/module-catalog 0.8.9 → 0.9.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.
@@ -0,0 +1,214 @@
1
+ import { defineComponent as U, ref as q, computed as y, openBlock as s, createElementBlock as g, createVNode as W, unref as a, withCtx as n, createBlock as u, createCommentVNode as v, createTextVNode as i, toDisplayString as r, Fragment as j, createElementVNode as S } from "vue";
2
+ import { useRoute as I, useRouter as L } from "vue-router";
3
+ import { useAdmin as O, useTranslate as $, useErrorText as G, rowMenuWidth as D, WxListScreen as H, WxRowMenu as J, WxDate as K } from "@webx-ui/module-admin";
4
+ import { WxTable as Q, WxText as f, WxBadge as X, toast as _ } from "@webx-ui/core";
5
+ import { c as Y, u as Z, a as ee, _ as te } from "./index-BTEbHnJ5.js";
6
+ const ae = { class: "wx-catalog-deleted" }, le = { class: "wx-catalog-deleted__name" }, oe = { class: "wx-catalog-deleted__title" }, se = {
7
+ key: 0,
8
+ class: "wx-catalog-deleted__code"
9
+ }, ne = {
10
+ key: 1,
11
+ class: "wx-catalog-deleted__code"
12
+ }, re = {
13
+ key: 1,
14
+ class: "wx-catalog-deleted__ref"
15
+ }, ce = /* @__PURE__ */ U({
16
+ __name: "DeletedPage",
17
+ props: {
18
+ base: { default: "/catalog" }
19
+ },
20
+ setup(N) {
21
+ const P = N, h = O(), b = Y(h), R = Z(h), m = I(), C = L();
22
+ ee();
23
+ const t = $("webx-catalog"), B = G(), k = q(null), x = q(!0), p = q(typeof m.query.q == "string" ? m.query.q : ""), T = y(() => h.can("catalog.delete")), d = y({
24
+ get: () => m.query.type === "categories" ? "categories" : "products",
25
+ set: (l) => {
26
+ p.value = "", k.value = null, C.replace({
27
+ query: { type: l === "categories" ? "categories" : void 0 }
28
+ });
29
+ }
30
+ }), V = y(() => [
31
+ { value: "products", label: t("module.products") },
32
+ { value: "categories", label: t("module.categories") }
33
+ ]), E = y(
34
+ () => d.value === "categories" ? [
35
+ { key: "name", label: t("category.name"), minWidth: 200 },
36
+ { key: "parent", label: t("panel.column-parent"), width: 200, hideBelow: 640 },
37
+ { key: "deleted_at", label: t("panel.column-deleted"), width: 150 },
38
+ { key: "actions", label: "", width: D, align: "right" }
39
+ ] : [
40
+ { key: "name", label: t("panel.column-product"), minWidth: 200 },
41
+ { key: "category", label: t("product.category"), width: 220, hideBelow: 640 },
42
+ { key: "deleted_at", label: t("panel.column-deleted"), width: 150 },
43
+ { key: "actions", label: "", width: D, align: "right" }
44
+ ]
45
+ );
46
+ let w = 0;
47
+ async function z(l) {
48
+ const o = ++w;
49
+ x.value = !0;
50
+ try {
51
+ const e = await b.deleted(d.value, {
52
+ q: l?.search ?? p.value,
53
+ page: l?.page,
54
+ per_page: l?.perPage
55
+ });
56
+ o === w && (k.value = e);
57
+ } catch (e) {
58
+ _.danger(B(e));
59
+ } finally {
60
+ o === w && (x.value = !1);
61
+ }
62
+ }
63
+ function M(l) {
64
+ C.replace({
65
+ query: { ...m.query, q: l.search === "" ? void 0 : l.search }
66
+ }), z(l);
67
+ }
68
+ async function A(l) {
69
+ try {
70
+ if (d.value === "categories")
71
+ await b.restoreCategory(l.id), R.drop(), _.success(t("panel.category-restored"));
72
+ else {
73
+ const e = (await b.restoreProduct(l.id)).category === null && l.category !== null;
74
+ _.success(t(e ? "panel.product-restored-bare" : "panel.product-restored"));
75
+ }
76
+ await z();
77
+ } catch (o) {
78
+ _.danger(B(o));
79
+ }
80
+ }
81
+ function c(l, o) {
82
+ const e = l[o];
83
+ return e && typeof e == "object" ? e : null;
84
+ }
85
+ function F(l) {
86
+ const o = [];
87
+ return T.value && o.push({
88
+ key: "restore",
89
+ icon: "refresh",
90
+ label: t("panel.restore"),
91
+ run: () => {
92
+ A(l);
93
+ }
94
+ }), o;
95
+ }
96
+ return (l, o) => (s(), g("div", ae, [
97
+ W(a(H), {
98
+ view: d.value,
99
+ "onUpdate:view": o[1] || (o[1] = (e) => d.value = e),
100
+ title: a(t)("module.deleted"),
101
+ subtitle: a(t)("panel.deleted-help"),
102
+ back: `${P.base}/products`,
103
+ "back-label": a(t)("module.products"),
104
+ views: V.value
105
+ }, {
106
+ default: n(() => [
107
+ (s(), u(a(Q), {
108
+ key: String(d.value),
109
+ search: p.value,
110
+ "onUpdate:search": o[0] || (o[0] = (e) => p.value = e),
111
+ data: k.value,
112
+ columns: E.value,
113
+ "row-key": "id",
114
+ searchable: "",
115
+ clickable: !1,
116
+ hover: !1,
117
+ flush: "",
118
+ layout: "fixed",
119
+ loading: x.value,
120
+ "search-placeholder": a(t)("panel.deleted-search"),
121
+ "empty-text": p.value ? a(t)("panel.empty-search") : a(t)("panel.deleted-empty"),
122
+ "aria-label": a(t)("module.deleted"),
123
+ onStateChange: M
124
+ }, {
125
+ "cell-name": n(({ row: e }) => [
126
+ S("div", le, [
127
+ S("span", oe, r(e.name), 1),
128
+ "sku" in e && e.sku ? (s(), g("span", se, r(e.sku), 1)) : "slug" in e && e.slug ? (s(), g("span", ne, " /" + r(e.slug) + "/ ", 1)) : v("", !0)
129
+ ])
130
+ ]),
131
+ "cell-category": n(({ row: e }) => [
132
+ c(e, "category") ? (s(), g("span", re, [
133
+ W(a(f), {
134
+ size: "sm",
135
+ truncate: "",
136
+ tone: c(e, "category")?.deleted ? "muted" : void 0
137
+ }, {
138
+ default: n(() => [
139
+ i(r(c(e, "category")?.name), 1)
140
+ ]),
141
+ _: 2
142
+ }, 1032, ["tone"]),
143
+ c(e, "category")?.deleted ? (s(), u(a(X), {
144
+ key: 0,
145
+ type: "warning",
146
+ size: "sm",
147
+ round: ""
148
+ }, {
149
+ default: n(() => [
150
+ i(r(a(t)("panel.restore-bare")), 1)
151
+ ]),
152
+ _: 1
153
+ })) : v("", !0)
154
+ ])) : (s(), u(a(f), {
155
+ key: 0,
156
+ size: "sm",
157
+ tone: "muted"
158
+ }, {
159
+ default: n(() => [
160
+ i(r(a(t)("product.no-category")), 1)
161
+ ]),
162
+ _: 1
163
+ }))
164
+ ]),
165
+ "cell-parent": n(({ row: e }) => [
166
+ c(e, "parent") ? (s(), u(a(f), {
167
+ key: 1,
168
+ size: "sm",
169
+ truncate: "",
170
+ tone: c(e, "parent")?.deleted ? "muted" : void 0
171
+ }, {
172
+ default: n(() => [
173
+ i(r(c(e, "parent")?.name) + " ", 1),
174
+ c(e, "parent")?.deleted ? (s(), g(j, { key: 0 }, [
175
+ i(" (" + r(a(t)("panel.category-gone")) + ")", 1)
176
+ ], 64)) : v("", !0)
177
+ ]),
178
+ _: 2
179
+ }, 1032, ["tone"])) : (s(), u(a(f), {
180
+ key: 0,
181
+ size: "sm",
182
+ tone: "muted"
183
+ }, {
184
+ default: n(() => [
185
+ i(r(a(t)("panel.parent-root")), 1)
186
+ ]),
187
+ _: 1
188
+ }))
189
+ ]),
190
+ "cell-deleted_at": n(({ row: e }) => [
191
+ W(a(K), {
192
+ value: e.deleted_at,
193
+ compact: ""
194
+ }, null, 8, ["value"])
195
+ ]),
196
+ "cell-actions": n(({ row: e }) => [
197
+ T.value ? (s(), u(a(J), {
198
+ key: 0,
199
+ actions: F(e),
200
+ label: e.name
201
+ }, null, 8, ["actions", "label"])) : v("", !0)
202
+ ]),
203
+ _: 1
204
+ }, 8, ["search", "data", "columns", "loading", "search-placeholder", "empty-text", "aria-label"]))
205
+ ]),
206
+ _: 1
207
+ }, 8, ["view", "title", "subtitle", "back", "back-label", "views"])
208
+ ]));
209
+ }
210
+ }), me = /* @__PURE__ */ te(ce, [["__scopeId", "data-v-1fad643b"]]);
211
+ export {
212
+ me as default
213
+ };
214
+ //# sourceMappingURL=DeletedPage-TGTyQbzn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeletedPage-TGTyQbzn.js","sources":["../src/DeletedPage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport {\n rowMenuWidth,\n useAdmin,\n useErrorText,\n useTranslate,\n WxDate,\n WxListScreen,\n WxRowMenu,\n type RowAction,\n} from '@webx-ui/module-admin'\nimport {\n toast,\n WxBadge,\n WxTable,\n WxText,\n type Paginated,\n type TabItem,\n type TableColumn,\n type TableState,\n type TabValue,\n} from '@webx-ui/core'\nimport { createCatalogApi } from './api'\nimport { useCatalogMessages } from './i18n'\nimport { useCategoryTree } from './store'\nimport type { CategoryRef, DeletedCategory, DeletedKind, DeletedProduct } from './types'\n\n/**\n * «Deleted» (§5, §6.3): what was deleted, and the one thing that can be done to it — bring it\n * back. There is no \"delete for ever\": orders will point at products, and their links have to\n * keep answering. No filters either; a search finds what somebody is looking for, and the list\n * is newest first, which is where a regret usually is.\n *\n * Products and categories are two tabs of one screen rather than two screens, because the\n * question a reader comes with is \"where did it go\", not which kind of thing it was.\n *\n * A row says what a restore will do to it before it is done: a product whose category is\n * deleted too comes back without one and unpublished, and that is worth knowing first.\n */\nconst props = withDefaults(defineProps<{ base?: string }>(), { base: '/catalog' })\n\nconst context = useAdmin()\nconst api = createCatalogApi(context)\nconst tree = useCategoryTree(context)\nconst route = useRoute()\nconst router = useRouter()\nuseCatalogMessages()\n\nconst t = useTranslate('webx-catalog')\nconst message = useErrorText()\n\ntype Row = DeletedProduct | DeletedCategory\n\nconst page = ref<Paginated<Row> | null>(null)\nconst loading = ref(true)\nconst search = ref(typeof route.query.q === 'string' ? route.query.q : '')\n\nconst canRestore = computed(() => context.can('catalog.delete'))\n\nconst kind = computed<TabValue>({\n get: () => (route.query.type === 'categories' ? 'categories' : 'products'),\n set: (value) => {\n // The table is keyed by the tab and mounts afresh, which asks for its first page itself.\n search.value = ''\n page.value = null\n void router.replace({\n query: { type: value === 'categories' ? 'categories' : undefined },\n })\n },\n})\n\nconst views = computed<TabItem[]>(() => [\n { value: 'products', label: t('module.products') },\n { value: 'categories', label: t('module.categories') },\n])\n\nconst columns = computed<TableColumn<Row>[]>(() =>\n kind.value === 'categories'\n ? [\n { key: 'name', label: t('category.name'), minWidth: 200 },\n { key: 'parent', label: t('panel.column-parent'), width: 200, hideBelow: 640 },\n { key: 'deleted_at', label: t('panel.column-deleted'), width: 150 },\n { key: 'actions', label: '', width: rowMenuWidth, align: 'right' },\n ]\n : [\n { key: 'name', label: t('panel.column-product'), minWidth: 200 },\n { key: 'category', label: t('product.category'), width: 220, hideBelow: 640 },\n { key: 'deleted_at', label: t('panel.column-deleted'), width: 150 },\n { key: 'actions', label: '', width: rowMenuWidth, align: 'right' },\n ],\n)\n\nlet asked = 0\n\nasync function load(state?: TableState): Promise<void> {\n const mine = ++asked\n\n loading.value = true\n\n try {\n const answer = await api.deleted(kind.value as DeletedKind, {\n q: state?.search ?? search.value,\n page: state?.page,\n per_page: state?.perPage,\n })\n\n if (mine === asked) page.value = answer\n } catch (error) {\n toast.danger(message(error))\n } finally {\n if (mine === asked) loading.value = false\n }\n}\n\nfunction onState(state: TableState): void {\n void router.replace({\n query: { ...route.query, q: state.search === '' ? undefined : state.search },\n })\n void load(state)\n}\n\nasync function restore(row: Row): Promise<void> {\n try {\n if (kind.value === 'categories') {\n await api.restoreCategory(row.id)\n tree.drop()\n toast.success(t('panel.category-restored'))\n } else {\n const product = await api.restoreProduct(row.id)\n const bare = product.category === null && (row as DeletedProduct).category !== null\n\n toast.success(bare ? t('panel.product-restored-bare') : t('panel.product-restored'))\n }\n\n await load()\n } catch (error) {\n // A category whose address was taken while it was away is refused, and the server says by whom.\n toast.danger(message(error))\n }\n}\n\n/** A product's category or a category's parent, as the row names it. */\nfunction refOf(row: Record<string, unknown>, key: 'category' | 'parent'): CategoryRef | null {\n const found = row[key]\n\n return found && typeof found === 'object' ? (found as CategoryRef) : null\n}\n\nfunction actionsFor(row: Row): RowAction[] {\n const actions: RowAction[] = []\n\n if (canRestore.value) {\n actions.push({\n key: 'restore',\n icon: 'refresh',\n label: t('panel.restore'),\n run: () => void restore(row),\n })\n }\n\n return actions\n}\n</script>\n\n<template>\n <div class=\"wx-catalog-deleted\">\n <wx-list-screen\n v-model:view=\"kind\"\n :title=\"t('module.deleted')\"\n :subtitle=\"t('panel.deleted-help')\"\n :back=\"`${props.base}/products`\"\n :back-label=\"t('module.products')\"\n :views=\"views\"\n >\n <wx-table\n :key=\"String(kind)\"\n v-model:search=\"search\"\n :data=\"page\"\n :columns=\"columns\"\n row-key=\"id\"\n searchable\n :clickable=\"false\"\n :hover=\"false\"\n flush\n layout=\"fixed\"\n :loading=\"loading\"\n :search-placeholder=\"t('panel.deleted-search')\"\n :empty-text=\"search ? t('panel.empty-search') : t('panel.deleted-empty')\"\n :aria-label=\"t('module.deleted')\"\n @state-change=\"onState\"\n >\n <template #cell-name=\"{ row }\">\n <div class=\"wx-catalog-deleted__name\">\n <span class=\"wx-catalog-deleted__title\">{{ row.name }}</span>\n <span v-if=\"'sku' in row && row.sku\" class=\"wx-catalog-deleted__code\">{{\n row.sku\n }}</span>\n <span v-else-if=\"'slug' in row && row.slug\" class=\"wx-catalog-deleted__code\">\n /{{ row.slug }}/\n </span>\n </div>\n </template>\n\n <template #cell-category=\"{ row }\">\n <wx-text v-if=\"!refOf(row, 'category')\" size=\"sm\" tone=\"muted\">\n {{ t('product.no-category') }}\n </wx-text>\n <span v-else class=\"wx-catalog-deleted__ref\">\n <wx-text\n size=\"sm\"\n truncate\n :tone=\"refOf(row, 'category')?.deleted ? 'muted' : undefined\"\n >\n {{ refOf(row, 'category')?.name }}\n </wx-text>\n <wx-badge v-if=\"refOf(row, 'category')?.deleted\" type=\"warning\" size=\"sm\" round>\n {{ t('panel.restore-bare') }}\n </wx-badge>\n </span>\n </template>\n\n <template #cell-parent=\"{ row }\">\n <wx-text v-if=\"!refOf(row, 'parent')\" size=\"sm\" tone=\"muted\">\n {{ t('panel.parent-root') }}\n </wx-text>\n <wx-text\n v-else\n size=\"sm\"\n truncate\n :tone=\"refOf(row, 'parent')?.deleted ? 'muted' : undefined\"\n >\n {{ refOf(row, 'parent')?.name }}\n <template v-if=\"refOf(row, 'parent')?.deleted\">\n ({{ t('panel.category-gone') }})</template\n >\n </wx-text>\n </template>\n\n <template #cell-deleted_at=\"{ row }\">\n <wx-date :value=\"row.deleted_at\" compact />\n </template>\n\n <template #cell-actions=\"{ row }\">\n <wx-row-menu v-if=\"canRestore\" :actions=\"actionsFor(row)\" :label=\"row.name\" />\n </template>\n </wx-table>\n </wx-list-screen>\n </div>\n</template>\n\n<style scoped>\n.wx-catalog-deleted {\n min-width: 0;\n}\n\n.wx-catalog-deleted__name {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.wx-catalog-deleted__title {\n font-weight: var(--wx-font-weight-medium);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wx-catalog-deleted__code {\n font-family: var(--wx-font-family-mono);\n font-size: var(--wx-font-size-sm);\n color: var(--wx-text-muted);\n}\n\n.wx-catalog-deleted__ref {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-4) var(--wx-space-8);\n min-width: 0;\n}\n</style>\n"],"names":["props","__props","context","useAdmin","api","createCatalogApi","tree","useCategoryTree","route","useRoute","router","useRouter","useCatalogMessages","useTranslate","message","useErrorText","page","ref","loading","search","canRestore","computed","kind","value","views","columns","rowMenuWidth","asked","load","state","mine","answer","error","toast","onState","restore","row","bare","refOf","key","found","actionsFor","actions","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","WxListScreen","$event","_createBlock","WxTable","_withCtx","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_hoisted_6","WxText","WxBadge","_createTextVNode","_Fragment","WxDate","WxRowMenu"],"mappings":"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"}