Commit Graph

4 Commits

Author SHA1 Message Date
Dwindi Ramadhana
e64045b0e1 feat: Guest wishlist localStorage + visual state
Guest Wishlist Implementation:
Problem: Guests couldn't persist wishlist, no visual feedback on wishlisted items
Solution: Implemented localStorage-based guest wishlist system

Changes:
1. localStorage Storage:
   - Key: 'woonoow_guest_wishlist'
   - Stores array of product IDs
   - Persists across browser sessions
   - Loads on mount for guests

2. Dual Mode Logic:
   - Guest (not logged in): localStorage only
   - Logged in: API + database
   - isInWishlist() works for both modes

3. Visual State:
   - productIds Set tracks wishlisted items
   - Heart icons show filled state when in wishlist
   - Works in ProductCard, Product page, etc.

Result:
 Guests can add/remove items (persists in browser)
 Heart icons show filled state for wishlisted items
 No login required when guest wishlist enabled
 Seamless experience for both guests and logged-in users

Files Modified:
- customer-spa/src/hooks/useWishlist.ts (localStorage implementation)
- customer-spa/dist/app.js (rebuilt)

Note: Categories/Tags/Attributes pages already exist as placeholder pages
2025-12-26 23:07:18 +07:00
Dwindi Ramadhana
cc67288614 fix: Submenu active states + Guest wishlist frontend check
Submenu Active State Fix:
Problem: Dashboard Overview never active, All Orders/Products/Customers always active
Root Cause: Submenu path matching didn't respect 'exact' flag from backend
Solution: Added proper exact flag handling in SubmenuBar component
- If item.exact = true: only match exact path (for Overview at /dashboard)
- If item.exact = false/undefined: match path + sub-paths (for All Orders at /orders)
Result: Submenu items now show correct active state 

Guest Wishlist Frontend Fix:
Problem: Guest wishlist enabled in backend but frontend blocked with login prompt
Root Cause: useWishlist hook had frontend login checks before API calls
Solution: Removed frontend login checks from addToWishlist and removeFromWishlist
- Backend already enforces permission via check_permission() based on enable_guest_wishlist
- Frontend now lets backend handle authorization
- API returns proper error if guest wishlist disabled
Result: Guests can add/remove wishlist items when setting enabled 

Files Modified (2):
- admin-spa/src/components/nav/SubmenuBar.tsx (exact flag handling)
- customer-spa/src/hooks/useWishlist.ts (removed login checks)
- admin-spa/dist/app.js + customer-spa/dist/app.js (rebuilt)

Both submenu and guest wishlist issues resolved!
2025-12-26 22:50:25 +07:00
Dwindi Ramadhana
0b2c8a56d6 feat: Newsletter system improvements and validation framework
- Fix: Marketing events now display in Staff notifications tab
- Reorganize: Move Coupons to Marketing/Coupons for better organization
- Add: Comprehensive email/phone validation with extensible filter hooks
  - Email validation with regex pattern (xxxx@xxxx.xx)
  - Phone validation with WhatsApp verification support
  - Filter hooks for external API integration (QuickEmailVerification, etc.)
- Fix: Newsletter template routes now use centralized notification email builder
- Add: Validation.php class for reusable validation logic
- Add: VALIDATION_HOOKS.md documentation with integration examples
- Add: NEWSLETTER_CAMPAIGN_PLAN.md architecture for future campaign system
- Fix: API delete method call in Newsletter.tsx (delete -> del)
- Remove: Duplicate EmailTemplates.tsx (using notification system instead)
- Update: Newsletter controller to use centralized Validation class

Breaking changes:
- Coupons routes moved from /routes/Coupons to /routes/Marketing/Coupons
- Legacy /coupons routes maintained for backward compatibility
2025-12-26 10:59:48 +07:00
Dwindi Ramadhana
0b08ddefa1 feat: implement wishlist feature with admin toggle
- Add WishlistController with full CRUD API
- Create wishlist page in My Account
- Add heart icon to all product card layouts (always visible)
- Implement useWishlist hook for state management
- Add wishlist toggle in admin Settings > Customer
- Fix wishlist menu visibility based on admin settings
- Fix double navigation in wishlist page
- Fix variable product navigation to use React Router
- Add TypeScript type casting fix for addresses
2025-12-26 01:44:15 +07:00