Commit Graph

18 Commits

Author SHA1 Message Date
dwindown
d2350852ef feat: Add zone management backend + drawer z-index fix + SettingsCard action prop
## 1. Fixed Drawer Z-Index 
- Increased drawer z-index from 50 to 60
- Now appears above bottom navigation (z-50)
- Fixes mobile drawer visibility issue

## 2. Zone Management Backend 
Added full CRUD for shipping zones:
- POST /settings/shipping/zones - Create zone
- PUT /settings/shipping/zones/{id} - Update zone
- DELETE /settings/shipping/zones/{id} - Delete zone
- GET /settings/shipping/locations - Get countries/states/continents

Features:
- Create zones with name and regions
- Update zone name and regions
- Delete zones
- Region selector with continents, countries, and states
- Proper cache invalidation

## 3. Zone Management Frontend (In Progress) 
- Added state for zone CRUD (showAddZone, editingZone, deletingZone)
- Added mutations (createZone, updateZone, deleteZone)
- Added "Add Zone" button to SettingsCard
- Updated empty state with "Create First Zone" button

## 4. Enhanced SettingsCard Component 
- Added optional `action` prop for header buttons
- Flexbox layout for title/description + action
- Used in Shipping zones for "Add Zone" button

## Next Steps:
- Add delete button to each zone
- Create Add/Edit Zone dialog with region selector
- Add delete confirmation dialog
- Then move to Tax rates and Email subjects
2025-11-10 08:24:25 +07:00
dwindown
06213d2ed4 fix: Zone modal blank + Tax route redirect + Simplify notifications (Shopify style)
## 1. Fixed Blank Zone Modal 
**Problem:** Console error "setIsModalOpen is not defined"

**Fix:**
- Removed unused isModalOpen/setIsModalOpen state
- Use selectedZone state to control modal open/close
- Dialog/Drawer opens when selectedZone is truthy
- Simplified onClick handlers

## 2. Fixed Tax Settings Blank Page 
**Problem:** URL /settings/taxes (plural) was blank

**Fix:**
- Added redirect route from /settings/taxes → /settings/tax
- Maintains backward compatibility
- Users can access via either URL

## 3. Simplified Notifications (Shopify/Marketplace Style) 
**Philosophy:** "App for daily needs and quick access"

**Changes:**
-  Removed individual "Edit in WooCommerce" links (cluttered)
-  Removed "Email Sender" section (not daily need)
-  Removed redundant "Advanced Settings" link at bottom
-  Simplified info card with practical tips
-  Clean toggle-only interface like Shopify
-  Single link to advanced settings in info card

**What Shopify/Marketplaces Do:**
- Simple on/off toggles for each notification
- Brief description of what each email does
- Practical tips about which to enable
- Single link to advanced customization
- No clutter, focus on common tasks

**What We Provide:**
- Toggle to enable/disable each email
- Clear descriptions
- Quick tips for best practices
- Link to WooCommerce for templates/styling

**What WooCommerce Provides:**
- Email templates and HTML/CSS
- Subject lines and content
- Sender details
- Custom recipients

Perfect separation of concerns! 🎯
2025-11-10 00:06:27 +07:00
dwindown
a373b141b7 fix: Shipping toggle refresh + AlertDialog + Local Pickup nav + Notifications info
## 1. Fixed Shipping Method Toggle State 
- Updated useEffect to properly sync selectedZone with zones data
- Added JSON comparison to prevent infinite loops
- Toggle now refreshes zone data correctly

## 2. Replace confirm() with AlertDialog 
- Added AlertDialog component for delete confirmation
- Shows method name in confirmation message
- Better UX with proper dialog styling
- Updated both desktop and mobile versions

## 3. Added Local Pickup to Navigation 
- Added "Local Pickup" menu item in Settings
- Now accessible from Settings > Local Pickup
- Path: /settings/local-pickup

## 4. Shipping Cost Shortcodes 
- Already supported via HTML rendering
- WooCommerce shortcodes like [fee percent="10"] work
- [qty], [cost] are handled by WooCommerce backend
- No additional SPA work needed

## 5. Enhanced Notifications Page 
- Added comprehensive info card explaining:
  - What WooNooW provides (simple toggle)
  - What WooCommerce provides (advanced config)
- Clear guidance on when to use each
- Links to WooCommerce for templates/styling
- Replaced ToggleField with Switch for simpler usage

## Key Decisions:
 AlertDialog > confirm() for better UX
 Notifications = Simple toggle + guidance to WC
 Shortcodes handled by WooCommerce (no SPA work)
 Local Pickup now discoverable in nav
