@webx-ui/module-catalog 0.8.10 → 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.
- package/dist/CategoriesPage-B6GBTzvN.js +279 -0
- package/dist/CategoriesPage-B6GBTzvN.js.map +1 -0
- package/dist/CategoryEditorPage-y6EFmOof.js +232 -0
- package/dist/CategoryEditorPage-y6EFmOof.js.map +1 -0
- package/dist/DeletedPage-TGTyQbzn.js +214 -0
- package/dist/DeletedPage-TGTyQbzn.js.map +1 -0
- package/dist/ExchangeImportPage-C6cSg7Cr.js +603 -0
- package/dist/ExchangeImportPage-C6cSg7Cr.js.map +1 -0
- package/dist/ExchangePage-9RrRcSiS.js +544 -0
- package/dist/ExchangePage-9RrRcSiS.js.map +1 -0
- package/dist/ExchangeProfilePage-BUnh9_D7.js +321 -0
- package/dist/ExchangeProfilePage-BUnh9_D7.js.map +1 -0
- package/dist/ExchangeProfilesPage-T6G3HHD8.js +180 -0
- package/dist/ExchangeProfilesPage-T6G3HHD8.js.map +1 -0
- package/dist/ProductEditorPage-Bfp6ZV3d.js +262 -0
- package/dist/ProductEditorPage-Bfp6ZV3d.js.map +1 -0
- package/dist/ProductsPage-BBmw9W4m.js +963 -0
- package/dist/ProductsPage-BBmw9W4m.js.map +1 -0
- package/dist/index-BTEbHnJ5.js +2571 -0
- package/dist/index-BTEbHnJ5.js.map +1 -0
- package/dist/index.d.ts +67 -9
- package/dist/index.js +46 -6056
- package/dist/index.js.map +1 -1
- package/dist/paths-DvfRnXtl.js +15 -0
- package/dist/paths-DvfRnXtl.js.map +1 -0
- package/dist/style.css +1 -1
- package/package.json +4 -4
|
@@ -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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"}
|