From fe243a42cb8ed085c3f67ce6a7b9ea72f80ca90e Mon Sep 17 00:00:00 2001 From: Dwindi Ramadhana Date: Sun, 11 Jan 2026 23:15:59 +0700 Subject: [PATCH] fix: Create Page dialog improvements - Add horizontal padding to dialog content (px-1) - Show real site URL from WNW_CONFIG.siteUrl instead of 'yoursite.com' - Improve error handling to extract message from response.data.message - Better slug generation regex (removes special chars properly) - Reset form when modal closes - Use theme colors (text-muted-foreground, hover:bg-accent/50) --- .../Pages/components/CreatePageModal.tsx | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/admin-spa/src/routes/Appearance/Pages/components/CreatePageModal.tsx b/admin-spa/src/routes/Appearance/Pages/components/CreatePageModal.tsx index a12607e..107cf7f 100644 --- a/admin-spa/src/routes/Appearance/Pages/components/CreatePageModal.tsx +++ b/admin-spa/src/routes/Appearance/Pages/components/CreatePageModal.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useMutation } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { __ } from '@/lib/i18n'; @@ -36,6 +36,9 @@ export function CreatePageModal({ open, onOpenChange, onCreated }: CreatePageMod const [title, setTitle] = useState(''); const [slug, setSlug] = useState(''); + // Get site URL from WordPress config + const siteUrl = window.WNW_CONFIG?.siteUrl?.replace(/\/$/, '') || window.location.origin; + // Create page mutation const createMutation = useMutation({ mutationFn: async () => { @@ -61,21 +64,36 @@ export function CreatePageModal({ open, onOpenChange, onCreated }: CreatePageMod } }, onError: (error: any) => { - toast.error(error?.message || __('Failed to create page')); + // Extract error message from the response + const message = error?.response?.data?.message || + error?.message || + __('Failed to create page'); + toast.error(message); }, }); // Auto-generate slug from title const handleTitleChange = (value: string) => { setTitle(value); - if (!slug || slug === title.toLowerCase().replace(/\s+/g, '-')) { - setSlug(value.toLowerCase().replace(/\s+/g, '-')); + // Auto-generate slug only if slug matches the previously auto-generated value + const autoSlug = title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, ''); + if (!slug || slug === autoSlug) { + setSlug(value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/(^-|-$)/g, '')); } }; + // Reset form when modal closes + useEffect(() => { + if (!open) { + setTitle(''); + setSlug(''); + setPageType('page'); + } + }, [open]); + return ( - + {__('Create New Page')} @@ -83,30 +101,30 @@ export function CreatePageModal({ open, onOpenChange, onCreated }: CreatePageMod -
+
{/* Page Type Selection */} setPageType(v as 'page' | 'template')}> -
+
-

+

{__('Static content like About, Contact, Terms')}

-
+
-

+

{__('Templates are auto-created for each post type')}

@@ -131,11 +149,11 @@ export function CreatePageModal({ open, onOpenChange, onCreated }: CreatePageMod setSlug(e.target.value)} + onChange={(e) => setSlug(e.target.value.toLowerCase().replace(/[^a-z0-9-]/g, ''))} placeholder={__('e.g., about-us')} /> -

- {__('URL will be: ')}yoursite.com/{slug || 'page-slug'} +

+ {__('URL will be: ')}{siteUrl}/{slug || 'page-slug'}