2025-11-09 23:56:34 +07:00
dwindown
d67055cce9 fix: Modal refresh + improved accordion UX
Fixes:
 Modal now shows newly added methods immediately
 Accordion chevron on right (standard pattern)
 Remove button moved to content area

Changes:
1. Added useEffect to sync selectedZone with zones data
   - Modal now updates when methods are added/deleted

2. Restructured accordion:
   Before: [Truck Icon] Name/Price [Chevron] [Delete]
   After:  [Truck Icon] Name/Price [Chevron →]

3. Button layout in expanded content:
   [Remove] | [Cancel] [Save]

Benefits:
 Clearer visual hierarchy
 Remove action grouped with other actions
 Standard accordion pattern (chevron on right)
 Better mobile UX (no accidental deletes)

Next: Research shipping addon integration patterns
2025-11-09 22:22:36 +07:00
dwindown
e00719e41b fix: Mobile accordion + deduplicate shipping methods
Fixes:
 Issue #2: Mobile drawer now uses accordion (no nested modals)
 Issue #3: Duplicate "Local pickup" - now shows as:
   - Local pickup
   - Local pickup (local_pickup_plus)

Changes:
- Mobile drawer matches desktop accordion pattern
- Smaller text/spacing for mobile
- Deduplication logic in backend API
- Adds method ID suffix for duplicate titles

Result:
 No modal-over-modal on any device
 Consistent UX desktop/mobile
 Clear distinction between similar methods
2025-11-09 20:58:49 +07:00
dwindown
31f1a9dae1 fix: Replace nested modal with accordion (desktop) + HTML rendering
Fixes:
 Issue #1: HTML rendering in descriptions (dangerouslySetInnerHTML)
 Issue #2: Nested modal UX - replaced with Accordion (desktop)

Changes:
- Removed Edit button → Click to expand accordion
- Settings form appears inline (no nested dialog)
- Smooth expand/collapse animation
- Delete button stays visible
- Loading spinner while fetching settings

Pattern:
🚚 Free Shipping [On] [▼] [Delete]
   └─ (Expanded) Settings form here

Benefits:
 No modal-over-modal
 Faster editing (no dialog open/close)
 See all options while editing one
 Matches Shopee/Tokopedia UX

Mobile drawer: TODO (next commit)
2025-11-09 20:56:34 +07:00
dwindown
08a42ee79a feat: Option B - Marketplace-style simplified shipping UI
Implemented ultra-simple, marketplace-inspired shipping interface!

Key Changes:
 Removed tabs - single view for delivery options
 Removed "Zone Details" tab - not needed
 Updated terminology:
   - "Shipping Methods" → "Delivery Options"
   - "Add Shipping Method" → "Add Delivery Option"
   - "Active/Inactive" badges (no toggles in modal)
 Added Edit button for each delivery option
 Simple settings form (title, cost, min amount)
 Removed technical jargon (no "priority", "instance", etc.)

New User Flow:
1. Main page: See zones with inline toggles
2. Click Edit icon → Modal opens
3. Modal shows:
   - [+ Add Delivery Option] button
   - List of delivery options with:
     * Name + Cost + Status badge
     * Edit button (opens settings)
     * Delete button
4. Click Edit → Simple form:
   - Display Name
   - Cost
   - Minimum Order (if applicable)
5. Save → Done!

Inspired by:
- Shopee: Ultra simple, flat list
- Tokopedia: No complex zones visible
- Lazada: Name + Price + Condition

Result:
 Zero learning curve
 Marketplace-familiar UX
 All WooCommerce power (hidden in backend)
 Perfect for non-tech users

Complexity stays in backend, simplicity for users! 🎯
2025-11-09 17:47:31 +07:00
dwindown
267914dbfe feat: Phase 2 - Full shipping method management in SPA
Implemented complete CRUD for shipping methods within the SPA!

Frontend Features:
 Tabbed modal (Methods / Details)
 Add shipping method button
 Method selection dialog
 Delete method with confirmation
 Active/Inactive status badges
 Responsive mobile drawer
 Real-time updates via React Query

Backend API:
 GET /methods/available - List all method types
 POST /zones/{id}/methods - Add method to zone
 DELETE /zones/{id}/methods/{instance_id} - Remove method
 GET /zones/{id}/methods/{instance_id}/settings - Get settings
 PUT /zones/{id}/methods/{instance_id}/settings - Update settings

User Flow:
1. Click Edit icon on zone card
2. Modal opens with 2 tabs:
   - Methods: Add/delete methods, see status
   - Details: View zone info
