- Updated the ProgressiveImage component to display a dynamic error message based on the image availability, including a specific message for no-image scenarios.
- Modified ProductCard, ProductDetailDialog, and CheckoutPage components to utilize the enhanced ProgressiveImage, ensuring a consistent user experience when images are unavailable.
- Improved visual feedback by adding a placeholder for missing images across various components.
These changes enhance the user experience by providing clearer messaging and visual cues when images fail to load or are not available.
refactor: update background colors and gradients for theme-aware semantic styling consistency across components
- Changed background colors in ProgressiveImage, ProductCard, ProductDetailDialog, and CheckoutPage components to utilize theme-aware colors instead of fixed values.
- Enhanced gradient backgrounds to ensure better visual integration with the overall theme, improving the user interface and experience.
These updates promote a more cohesive design and improve maintainability by leveraging theme variables.
- Added a new ProgressiveImage component to handle image loading with a blur effect and loading indicators.
- Updated ProductCard and ProductDetailDialog components to utilize ProgressiveImage, improving image loading performance and user experience.
- Configured properties such as blur radius, transition duration, and loading indicators for better customization.
These changes enhance the visual presentation of images and optimize loading behavior across market components.
- Implemented lazy loading for product images in CartItem, CartSummary, ProductCard, ProductDetailDialog, CheckoutPage, and StallView components.
- This enhancement improves performance by deferring the loading of off-screen images, resulting in faster initial page load times and a smoother user experience.
These changes optimize image handling across the market module, contributing to better resource management and user interaction.
- Introduced an internal query state to improve UI responsiveness during search input.
- Implemented a debounced search function to optimize performance and reduce unnecessary emissions.
- Updated conditions for displaying keyboard hints and clear button based on the new internal query.
- Ensured both internal and actual search queries are cleared appropriately.
These changes enhance the user experience by providing immediate feedback while typing and optimizing search operations.
- Bypassed the naddr requirement for market configuration, allowing for more flexible market loading.
- Implemented conditional loading of the market based on the availability of naddr, defaulting to a general market load if not provided.
- Removed temporary debug methods for simulating loading and error states to clean up the codebase.
These changes streamline the market loading process and enhance the overall clarity of the MarketPage component.
- Updated the LoadingErrorState component to correctly reflect error states based on market readiness.
- Enhanced the isMarketReady computed property to account for loading and error conditions more accurately.
- Introduced temporary debug methods for simulating loading and error states, aiding in testing and development.
- Made debug methods globally accessible for easier testing of loading states.
These changes enhance the reliability of the loading/error handling in the MarketPage component and facilitate better debugging during development.
- Removed unnecessary imports and streamlined the LoadingErrorState component by eliminating redundant props.
- Improved keyboard handling in MarketSearchBar to support basic Escape key functionality and enhanced keyboard shortcuts.
- Updated MerchantStore and MarketPage components to utilize the revised LoadingErrorState and MarketSearchBar, ensuring consistent loading/error handling and search capabilities.
- Enhanced StallView to provide better category filtering and product search experience.
These changes improve code clarity and maintainability while enhancing user interaction across the market module.
## Type Consolidation
- Add StallApiResponse interface matching LNbits backend structure
- Update domain Stall interface with cleaner, app-friendly properties
- Create mapApiResponseToStall() mapper function for API-to-domain conversion
- Remove duplicate Stall type definition from nostrmarketAPI.ts
- Update CheckoutPage to use standardized shipping property
- Verify types against LNbits reference implementation
## UI Components
- Create reusable CartButton.vue component with proper separation of concerns
- Remove duplicate cart button code from MarketPage and StallView
- Add consistent cart functionality across all market pages
- Fix missing cart button in StallView
- Improve code maintainability with DRY principles
## Bug Fixes
- Fix ProductDetailDialog add-to-cart functionality by using correct cart system
- Resolve cart system mismatch between legacy addToCart and stall-based totalCartItems
- Update ProductCard to emit events properly instead of direct store call
- Ensure consistent event flow: ProductCard → ProductGrid → MarketPage → Store
## Technical Improvements
- Follow established Product type consolidation pattern for consistency
- Maintain type safety between API responses and domain models
- Enable easier API evolution without breaking domain logic
- Optimize bundle splitting with component extraction
- Introduced a new CartButton component to encapsulate cart summary functionality, improving code reusability and maintainability.
- Updated MarketPage.vue and StallView.vue to utilize the CartButton component, enhancing user navigation to the cart.
- Removed redundant cart summary code from both views, streamlining the component structure.
These changes provide a unified and consistent user experience for accessing the cart across different market views.
- Introduced a cart summary button in StallView.vue that displays the total number of items in the cart.
- Implemented a click handler to navigate users to the cart page, enhancing the shopping experience.
- Imported the ShoppingCart icon from lucide-vue-next for visual representation.
These changes provide users with quick access to their cart, improving overall usability and navigation within the market interface.
- Removed direct store dependency from ProductCard.vue, replacing it with event emission for adding products to the cart.
- Enhanced ProductGrid.vue to manage product detail dialog internally, improving user interaction and state handling.
- Streamlined MarketPage.vue by removing redundant product detail dialog logic, focusing on cleaner component structure.
- Updated event handling for adding products to the cart with quantity support, enhancing flexibility in product management.
These changes improve the modularity and maintainability of the market components, providing a better user experience when interacting with products.
- Added CategoryFilterBar.vue to manage category filtering with AND/OR toggle options and clear all functionality.
- Implemented ProductGrid.vue to display products with loading and empty states, improving user experience.
- Refactored MarketPage.vue to utilize the new components, streamlining the layout and enhancing responsiveness.
- Updated StallView.vue to incorporate ProductGrid for consistent product display across views.
These changes enhance the overall usability and visual appeal of the market components, providing users with a more intuitive filtering and browsing experience.
- Replace dual Product interfaces with unified domain model in types/market.ts
- Rename API response type to ProductApiResponse for clarity
- Add mapApiResponseToProduct() function for clean API-to-domain conversion
- Update MerchantStore.vue to use mapping function instead of manual property assignment
- Fix CreateProductDialog.vue to properly handle type conversions for API calls
- Resolve TypeScript readonly type conflicts using type assertions instead of array spreading
- Add missing reactive references (searchQuery) and remove unused imports
- Prevent Vue 3 recursion issues by maintaining original reactive object references
This eliminates confusion between API response structure and application domain model,
following single source of truth principle for better maintainability and type safety.
- Updated the product enrichment logic in MerchantStore.vue to ensure all necessary properties match the Product interface, improving data consistency.
- Added optional properties for active status, pending state, and configuration in the Product interface within market.ts, enhancing flexibility for merchant store management.
- Improved type assertions in MarketPage.vue and StallView.vue to ensure proper type handling for product data, enhancing type safety and clarity.
These changes improve the robustness and reliability of product data handling across the market components, enhancing the overall user experience.
- Updated the searchInputRef initialization to remove the explicit type declaration, simplifying the code.
- Enhanced input focus and blur handling by ensuring the existence of the $el property before accessing the input element, improving robustness.
- Streamlined the focus management logic in the handleClear and handleKeydown functions for better user experience.
These changes enhance the reliability and clarity of the MarketFuzzySearch component, improving overall usability.
- Added a computed property to dynamically filter products based on search results, enhancing the user experience by displaying relevant products when available.
- Updated the `useCategoryFilter` integration to utilize the new computed property, streamlining the filtering logic and improving overall performance.
These changes provide users with a more responsive and relevant product display in the MarketPage, improving the effectiveness of category filtering.
- Redesigned the Stall Info Card to improve responsiveness and aesthetics, incorporating a more compact layout and enhanced logo display.
- Updated the styling of stall statistics and category badges for better alignment with the design system, improving user interaction.
- Enhanced the overall structure and clarity of stall information, making it more visually engaging and user-friendly.
These changes provide a more cohesive and appealing interface in the StallView component, improving the overall user experience.
- Adjusted padding, margins, and font sizes throughout the StallView component to enhance mobile responsiveness and overall user experience.
- Updated the styling of various elements, including buttons, statistics, and category badges, to ensure better alignment with the design system and improved accessibility.
- Enhanced the layout of the stall information and search/filter bar for a more cohesive appearance across different screen sizes.
These changes provide a more visually appealing and user-friendly interface in the StallView component.
- Updated the keyboard shortcuts hint to display only on desktop devices, improving usability for users on larger screens.
- Introduced responsive breakpoints to manage the visibility of the enhanced placeholder, ensuring a better user experience across different device sizes.
These changes refine the search component by tailoring the interface to the user's device, enhancing accessibility and interaction.
- Updated the active filters summary section to focus on product count when filters are active, enhancing clarity for users.
- Simplified the layout by removing unnecessary elements, improving the overall user experience and accessibility.
These changes streamline the display of active filters, making it easier for users to understand the number of products available based on their selected categories.
- Optimized the Market Header and Fuzzy Search components for better mobile display, enhancing usability on smaller screens.
- Adjusted spacing and font sizes for various elements to ensure a cohesive look across devices.
- Improved the active filters summary and category filters for better accessibility and visual clarity.
These changes enhance the overall user experience by providing a more responsive and visually appealing interface in the MarketPage.
- Added focus and blur event handlers to manage input focus state.
- Updated suggestion display to show both search suggestions and recent searches in a unified dropdown.
- Improved styling for suggestion buttons to enhance user interaction.
- Ensured input field is focused after clearing search, improving usability.
These changes enhance the search experience by providing clearer suggestions and better input management.
- Adjusted the typo tolerance threshold in the fuzzy search options from 0.6 to 0.4, allowing for more flexible matching of product names and descriptions.
- This change enhances the search experience by accommodating a wider range of user input variations, improving product discoverability.
- Updated background and text colors in StallView to align with the new design system, enhancing overall aesthetics and readability.
- Adjusted styles for logo and product statistics to ensure better integration with the updated theme.
- Improved accessibility by refining text colors for better contrast and visibility.
These changes enhance the user experience by providing a more cohesive and visually appealing interface in the StallView component.
- Added support for AND/OR filtering modes in the `useCategoryFilter` composable, allowing users to filter products based on all or any selected categories.
- Introduced reactive state management for filter mode and updated the filtering logic to accommodate the new functionality.
- Enhanced the MarketPage UI with a toggle for selecting filter modes, improving user experience and accessibility.
- Updated ARIA attributes for better screen reader support in the filter mode selection.
These changes significantly enhance the category filtering capabilities, providing users with more control over product visibility.
Refactor CreateProductDialog and MarketPage for improved category handling
- Updated CreateProductDialog to utilize `model-value` and `@update:model-value` for the CategoryInput component, enhancing reactivity in category selection.
- Enhanced MarketPage filtering logic to support AND/OR modes, allowing for more flexible product filtering based on selected categories.
- Improved category normalization and matching logic to ensure accurate filtering results.
These changes streamline the category management and filtering processes, providing users with a more intuitive experience when creating and finding products.
- Updated CreateProductDialog to use `model-value` for Checkbox components, enhancing reactivity and consistency.
- Modified MerchantStore to only add active products to the market store, improving product visibility and management.
These changes streamline the product creation and management processes, ensuring better user experience and data integrity.
- Introduced a new CategoryInput component to facilitate category selection with suggestions and popular categories.
- Updated CreateProductDialog to integrate the CategoryInput, enhancing the user experience for adding product categories.
- Improved accessibility and usability by allowing users to add categories via keyboard shortcuts and providing visual feedback for selected categories.
These changes enhance the product creation process by streamlining category management.
- Changed background and text colors in the active filters summary to improve visual consistency and accessibility.
- Updated ARIA attributes to enhance screen reader support for better usability.
These changes refine the user interface and accessibility of the category filtering features in the MarketPage.
- Introduced a new `useCategoryFilter` composable to manage category filtering functionality, providing reactive state management and optimized performance for product filtering based on selected categories.
- Updated `MarketPage` to integrate the new composable, enhancing the UI with improved accessibility features, including ARIA roles and labels for category filters and active filters summary.
- Refactored category filtering logic to streamline product display based on selected categories, improving user experience in navigating and filtering products.
These changes enhance the overall functionality and usability of category filtering within the market module.
- Added functionality to extract categories from Nostr event tags in the useMarket composable, improving product categorization.
- Updated MarketPage layout to ensure proper rendering of category filters, enhancing the user interface for browsing by category.
These changes improve the clarity and usability of product categorization within the market module.
- Added a new function `clearCategoryFilters` in the market store to reset selected category filters.
- Updated MarketPage to include an enhanced category filter UI with a clear all button, active filters summary, and improved badge styling for selected categories.
- Introduced computed properties for tracking selected categories and their count, improving user experience in managing filters.
These changes provide a more intuitive and user-friendly interface for category filtering in the market module.
- Introduced a new MarketFuzzySearch component to provide an advanced search interface with keyboard shortcuts, search suggestions, and recent searches functionality.
- Updated MarketPage and StallView to integrate the new fuzzy search component, replacing the previous search input implementations.
- Enhanced search capabilities with configurable options for better user experience and product discovery.
These changes improve the search functionality across the market module, making it easier for users to find products efficiently.
- Introduced a new route for viewing individual stalls, allowing users to navigate to a specific stall's page.
- Created a ProductDetailDialog component to display detailed information about products, including images, descriptions, and stock status.
- Updated MarketPage to handle stall navigation and integrate the new dialog for product details.
These enhancements improve the user experience by providing more detailed product information and easier navigation within the market module.
- Enriched products with stall names in MerchantStore, ensuring each product displays the associated stall name or 'Unknown Stall' if not available.
- Updated product addition logic in useMarket to include stall names, improving clarity and consistency across the application.
- Enhanced error handling for product loading to maintain robust functionality.
These changes improve the user experience by providing clearer product information in the market interface.
- Replaced direct wallet balance computation in Navbar and WalletPage with a centralized totalBalance property from PaymentService, improving code maintainability.
- Updated CreateProductDialog, CreateStoreDialog, and MerchantStore components to utilize PaymentService for retrieving wallet admin and invoice keys, enhancing consistency across the application.
- These changes streamline wallet management and improve the overall architecture of the wallet module.
- Integrated currency selection using a dropdown, replacing the static input field for currency.
- Removed the wallet input field, now auto-selecting the preferred wallet for event creation.
- Updated form validation to remove the wallet and closing date fields, ensuring ticket sales close when the event ends.
- Added functionality to load available currencies from the EventsApiService when the dialog opens, improving user experience.
These changes streamline the event creation process and enhance the overall usability of the CreateEventDialog component.
- Update CreateProductDialog to support both creating and editing products, with dynamic button text and pre-populated fields for existing products.
- Refactor product submission logic to handle updates, including error handling and user feedback.
- Modify MerchantStore to manage product editing state and integrate updated product handling in the dialog.
These changes improve the user experience by allowing merchants to easily edit existing products, enhancing the overall product management workflow.
- Removed the unused Label import to clean up the code and improve readability.
- This change simplifies the component structure, enhancing maintainability.
- Adjust padding and margins for better spacing and visual hierarchy.
- Enhance tab navigation with improved overflow handling and responsive design.
- Update button styles for better accessibility and consistency across different screen sizes.
These changes enhance the user experience on the Market Dashboard, making it more intuitive and visually appealing.
- Update the layout of the active store dashboard to enhance visual hierarchy and spacing.
- Improve button accessibility and responsiveness by adjusting sizes and adding conditional rendering for text.
- Refactor store stats display to use a more consistent structure, enhancing readability and alignment.
- Adjust padding and margins for better overall presentation of store information and statistics.
These changes streamline the MerchantStore interface, providing a more intuitive and visually appealing experience for users managing their stores.
- Update form structure to allow for better scrolling and overflow handling.
- Introduce collapsible section for creating new shipping zones, improving user experience.
- Refactor error display and footer layout for clearer interaction during store creation.
- Add scroll indicator for better navigation within the form.
- Implement logic to check if content is scrollable, enhancing usability.
These changes streamline the store creation process, providing a more intuitive and responsive interface for users.
- Remove unnecessary destructuring of form values in CreateProductDialog to simplify code.
- Enhance conditional rendering in CreateStoreDialog to ensure proper checks for selected countries.
- Update API request handling in CreateStoreDialog to enforce non-null assertions for required fields.
- Adjust MerchantStore component to use underscore-prefixed parameters in event handlers for clarity.
These changes streamline the form handling process and improve code readability across the components.
- Introduce CreateProductDialog for adding new products with comprehensive form fields including name, price, description, quantity, and active status.
- Implement validation using Zod and integrate auto-reply settings.
- Add CreateStoreDialog for creating new stores, allowing input for store name, description, currency, and shipping zones.
- Enhance user experience with loading states and error handling in both dialogs.
- Refactor MerchantStore component to utilize StoreCard for displaying user stalls, improving code organization and readability.
These changes enhance the merchant experience by streamlining product and store creation processes, ensuring better validation and user feedback.
- Add comprehensive product creation dialog with Zod validation
- Implement product form fields: name, price, description, quantity, active status
- Add auto-reply settings with checkbox and message configuration
- Create product management functions: loadStallProducts, addProduct, createProduct
- Add products grid display with loading states and product cards
- Integrate with NostrmarketAPI for full CRUD operations
- Include placeholder sections for categories and image upload (future features)
- Follow Shadcn/UI form patterns with proper error handling and validation
- Complete merchant workflow: Create merchants → Create stores → Add products
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add a new section for displaying products, including loading states and messages for when no products are available.
- Introduce a dialog for adding new products, with a placeholder message indicating that the product creation form is in development.
- Enhance the NostrmarketAPI with new methods for product management, including fetching, creating, updating, and deleting products.
- Implement state management for product loading and display, improving the overall user experience for merchants managing their inventory.
These changes provide a foundational structure for product management within the MerchantStore, enhancing functionality and user engagement.