@webx-ui/module-catalog-landings 0.2.2 → 0.2.3

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 @@
1
+ {"version":3,"file":"LandingsPage-D3IHE6TR.js","sources":["../src/GenerateDialog.vue","../src/LandingsPage.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport {\n useLocales,\n useModal,\n WxAlert,\n WxButton,\n WxDialog,\n WxFormItem,\n WxInput,\n WxInputNumber,\n WxProgress,\n WxSelect,\n WxSpace,\n WxSwitch,\n WxTable,\n WxText,\n WxTreeSelect,\n type SelectOption,\n type TableColumn,\n type TreeSelectValue,\n} from '@webx-ui/core'\nimport { useAdmin, useErrorText, useTranslate } from '@webx-ui/module-admin'\nimport { useCategoryTree } from '@webx-ui/module-catalog'\nimport { createLandingsApi } from './api'\nimport { NAMESPACE, useCatalogLandingsMessages } from './i18n'\nimport type { BaseFacet, GenerateParams, GeneratePreview, GenerateRow, GenerateRun } from './types'\n\n/**\n * «Create in bulk» (§8.3 of the landings spec), three steps in one dialog: the bases, the facet and\n * its values, the templates — then the preview, a row per landing with the reason it is skipped —\n * then the run, done at once or polled while the queue makes it. Resolves with the run, or `null`\n * when nothing was made.\n */\nconst { open, resolve } = useModal<GenerateRun | null>()\n\nconst admin = useAdmin()\nconst api = createLandingsApi(admin)\nconst tree = useCategoryTree(admin)\nconst locales = useLocales()\nuseCatalogLandingsMessages()\n\nconst t = useTranslate(NAMESPACE)\nconst panel = useTranslate('webx-admin')\nconst catalog = useTranslate('webx-catalog')\nconst message = useErrorText()\n\ntype Step = 'form' | 'preview' | 'run'\n\nconst step = ref<Step>('form')\nconst categories = ref<number[]>([])\nconst subtree = ref(false)\nconst facet = ref<string | null>(null)\nconst values = ref<string[]>([])\nconst minProducts = ref<number | null>(1)\nconst templates = ref({ slug: '', name: '', h1: '', title: '', description: '' })\nconst publish = ref(false)\n\nconst facets = ref<BaseFacet[]>([])\nconst errors = ref<Record<string, string[]>>({})\nconst failure = ref('')\nconst busy = ref(false)\nconst preview = ref<GeneratePreview | null>(null)\nconst run = ref<GenerateRun | null>(null)\n\nonMounted(() => void tree.load().catch(() => undefined))\n\n/* The facets of values the first base offers: a range has no value to make a landing of. */\nwatch(\n () => categories.value[0] ?? null,\n async (first) => {\n if (first === null) {\n facets.value = []\n\n return\n }\n\n try {\n facets.value = (await api.facets(first)).filter((one) => one.kind !== 'range')\n } catch (error) {\n failure.value = message(error)\n }\n },\n)\n\nconst facetOptions = computed<SelectOption[]>(() =>\n facets.value.map((one) => ({ value: one.key, label: one.label })),\n)\n\nconst valueOptions = computed<SelectOption[]>(() =>\n (facets.value.find((one) => one.key === facet.value)?.values ?? []).map((one) => ({\n value: one.value,\n label: `${one.label} (${one.count})`,\n })),\n)\n\nwatch(facet, () => (values.value = []))\n\nconst params = computed<GenerateParams>(() => ({\n categories: categories.value,\n subtree: subtree.value,\n facet: facet.value ?? '',\n values: values.value.length > 0 ? values.value : null,\n min_products: minProducts.value,\n ...templates.value,\n publish: publish.value,\n}))\n\nconst ready = computed(() => categories.value.length > 0 && facet.value !== null)\n\nfunction first(field: string): string | undefined {\n return errors.value[field]?.[0]\n}\n\nfunction refuse(error: unknown): void {\n const body = (error as { body?: { errors?: Record<string, string[]> } }).body\n\n if (body?.errors) errors.value = body.errors\n else failure.value = message(error)\n}\n\nasync function toPreview(): Promise<void> {\n if (!ready.value || busy.value) return\n\n busy.value = true\n errors.value = {}\n failure.value = ''\n\n try {\n preview.value = await api.preview(params.value)\n step.value = 'preview'\n } catch (error) {\n refuse(error)\n } finally {\n busy.value = false\n }\n}\n\nlet timer: ReturnType<typeof setTimeout> | undefined\n\nasync function poll(id: number, delay = 1500): Promise<void> {\n timer = setTimeout(async () => {\n try {\n run.value = await api.run(id)\n\n if (run.value.status === 'queued' || run.value.status === 'running') void poll(id)\n } catch {\n void poll(id, Math.min(delay * 2, 15000))\n }\n }, delay)\n}\n\nasync function start(): Promise<void> {\n if (busy.value) return\n\n busy.value = true\n failure.value = ''\n\n try {\n run.value = await api.generate(params.value)\n step.value = 'run'\n\n if (run.value.id !== null && !finished.value) void poll(run.value.id)\n } catch (error) {\n refuse(error)\n step.value = 'form'\n } finally {\n busy.value = false\n }\n}\n\nonBeforeUnmount(() => clearTimeout(timer))\n\nconst finished = computed(() => run.value?.status === 'done' || run.value?.status === 'failed')\n\nfunction close(): void {\n resolve(run.value && run.value.done > 0 ? run.value : null)\n}\n\n/* --------------------------------------------------------------- the preview --- */\n\nconst word = (record: Record<string, string>) =>\n record[locales.active.value] ?? Object.values(record)[0] ?? ''\n\nconst columns = computed<TableColumn<GenerateRow>[]>(() => [\n { key: 'address', label: t('generate.column-address'), minWidth: 180 },\n { key: 'title', label: t('generate.column-h1'), minWidth: 180, hideBelow: 560 },\n { key: 'count', label: t('generate.column-count'), width: 100, align: 'right' },\n { key: 'conflict', label: t('generate.column-conflict'), minWidth: 180 },\n])\n\nconst rows = computed(() =>\n (preview.value?.rows ?? []).map((row, index) => ({ ...row, id: index })),\n)\n</script>\n\n<template>\n <wx-dialog\n v-model:open=\"open\"\n :title=\"t('generate.title')\"\n :width=\"step === 'form' ? 600 : 860\"\n @update:open=\"(on: boolean) => !on && close()\"\n >\n <wx-alert v-if=\"failure\" type=\"danger\">{{ failure }}</wx-alert>\n\n <div v-if=\"step === 'form'\" class=\"wx-catalog-landings-generate\">\n <wx-form-item\n :label=\"t('generate.bases')\"\n :help=\"t('generate.bases-help')\"\n :error=\"first('categories')\"\n required\n >\n <wx-tree-select\n :placeholder=\"catalog('panel.pick-categories')\"\n :filter-placeholder=\"panel('filters.search')\"\n :empty-text=\"panel('filters.nothing-found')\"\n :model-value=\"categories\"\n :nodes=\"tree.nodes.value ?? []\"\n node-key=\"id\"\n label-key=\"name\"\n children-key=\"children\"\n multiple\n check-strictly\n filterable\n clearable\n @update:model-value=\"\n (picked: TreeSelectValue) =>\n (categories = Array.isArray(picked)\n ? picked.map(Number)\n : picked\n ? [Number(picked)]\n : [])\n \"\n />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"subtree\">{{ t('generate.subtree') }}</wx-switch>\n </wx-form-item>\n\n <wx-form-item :label=\"t('generate.facet')\" :error=\"first('facet')\" required>\n <wx-select v-model=\"facet\" :options=\"facetOptions\" :disabled=\"categories.length === 0\" />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.values')\" :help=\"t('generate.values-help')\">\n <wx-select\n v-model=\"values\"\n :empty-text=\"panel('filters.nothing-found')\"\n :options=\"valueOptions\"\n multiple\n filterable\n clearable\n :disabled=\"facet === null\"\n />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.min-products')\" :help=\"t('generate.min-products-help')\">\n <wx-input-number v-model=\"minProducts\" :min=\"0\" :disabled=\"values.length > 0\" />\n </wx-form-item>\n\n <wx-text weight=\"medium\">{{ t('generate.templates') }}</wx-text>\n <wx-text size=\"sm\" tone=\"muted\">{{ t('generate.templates-help') }}</wx-text>\n <wx-form-item :label=\"t('generate.slug')\" :error=\"first('slug')\">\n <wx-input v-model=\"templates.slug\" placeholder=\"{category}-{value}\" />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.name')\">\n <wx-input v-model=\"templates.name\" placeholder=\"{category} {value}\" />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.h1')\">\n <wx-input v-model=\"templates.h1\" :placeholder=\"t('generate.template-empty')\" />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.seo-title')\">\n <wx-input v-model=\"templates.title\" :placeholder=\"t('generate.template-empty')\" />\n </wx-form-item>\n <wx-form-item :label=\"t('generate.seo-description')\">\n <wx-input v-model=\"templates.description\" :placeholder=\"t('generate.template-empty')\" />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"publish\">{{ t('generate.publish') }}</wx-switch>\n </wx-form-item>\n </div>\n\n <div v-else-if=\"step === 'preview' && preview\" class=\"wx-catalog-landings-generate\">\n <wx-text>\n {{\n preview.free > 0\n ? t('generate.summary', { free: preview.free, skipped: preview.total - preview.free })\n : t('generate.nothing')\n }}\n </wx-text>\n <wx-table :data=\"rows\" :columns=\"columns\" row-key=\"id\" flush layout=\"fixed\">\n <template #cell-address=\"{ row }\">\n <span class=\"wx-catalog-landings-generate__mono\">/{{ word(row.slug) }}/</span>\n </template>\n <template #cell-title=\"{ row }\">\n {{ word(Object.keys(row.h1).length > 0 ? row.h1 : row.name) }}\n </template>\n <template #cell-conflict=\"{ row }\">\n <wx-text v-if=\"row.conflict\" size=\"sm\" tone=\"warning\">{{ row.message }}</wx-text>\n </template>\n </wx-table>\n </div>\n\n <div v-else-if=\"step === 'run' && run\" class=\"wx-catalog-landings-generate\">\n <template v-if=\"!finished\">\n <wx-text>{{ t('generate.running') }}</wx-text>\n <wx-progress :value=\"run.done + run.failed\" :max=\"Math.max(1, run.total - run.skipped)\" />\n </template>\n <wx-alert v-else :type=\"run.status === 'failed' ? 'danger' : 'success'\">\n {{\n run.status === 'failed'\n ? t('generate.failed')\n : t('generate.done', { done: run.done, skipped: run.skipped, failed: run.failed })\n }}\n </wx-alert>\n <ul v-if=\"run.errors.length > 0\" class=\"wx-catalog-landings-generate__errors\">\n <li v-for=\"(one, index) in run.errors\" :key=\"index\">\n <strong>/{{ one.slug }}/</strong> — {{ one.message }}\n </li>\n </ul>\n </div>\n\n <template #footer>\n <wx-space size=\"sm\">\n <template v-if=\"step === 'form'\">\n <wx-button variant=\"outline\" @click=\"close\">{{ t('panel.cancel') }}</wx-button>\n <wx-button type=\"primary\" :loading=\"busy\" :disabled=\"!ready\" @click=\"toPreview\">\n {{ t('generate.preview') }}\n </wx-button>\n </template>\n <template v-else-if=\"step === 'preview'\">\n <wx-button variant=\"outline\" @click=\"step = 'form'\">{{ t('generate.back') }}</wx-button>\n <wx-button\n type=\"primary\"\n :loading=\"busy\"\n :disabled=\"(preview?.free ?? 0) === 0\"\n @click=\"start\"\n >\n {{ t('generate.run', { count: preview?.free ?? 0 }) }}\n </wx-button>\n </template>\n <wx-button v-else type=\"primary\" :disabled=\"!finished\" @click=\"close\">\n {{ t('generate.close') }}\n </wx-button>\n </wx-space>\n </template>\n </wx-dialog>\n</template>\n\n<style scoped>\n.wx-catalog-landings-generate {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-12);\n min-width: 0;\n}\n\n.wx-catalog-landings-generate__mono {\n font-family: var(--wx-font-family-mono);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-catalog-landings-generate__errors {\n margin: 0;\n padding-inline-start: var(--wx-space-16);\n font-size: var(--wx-font-size-sm);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from 'vue'\nimport { useRoute, useRouter, type LocationQueryRaw } from 'vue-router'\nimport {\n confirm,\n createModal,\n toast,\n useLocales,\n localizedValue,\n WxBadge,\n WxButton,\n WxFormItem,\n WxIcon,\n WxSwitch,\n WxTable,\n WxText,\n WxTooltip,\n WxTreeSelect,\n type TableColumn,\n type TableState,\n type TreeSelectValue,\n} from '@webx-ui/core'\nimport {\n rowMenuWidth,\n useAdmin,\n useErrorText,\n useTranslate,\n WxDate,\n WxFilterChips,\n WxListScreen,\n WxRowMenu,\n type AppliedFilter,\n type RowAction,\n type ScreenAction,\n} from '@webx-ui/module-admin'\nimport { useCategoryTree, type CategoryNode } from '@webx-ui/module-catalog'\nimport { createLandingsApi } from './api'\nimport GenerateDialog from './GenerateDialog.vue'\nimport { NAMESPACE, useCatalogLandingsMessages } from './i18n'\nimport type { GenerateRun, LandingQuery, LandingRow, LandingsPage } from './types'\n\n/**\n * The landings (§8.1 of the landings spec): name and address, the base, the set as chips, the\n * products, the state and the mark of attention; filtered by the base as a tree (the whole\n * catalogue is a choice of its own), «needs attention», published, empty, the bin; searched by\n * name and address. The filters live in the address, so coming back from a landing lands where\n * the list was left.\n */\ndefineOptions({ name: 'WxCatalogLandingsPage' })\n\nconst props = withDefaults(defineProps<{ base?: string }>(), { base: '/catalog' })\n\n/** The base filter's value for «the whole catalogue», beside the categories' ids. */\nconst ROOT = 'root'\n\nconst admin = useAdmin()\nconst api = createLandingsApi(admin)\nconst tree = useCategoryTree(admin)\nconst route = useRoute()\nconst router = useRouter()\nconst locales = useLocales()\nuseCatalogLandingsMessages()\n\nconst t = useTranslate(NAMESPACE)\nconst panel = useTranslate('webx-admin')\nconst catalog = useTranslate('webx-catalog')\nconst message = useErrorText()\n\nconst generate = createModal<GenerateRun | null, { base: string }>(GenerateDialog)\n\nconst list = computed(() => `${props.base}/landings`)\nconst canManage = computed(() => admin.can('catalog.manage'))\n\nconst page = ref<LandingsPage | null>(null)\nconst loading = ref(true)\n\nconst flag = (key: string) => route.query[key] === '1'\n\nconst search = ref(String(route.query.q ?? ''))\nconst pageNumber = ref(Number(route.query.page ?? 1) || 1)\nconst chosenBase = ref<string | null>(route.query.category ? String(route.query.category) : null)\nconst attention = ref(flag('attention'))\nconst published = ref(flag('published'))\nconst empty = ref(flag('empty'))\nconst trashed = ref(flag('trashed'))\nlet perPage = 25\n\nconst title = computed(\n () =>\n admin.state.manifest?.modules.find((module) => module.id === 'catalog-landings')?.title ??\n t('module.title'),\n)\n\n/** The tree of categories with «the whole catalogue» on top of it. */\nconst baseNodes = computed<CategoryNode[]>(() => [\n {\n id: ROOT as unknown as number,\n name: t('landing.whole-catalog'),\n parent_id: null,\n children: [],\n } as unknown as CategoryNode,\n ...(tree.nodes.value ?? []),\n])\n\nconst baseName = computed(() => {\n if (chosenBase.value === null) return ''\n if (chosenBase.value === ROOT) return t('landing.whole-catalog')\n\n const find = (nodes: CategoryNode[]): string =>\n nodes.reduce<string>(\n (found, node) =>\n found || (String(node.id) === chosenBase.value ? node.name : find(node.children ?? [])),\n '',\n )\n\n return find(tree.nodes.value ?? []) || `#${chosenBase.value}`\n})\n\nconst applied = computed<AppliedFilter[]>(() => {\n const chips: AppliedFilter[] = []\n\n if (chosenBase.value !== null) {\n chips.push({\n key: 'base',\n label: `${t('panel.filter-base')}: ${baseName.value}`,\n clear: () => (chosenBase.value = null),\n })\n }\n\n for (const [key, on, word] of [\n ['attention', attention, 'panel.filter-attention'],\n ['published', published, 'panel.filter-published'],\n ['empty', empty, 'panel.filter-empty'],\n ['trashed', trashed, 'panel.filter-trashed'],\n ] as const) {\n if (on.value) chips.push({ key, label: t(word), clear: () => (on.value = false) })\n }\n\n return chips\n})\n\nfunction clearFilters(): void {\n chosenBase.value = null\n attention.value = false\n published.value = false\n empty.value = false\n trashed.value = false\n}\n\nfunction query(state?: TableState): LandingQuery {\n return {\n q: state?.search ?? search.value,\n category: chosenBase.value ?? undefined,\n attention: attention.value || undefined,\n published: published.value || undefined,\n empty: empty.value || undefined,\n trashed: trashed.value || undefined,\n page: state?.page ?? pageNumber.value,\n per_page: state?.perPage ?? perPage,\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.list(query(state))\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 remember(): void {\n const wanted: LocationQueryRaw = {}\n const q = query()\n\n if (q.q) wanted.q = q.q\n if (q.category) wanted.category = q.category\n if (q.page && q.page > 1) wanted.page = String(q.page)\n\n for (const key of ['attention', 'published', 'empty', 'trashed'] as const) {\n if (q[key]) wanted[key] = '1'\n }\n\n void router.replace({ query: wanted })\n}\n\nfunction onState(state: TableState): void {\n perPage = state.perPage\n void load(state)\n}\n\nwatch([chosenBase, attention, published, empty, trashed], () => {\n pageNumber.value = 1\n remember()\n void load()\n})\n\nwatch([search, pageNumber], remember)\n\nconst columns = computed<TableColumn<LandingRow>[]>(() => [\n { key: 'name', label: t('panel.column-name'), minWidth: 220 },\n { key: 'category', label: t('panel.column-base'), width: 180, hideBelow: 760 },\n { key: 'chips', label: t('panel.column-set'), minWidth: 180, hideBelow: 640 },\n { key: 'products_count', label: t('panel.column-count'), width: 110, align: 'right' },\n { key: 'state', label: t('panel.column-state'), width: 170, hideBelow: 900 },\n { key: 'updated_at', label: t('panel.column-updated'), width: 130, hideBelow: 1180 },\n { key: 'actions', label: '', width: rowMenuWidth, align: 'right' },\n])\n\nconst nameOf = (row: LandingRow) =>\n localizedValue(row.name, locales.active.value, '') || `#${row.id}`\nconst slugOf = (row: LandingRow) => localizedValue(row.slug, locales.active.value, '')\n\nfunction open(row: LandingRow): void {\n void router.push(`${list.value}/${row.id}`)\n}\n\nasync function publish(row: LandingRow, on: boolean): Promise<void> {\n try {\n await api.publish(row.id, on)\n toast.success(t(on ? 'panel.published-toast' : 'panel.unpublished-toast'))\n await load()\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nasync function remove(row: LandingRow): Promise<void> {\n const agreed = await confirm({\n title: t('panel.delete-title', { name: nameOf(row) }),\n message: t('panel.delete-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.remove(row.id)\n toast.success(t('panel.deleted'))\n await load()\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nasync function restore(row: LandingRow): Promise<void> {\n try {\n await api.restore(row.id)\n toast.success(t('panel.restored'))\n await load()\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nfunction actionsFor(row: LandingRow): RowAction[] {\n if (row.deleted_at !== null) {\n return canManage.value\n ? [\n {\n key: 'restore',\n icon: 'refresh',\n label: t('panel.restore'),\n run: () => void restore(row),\n },\n ]\n : []\n }\n\n const actions: RowAction[] = [\n { key: 'open', icon: 'edit', label: t('panel.open'), run: () => open(row) },\n ]\n\n if (row.url)\n actions.push({ key: 'site', icon: 'link', label: t('panel.open-site'), href: row.url })\n\n if (canManage.value) {\n actions.push(\n row.is_published\n ? {\n key: 'unpublish',\n icon: 'eye-off',\n label: t('panel.unpublish'),\n run: () => void publish(row, false),\n }\n : {\n key: 'publish',\n icon: 'eye',\n label: t('panel.publish'),\n run: () => void publish(row, true),\n },\n {\n key: 'delete',\n icon: 'trash',\n label: t('panel.delete'),\n danger: true,\n run: () => void remove(row),\n },\n )\n }\n\n return actions\n}\n\nasync function bulk(): Promise<void> {\n const run = await generate({ base: props.base })\n\n if (run) await load()\n}\n\nconst actions = computed<ScreenAction[]>(() =>\n canManage.value\n ? [\n {\n key: 'new',\n label: t('panel.new'),\n icon: 'plus',\n primary: true,\n run: () =>\n void router.push({\n path: `${list.value}/new`,\n query:\n chosenBase.value && chosenBase.value !== ROOT ? { category: chosenBase.value } : {},\n }),\n },\n { key: 'generate', label: t('panel.generate'), icon: 'grid', run: () => void bulk() },\n ]\n : [],\n)\n\nconst emptyText = computed(() =>\n applied.value.length > 0 || search.value ? t('panel.nothing-found') : t('panel.empty'),\n)\n\nonMounted(() => {\n void tree.load().catch(() => undefined)\n})\n</script>\n\n<template>\n <div class=\"wx-catalog-landings\">\n <wx-list-screen :title=\"title\" :actions=\"actions\">\n <wx-table\n v-model:search=\"search\"\n v-model:page=\"pageNumber\"\n :loading-text=\"panel('filters.loading')\"\n :data=\"page\"\n :columns=\"columns\"\n row-key=\"id\"\n searchable\n clickable\n hover\n flush\n :loading=\"loading\"\n layout=\"fixed\"\n :filters-count=\"applied.length\"\n :filters-label=\"panel('filters.title')\"\n :search-placeholder=\"t('panel.search')\"\n :empty-text=\"emptyText\"\n :aria-label=\"title\"\n @row-click=\"open\"\n @state-change=\"onState\"\n >\n <template #filters>\n <wx-form-item :label=\"t('panel.filter-base')\">\n <wx-tree-select\n :placeholder=\"catalog('panel.any')\"\n :filter-placeholder=\"panel('filters.search')\"\n :empty-text=\"panel('filters.nothing-found')\"\n :model-value=\"chosenBase\"\n :nodes=\"baseNodes\"\n node-key=\"id\"\n label-key=\"name\"\n children-key=\"children\"\n check-strictly\n filterable\n clearable\n size=\"sm\"\n @update:model-value=\"\n (picked: TreeSelectValue) =>\n (chosenBase =\n picked === null || picked === undefined || Array.isArray(picked)\n ? null\n : String(picked))\n \"\n />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"attention\" size=\"sm\" :label=\"t('panel.filter-attention')\" />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"published\" size=\"sm\" :label=\"t('panel.filter-published')\" />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"empty\" size=\"sm\" :label=\"t('panel.filter-empty')\" />\n </wx-form-item>\n <wx-form-item>\n <wx-switch v-model=\"trashed\" size=\"sm\" :label=\"t('panel.filter-trashed')\" />\n </wx-form-item>\n\n <wx-button v-if=\"applied.length > 0\" variant=\"text\" size=\"sm\" block @click=\"clearFilters\">\n <template #icon><wx-icon name=\"close\" /></template>\n {{ panel('filters.reset') }}\n </wx-button>\n </template>\n\n <template #applied>\n <wx-filter-chips :filters=\"applied\" />\n </template>\n\n <template #cell-name=\"{ row }\">\n <div class=\"wx-catalog-landings__name\">\n <span class=\"wx-catalog-landings__title\">{{ nameOf(row) }}</span>\n <span class=\"wx-catalog-landings__slug\">/{{ slugOf(row) }}/</span>\n </div>\n </template>\n\n <template #cell-category=\"{ row }\">\n <wx-text size=\"sm\" truncate :tone=\"row.category === null ? 'muted' : undefined\">\n {{ row.category ?? t('landing.whole-catalog') }}\n </wx-text>\n </template>\n\n <template #cell-chips=\"{ row }\">\n <div class=\"wx-catalog-landings__chips\">\n <wx-badge v-for=\"chip in row.chips\" :key=\"chip.key\" size=\"sm\" variant=\"soft\">\n {{ chip.label }}: {{ chip.text }}\n </wx-badge>\n </div>\n </template>\n\n <template #cell-products_count=\"{ row }\">\n <wx-text v-if=\"row.products_count === null\" size=\"sm\" tone=\"muted\">\n {{ t('panel.not-counted') }}\n </wx-text>\n <wx-badge v-else-if=\"row.products_count === 0\" type=\"warning\" size=\"sm\" round>0</wx-badge>\n <span v-else class=\"wx-catalog-landings__count\">{{ row.products_count }}</span>\n </template>\n\n <template #cell-state=\"{ row }\">\n <div class=\"wx-catalog-landings__state\">\n <wx-badge v-if=\"row.deleted_at\" dot size=\"sm\">{{ t('panel.in-bin') }}</wx-badge>\n <wx-badge v-else :type=\"row.is_published ? 'success' : 'default'\" dot size=\"sm\">\n {{ t(row.is_published ? 'panel.published' : 'panel.unpublished') }}\n </wx-badge>\n <wx-tooltip v-if=\"row.attention\" :content=\"t(`landing.attention-${row.attention}`)\">\n <wx-badge type=\"warning\" size=\"sm\" round>\n <wx-icon name=\"warning\" size=\"sm\" />\n <span class=\"wx-catalog-landings__sr\">{{ t('landing.attention') }}</span>\n </wx-badge>\n </wx-tooltip>\n </div>\n </template>\n\n <template #cell-updated_at=\"{ row }\">\n <wx-date :value=\"row.updated_at\" compact />\n </template>\n\n <template #cell-actions=\"{ row }\">\n <wx-row-menu :actions=\"actionsFor(row)\" :label=\"nameOf(row)\" />\n </template>\n </wx-table>\n </wx-list-screen>\n </div>\n</template>\n\n<style scoped>\n.wx-catalog-landings {\n min-width: 0;\n}\n\n.wx-catalog-landings__name {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n.wx-catalog-landings__title,\n.wx-catalog-landings__slug {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wx-catalog-landings__slug {\n color: var(--wx-text-muted);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-catalog-landings__chips {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wx-space-4);\n}\n\n.wx-catalog-landings__count {\n font-variant-numeric: tabular-nums;\n}\n\n.wx-catalog-landings__state {\n display: flex;\n align-items: center;\n gap: var(--wx-space-6);\n}\n\n.wx-catalog-landings__sr {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n</style>\n"],"names":["open","resolve","useModal","admin","useAdmin","api","createLandingsApi","tree","useCategoryTree","locales","useLocales","useCatalogLandingsMessages","t","useTranslate","NAMESPACE","panel","catalog","message","useErrorText","step","ref","categories","subtree","facet","values","minProducts","templates","publish","facets","errors","failure","busy","preview","run","onMounted","watch","first","one","error","facetOptions","computed","valueOptions","params","ready","field","refuse","body","toPreview","timer","poll","id","delay","start","finished","onBeforeUnmount","close","word","record","columns","rows","row","index","_createBlock","_unref","WxDialog","$event","on","_createVNode","WxSpace","_createElementBlock","_Fragment","WxButton","WxAlert","_openBlock","_hoisted_1","WxFormItem","WxTreeSelect","_cache","picked","WxSwitch","WxSelect","WxInputNumber","WxText","WxInput","_hoisted_2","_createTextVNode","_toDisplayString","WxTable","_withCtx","_createElementVNode","_hoisted_3","_hoisted_4","WxProgress","_hoisted_5","ROOT","props","__props","route","useRoute","router","useRouter","generate","createModal","GenerateDialog","list","canManage","page","loading","flag","key","search","pageNumber","chosenBase","attention","published","empty","trashed","perPage","title","module","baseNodes","baseName","find","nodes","found","node","applied","chips","clearFilters","query","state","asked","load","mine","answer","toast","remember","wanted","q","onState","rowMenuWidth","nameOf","localizedValue","slugOf","remove","confirm","restore","actionsFor","actions","bulk","emptyText","WxListScreen","WxIcon","WxFilterChips","_renderList","chip","WxBadge","_hoisted_6","_hoisted_7","WxTooltip","_hoisted_8","WxDate","WxRowMenu"],"mappings":"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"}