feat: Wishlist settings cleanup + Categories/Tags/Attributes CRUD pages
Wishlist Settings Cleanup: - Removed wishlist_page setting (not needed for SPA architecture) - Marked advanced features as 'Coming Soon' with disabled flag: * Wishlist Sharing * Back in Stock Notifications * Multiple Wishlists - Added disabled prop support to SchemaField toggle component - Kept only working features: guest wishlist, show in header, max items, add to cart button Product Taxonomy CRUD Pages: Built full CRUD interfaces for all three taxonomy types: 1. Categories (/products/categories): - Table view with search - Create/Edit dialog with name, slug, description - Delete with confirmation - Product count display - Parent category support 2. Tags (/products/tags): - Table view with search - Create/Edit dialog with name, slug, description - Delete with confirmation - Product count display 3. Attributes (/products/attributes): - Table view with search - Create/Edit dialog with label, slug, type, orderby - Delete with confirmation - Type selector (Select/Text) - Sort order selector (Custom/Name/ID) All pages include: - React Query for data fetching/mutations - Toast notifications for success/error - Loading states - Empty states - Responsive tables - Dialog forms with validation Files Modified: - includes/Modules/WishlistSettings.php (removed page selector, marked advanced as coming soon) - admin-spa/src/components/forms/SchemaField.tsx (added disabled prop) - admin-spa/src/routes/Products/Categories.tsx (full CRUD) - admin-spa/src/routes/Products/Tags.tsx (full CRUD) - admin-spa/src/routes/Products/Attributes.tsx (full CRUD) - admin-spa/src/components/nav/SubmenuBar.tsx (removed debug logging) - admin-spa/dist/app.js (rebuilt) Result: ✅ Wishlist settings now clearly show what's implemented vs coming soon ✅ Categories/Tags/Attributes pages fully functional ✅ Professional CRUD interfaces matching admin design ✅ All taxonomy management now in SPA
This commit is contained in:
@@ -16,6 +16,7 @@ export interface FieldSchema {
|
||||
options?: Record<string, string>;
|
||||
min?: number;
|
||||
max?: number;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
interface SchemaFieldProps {
|
||||
@@ -72,6 +73,7 @@ export function SchemaField({ name, schema, value, onChange, error }: SchemaFiel
|
||||
<Switch
|
||||
checked={!!value}
|
||||
onCheckedChange={onChange}
|
||||
disabled={schema.disabled}
|
||||
/>
|
||||
<span className="text-sm text-muted-foreground">
|
||||
{value ? 'Enabled' : 'Disabled'}
|
||||
|
||||
@@ -30,11 +30,6 @@ export default function SubmenuBar({ items = [], fullscreen = false, headerVisib
|
||||
// Only ONE submenu item should be active at a time
|
||||
const isActive = it.path === pathname;
|
||||
|
||||
// Debug logging for Dashboard Overview issue
|
||||
if (it.label === 'Overview' && pathname.includes('dashboard')) {
|
||||
console.log('Overview check:', { label: it.label, path: it.path, pathname, isActive });
|
||||
}
|
||||
|
||||
const cls = [
|
||||
'ui-ctrl inline-flex items-center gap-2 rounded-md px-2.5 py-1.5 border text-sm whitespace-nowrap',
|
||||
'focus:outline-none focus:ring-0 focus:shadow-none',
|
||||
|
||||
Reference in New Issue
Block a user