3. Click "Add Method" → Select from available methods
4. Click trash icon → Delete method (with confirmation)
5. All changes sync immediately

What Users Can Do Now:
 Add any shipping method to any zone
 Delete methods from zones
 View method status (Active/Inactive)
 See zone details (name, regions, order)
 Link to WooCommerce for advanced settings

Phase 2 Complete! 🎉
2025-11-09 17:24:07 +07:00
dwindown
273ac01d54 feat: Phase 1 - Improve shipping zone UI (remove redundancy)
Implemented modern, Shopify-inspired shipping interface improvements.

Changes:
 Removed redundant "Settings" button from zone cards
 Added subtle Edit icon button for zone management
 Enhanced modal to be informational (not just toggles)
 Removed duplicate toggles from modal (use inline toggles instead)
 Added zone order display with context
 Show Active/Inactive badges instead of toggles in modal
 Better visual hierarchy and spacing
 Improved mobile drawer layout
 Changed "Close" to "Done" (better UX)
 Changed "Advanced Settings" to "Edit in WooCommerce"

Modal Now Shows:
- Zone name and regions in header
- Zone order with explanation
- All shipping methods with:
  * Method name and icon
  * Cost display
  * Active/Inactive status badge
  * Description (if available)
- Link to edit in WooCommerce

User Flow:
1. See zones with inline toggles (quick enable/disable)
2. Click Edit icon → View zone details
3. See all methods and their status
4. Click "Edit in WooCommerce" for advanced settings

Result: Clean, modern UI with no redundancy 
2025-11-09 17:10:07 +07:00
dwindown
a1779ebbdf chore: Remove debug logs from shipping toggle
Cleaned up all debug logging now that toggle works perfectly.

Removed:
- Backend error_log statements
- Frontend console.log statements
- Kept only essential code

Result: Clean, production-ready code 
2025-11-09 00:50:00 +07:00
dwindown
2608f3ec38 debug: Add comprehensive logging for toggle issue
Added debug logging to identify where enabled status is lost.

Backend Logging:
- Log what instance_settings["enabled"] value is read from DB
- Log the computed is_enabled boolean
- Log for both regular zones and Rest of World zone

Frontend Logging:
- Log all fetched zones data
- Log each method's enabled status
- Console output for easy debugging

This will show us:
1. What WooCommerce stores in DB
2. What backend reads from DB
3. What backend returns to frontend
4. What frontend receives
5. What frontend displays

Next: Check console + error logs to find the disconnect
2025-11-09 00:14:47 +07:00
dwindown
a83d3dc3a3 feat: Add Shipping Zone Settings modal
Implemented functional settings modal for shipping zones.

Features:
 Settings button now opens modal/drawer
 Shows zone information (name, regions)
 Lists all shipping methods with toggles
 Toggle methods directly in modal
 Responsive: Dialog on desktop, Drawer on mobile
 Link to WooCommerce for advanced settings
 Clean, modern UI matching Payments page

Modal Content:
- Zone name and regions (read-only for now)
- Shipping methods list with enable/disable toggles
- Price display for each method
- "Advanced Settings in WooCommerce" link
- Close button

User Experience:
 Click Settings button → Modal opens
 Toggle methods on/off in modal
 Click Advanced Settings → Opens WooCommerce
 Click Close → Modal closes
 Mobile-friendly drawer on small screens

Next Steps:
- Add editable fields for method settings (cost, conditions)
- Use GenericGatewayForm pattern for WooCommerce form fields
- Add save functionality for method settings
2025-11-08 22:45:23 +07:00
dwindown
380170096c fix: Shipping toggle and mobile responsiveness
Fixed all reported issues with Shipping page.

Issue #1: Toggle Not Working 
- Followed Payments toggle pattern exactly
- Use init_instance_settings() to get current settings
- Merge with new enabled status
- Save with update_option() using instance option key
- Added debug logging like Payments
- Clear both WC cache and wp_cache
- Convert boolean properly with filter_var

