From 82b012faa1aa13438697ece996246228ad2de67d Mon Sep 17 00:00:00 2001 From: FragginWagon Date: Thu, 10 Sep 2026 06:01:37 -0400 Subject: [PATCH] feat: extract pricing review workflow step --- .../molecules/PricingReviewStep.scss | 9 ++ .../molecules/PricingReviewStep.stories.js | 19 +++ .../molecules/PricingReviewStep.vue | 57 +++++++++ apps/web/src/pages/AdminHomePage.vue | 109 ++++-------------- docs/IMPLEMENTATION-STATUS.md | 1 + 5 files changed, 107 insertions(+), 88 deletions(-) create mode 100644 apps/web/src/components/molecules/PricingReviewStep.scss create mode 100644 apps/web/src/components/molecules/PricingReviewStep.stories.js create mode 100644 apps/web/src/components/molecules/PricingReviewStep.vue diff --git a/apps/web/src/components/molecules/PricingReviewStep.scss b/apps/web/src/components/molecules/PricingReviewStep.scss new file mode 100644 index 0000000..e102007 --- /dev/null +++ b/apps/web/src/components/molecules/PricingReviewStep.scss @@ -0,0 +1,9 @@ +.pricing-review-step { + align-content: start; +} + +.pricing-review-step__intro { + margin: var(--space-2) 0 0; + color: var(--color-text-muted); + font-size: var(--text-sm); +} diff --git a/apps/web/src/components/molecules/PricingReviewStep.stories.js b/apps/web/src/components/molecules/PricingReviewStep.stories.js new file mode 100644 index 0000000..68d92cc --- /dev/null +++ b/apps/web/src/components/molecules/PricingReviewStep.stories.js @@ -0,0 +1,19 @@ +import PricingReviewStep from './PricingReviewStep.vue'; + +export default { title: 'Molecules/PricingReviewStep', component: PricingReviewStep }; + +const inventory = [{ id: 'copy-1' }, { id: 'copy-2' }]; + +export const Empty = { + args: { + inventoryItemId: '', provider: 'fixture-provider', sourceIdentifier: '', observedPrice: '', + overridePrice: '', overrideReason: '', inventory, refreshStatus: '', + }, +}; + +export const Refreshing = { + args: { + inventoryItemId: 'copy-1', provider: 'fixture-provider', sourceIdentifier: 'fixture-copy-1', observedPrice: '2500', + overridePrice: '', overrideReason: '', inventory, refreshStatus: 'PROCESSING', isSaving: true, + }, +}; diff --git a/apps/web/src/components/molecules/PricingReviewStep.vue b/apps/web/src/components/molecules/PricingReviewStep.vue new file mode 100644 index 0000000..d43cf89 --- /dev/null +++ b/apps/web/src/components/molecules/PricingReviewStep.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/apps/web/src/pages/AdminHomePage.vue b/apps/web/src/pages/AdminHomePage.vue index a5dad90..e784884 100644 --- a/apps/web/src/pages/AdminHomePage.vue +++ b/apps/web/src/pages/AdminHomePage.vue @@ -8,6 +8,7 @@ import ProductIdentityStep from "@/components/molecules/ProductIdentityStep.vue" import ProviderMappingStep from "@/components/molecules/ProviderMappingStep.vue"; import InventoryCopyStep from "@/components/molecules/InventoryCopyStep.vue"; import InventoryImagesStep from "@/components/molecules/InventoryImagesStep.vue"; +import PricingReviewStep from "@/components/molecules/PricingReviewStep.vue"; import { createAdminInventory, createAdminProduct, @@ -870,94 +871,26 @@ onMounted(load); Record acquisition -
-

Calculate market value

- - - - - - - - - - - - - - - -
+
diff --git a/docs/IMPLEMENTATION-STATUS.md b/docs/IMPLEMENTATION-STATUS.md index 3169938..c3ada73 100644 --- a/docs/IMPLEMENTATION-STATUS.md +++ b/docs/IMPLEMENTATION-STATUS.md @@ -171,6 +171,7 @@ Remaining roadmap areas are approved external provider credentials/adapters, bro - Source mapping is now an extracted `ProviderMappingStep` molecule with Product/Provider/PRODUCT-vs-SEARCH mapping states, while preserving existing mapping loading and save behavior. - Physical inventory creation is now an extracted `InventoryCopyStep` molecule with Product and condition selection states, while preserving the existing seller-scoped create-copy API workflow. - Image management is now surfaced as an extracted `InventoryImagesStep` molecule with missing-image status and direct links to the existing upload/processing manager route. +- Pricing is now an extracted `PricingReviewStep` molecule covering observations, provider refresh, and reasoned manual overrides while preserving existing pricing API behavior. - Public catalog sorting now supports latest manual/calculated market value low-to-high and high-to-low, with null values placed last. - Public catalog filters now collapse behind an accessible mobile disclosure, show an active-filter count, and provide a reset action while preserving URL synchronization.