diff --git a/apps/web/src/pages/AdminHomePage.vue b/apps/web/src/pages/AdminHomePage.vue index e2e52d7..7f2dc64 100644 --- a/apps/web/src/pages/AdminHomePage.vue +++ b/apps/web/src/pages/AdminHomePage.vue @@ -2,7 +2,6 @@ import { computed, onMounted, ref } from "vue"; import { useAuth } from "@/composables/useAuth.js"; -import AdminListingStatus from "@/components/molecules/AdminListingStatus.vue"; import InventoryWorkflowStepper from "@/components/molecules/InventoryWorkflowStepper.vue"; import ProductIdentityStep from "@/components/molecules/ProductIdentityStep.vue"; import ProviderMappingStep from "@/components/molecules/ProviderMappingStep.vue"; @@ -26,8 +25,6 @@ import { import { createAdminListing, listAdminListings, - markListingPending, - publishAdminListing, } from "@/services/admin-listing-service.js"; import { createAdminSale, @@ -348,20 +345,6 @@ async function createListing() { } } -async function transitionListing(action, id) { - isSaving.value = true; - try { - const listing = await action(id, csrfToken()); - listings.value = listings.value.map((candidate) => - candidate.id === listing.id ? listing : candidate, - ); - } catch (requestError) { - error.value = requestError; - } finally { - isSaving.value = false; - } -} - async function recordSale() { isSaving.value = true; try { @@ -1043,19 +1026,8 @@ onMounted(() => {

Listings

-

- No listings yet. -

-
- -
+

{{ listings.length }} listing{{ listings.length === 1 ? "" : "s" }} recorded.

+ Manage listings

Sale history

diff --git a/apps/web/src/pages/AdminListingsPage.stories.js b/apps/web/src/pages/AdminListingsPage.stories.js new file mode 100644 index 0000000..2e43c27 --- /dev/null +++ b/apps/web/src/pages/AdminListingsPage.stories.js @@ -0,0 +1,5 @@ +import AdminListingsPage from './AdminListingsPage.vue'; + +export default { title: 'Pages/AdminListingsPage', component: AdminListingsPage }; + +export const Listings = {}; diff --git a/apps/web/src/pages/AdminListingsPage.vue b/apps/web/src/pages/AdminListingsPage.vue new file mode 100644 index 0000000..7723762 --- /dev/null +++ b/apps/web/src/pages/AdminListingsPage.vue @@ -0,0 +1,63 @@ + + + diff --git a/apps/web/src/pages/AdminShell.vue b/apps/web/src/pages/AdminShell.vue index 394e7a9..1de29d1 100644 --- a/apps/web/src/pages/AdminShell.vue +++ b/apps/web/src/pages/AdminShell.vue @@ -19,6 +19,7 @@ async function logout() {

Inventory

diff --git a/apps/web/src/router/index.js b/apps/web/src/router/index.js index 2d493e5..94f989e 100644 --- a/apps/web/src/router/index.js +++ b/apps/web/src/router/index.js @@ -10,6 +10,7 @@ import { useAuth } from '@/composables/useAuth.js'; import AdminImagePage from '@/pages/AdminImagePage.vue'; import AdminSettingsPage from '@/pages/AdminSettingsPage.vue'; import AdminSavedViewsPage from '@/pages/AdminSavedViewsPage.vue'; +import AdminListingsPage from '@/pages/AdminListingsPage.vue'; const router = createRouter({ history: createWebHistory(), @@ -24,6 +25,7 @@ const router = createRouter({ children: [ { path: '', name: 'admin-home', component: AdminHomePage }, { path: 'inventory/:id/images', name: 'admin-image-manager', component: AdminImagePage }, + { path: 'listings', name: 'admin-listings', component: AdminListingsPage }, { path: 'settings', name: 'admin-settings', component: AdminSettingsPage }, { path: 'saved-views', name: 'admin-saved-views', component: AdminSavedViewsPage }, ], diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index 6617d09..ba0c41b 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -179,6 +179,7 @@ Remaining roadmap areas are approved external provider credentials/adapters, bro - Public catalog filters now collapse behind an accessible mobile disclosure, show an active-filter count, and provide a reset action while preserving URL synchronization. - The admin image manager now supports multi-file upload with a drag-and-drop dropzone, per-image alt-text editing, primary selection, up/down reordering, and per-image retry/delete actions targeted at the correct image instead of the first uploaded image. - The guided inventory workflow is now a true single-step-at-a-time wizard: the stepper is clickable, only the active stage's panel is shown, Back/Next controls advance between stages, and the active stage persists across reloads through local storage. +- Listing management (publish/mark pending) is now a dedicated `/admin/listings` screen with its own navigation entry; the guided workflow overview links to it and only tracks listing creation and a lightweight count for wizard completion. ## Local Commands