Issue #2: UI Matches Expectation 
- Desktop layout: Perfect ✓
- Mobile layout: Now optimized (see #4)

Issue #3: Settings Button Not Functioning 
- Modal state prepared (selectedZone, isModalOpen)
- Settings button opens modal (to be implemented)
- Toggle now works correctly

Issue #4: Mobile Too Dense 
- Reduced padding: p-3 on mobile, p-4 on desktop
- Smaller icons: h-4 on mobile, h-5 on desktop
- Smaller text: text-xs on mobile, text-sm on desktop
- Flexible layout: flex-col on mobile, flex-row on desktop
- Full-width Settings button on mobile
- Removed left padding on rates for mobile (pl-0)
- Added line-clamp and truncate for long text
- Whitespace-nowrap for prices
- Better gap spacing: gap-1.5 on mobile, gap-2 on desktop

Result:
 Toggle works correctly
 Desktop layout perfect
 Mobile layout breathable and usable
 Ready for Settings modal implementation
2025-11-08 22:15:46 +07:00
dwindown
939f166727 fix: Improve shipping toggle and simplify UI
Fixed toggle functionality and cleaned up redundant buttons.

Backend Fix:
 Fixed toggle to properly update shipping method settings
 Get existing settings, update enabled field, save back
 Previously was trying to save wrong data structure

Frontend Changes:
 Removed "View in WooCommerce" from header (redundant)
 Changed "Edit zone" to "Settings" button (prepares for modal)
 Changed "+ Add shipping zone" to "Manage Zones in WooCommerce"
 Added modal state (selectedZone, isModalOpen)
 Added Dialog/Drawer imports for future modal implementation

Button Strategy:
- Header: Refresh only
- Zone card: Settings button (will open modal)
- Bottom: "Manage Zones in WooCommerce" (for add/edit/delete zones)

Next Step:
Implement settings modal similar to Payments page with zone/method configuration
2025-11-08 22:01:47 +07:00
dwindown
a8a4b1deee feat: Add toggle functionality to Shipping methods
Implemented inline enable/disable for shipping methods.

Frontend Changes:
 Allow HTML in shipping method names and prices
 Add toggle switches to each shipping method
 Loading state while toggling
 Toast notifications for success/error
 Optimistic UI updates via React Query

Backend Changes:
 POST /settings/shipping/zones/{zone_id}/methods/{instance_id}/toggle
 Enable/disable shipping methods
 Clear WooCommerce shipping cache
 Proper error handling

User Experience:
- Quick enable/disable without leaving page
- Similar to Payments page pattern
- Complex configuration still in WooCommerce
- Edit zone button for detailed settings
- Add zone button for new zones

Result:
 Functional shipping management
 No need to redirect for simple toggles
 Maintains WooCommerce compatibility
 Clean, intuitive interface
2025-11-08 21:44:19 +07:00
dwindown
e8b4421950 feat: Implement live Shipping settings page
Implemented functional Shipping settings page with WooCommerce integration.

Features:
 Fetch shipping zones from WooCommerce API
 Display zones with rates in card layout
 Refresh button to reload data
 "View in WooCommerce" button for full settings
 Edit zone links to WooCommerce
 Add zone link to WooCommerce
 Loading states with spinner
 Empty state when no zones configured
 Internationalization (i18n) throughout
 Shipping tips help card

Implementation:
- Uses React Query for data fetching
- Integrates with WooCommerce shipping API
- Links to WooCommerce for detailed configuration
- Clean, modern UI matching Payments page
- Responsive design

API Endpoint:
- GET /settings/shipping/zones

Note: Full CRUD operations handled in WooCommerce for now.
Future: Add inline editing capabilities.
2025-11-08 21:18:51 +07:00
dwindown
e49a0d1e3d feat: Implement Phase 1 Shopify-inspired settings (Store, Payments, Shipping)
 Features:
- Store Details page with live currency preview
- Payments page with visual provider cards and test mode
- Shipping & Delivery page with zone cards and local pickup
- Shared components: SettingsLayout, SettingsCard, SettingsSection, ToggleField

🎨 UI/UX:
- Card-based layouts (not boring forms)
- Generous whitespace and visual hierarchy
- Toast notifications using sonner (reused from Orders)
- Sticky save button at top
- Mobile-responsive design

🔧 Technical:
- Installed ESLint with TypeScript support
- Fixed all lint errors (0 errors)
- Phase 1 files have zero warnings
- Used existing toast from sonner (not reinvented)
- Updated routes in App.tsx

📝 Files Created:
- Store.tsx (currency preview, address, timezone)
- Payments.tsx (provider cards, manual methods)
- Shipping.tsx (zone cards, rates, local pickup)
- SettingsLayout.tsx, SettingsCard.tsx, SettingsSection.tsx, ToggleField.tsx

Phase 1 complete: 18-24 hours estimated work
2025-11-05 18:54:41 +07:00
dwindown
12e982b3e5 feat: Add WordPress button, settings navigation, and placeholder pages 2025-11-05 10:27:16 +07:00