176 lines
5.5 KiB
TypeScript
176 lines
5.5 KiB
TypeScript
"use client";
|
|
|
|
import React, { useState } from 'react';
|
|
import { useForm, Controller } from 'react-hook-form';
|
|
import { Button } from '@/components/ui/button';
|
|
import { Input } from '@/components/ui/input';
|
|
import { Label } from '@/components/ui/label';
|
|
import { Card } from '@/components/ui/card';
|
|
import CustomEditor from './custom-editor';
|
|
import FormEditor from './form-editor';
|
|
|
|
export default function EditorTest() {
|
|
const [testData, setTestData] = useState('Initial test content');
|
|
const [editorType, setEditorType] = useState('custom');
|
|
|
|
const { control, setValue, watch, handleSubmit } = useForm({
|
|
defaultValues: {
|
|
title: 'Test Title',
|
|
description: testData,
|
|
creatorName: 'Test Creator'
|
|
}
|
|
});
|
|
|
|
const watchedValues = watch();
|
|
|
|
const handleSetValue = () => {
|
|
const newContent = `<p>Updated content at ${new Date().toLocaleTimeString()}</p><p>This content was set via setValue</p>`;
|
|
setValue('description', newContent);
|
|
setTestData(newContent);
|
|
};
|
|
|
|
const handleSetEmpty = () => {
|
|
setValue('description', '');
|
|
setTestData('');
|
|
};
|
|
|
|
const handleSetHTML = () => {
|
|
const htmlContent = `
|
|
<h2>HTML Content Test</h2>
|
|
<p>This is a <strong>bold</strong> paragraph with <em>italic</em> text.</p>
|
|
<ul>
|
|
<li>List item 1</li>
|
|
<li>List item 2</li>
|
|
<li>List item 3</li>
|
|
</ul>
|
|
<p>Updated at: ${new Date().toLocaleTimeString()}</p>
|
|
`;
|
|
setValue('description', htmlContent);
|
|
setTestData(htmlContent);
|
|
};
|
|
|
|
const onSubmit = (data: any) => {
|
|
console.log('Form submitted:', data);
|
|
alert('Form submitted! Check console for data.');
|
|
};
|
|
|
|
return (
|
|
<div className="p-6 max-w-4xl mx-auto space-y-6">
|
|
<h1 className="text-2xl font-bold">Editor Test Component</h1>
|
|
|
|
<Card className="p-4">
|
|
<div className="space-y-4">
|
|
<div>
|
|
<Label>Editor Type:</Label>
|
|
<div className="flex gap-2 mt-2">
|
|
<Button
|
|
variant={editorType === 'custom' ? 'default' : 'outline'}
|
|
onClick={() => setEditorType('custom')}
|
|
>
|
|
CustomEditor
|
|
</Button>
|
|
<Button
|
|
variant={editorType === 'form' ? 'default' : 'outline'}
|
|
onClick={() => setEditorType('form')}
|
|
>
|
|
FormEditor
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="flex gap-2 flex-wrap">
|
|
<Button onClick={handleSetValue} variant="outline">
|
|
Set Value (Current Time)
|
|
</Button>
|
|
<Button onClick={handleSetEmpty} variant="outline">
|
|
Set Empty
|
|
</Button>
|
|
<Button onClick={handleSetHTML} variant="outline">
|
|
Set HTML Content
|
|
</Button>
|
|
</div>
|
|
|
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
<div>
|
|
<Label>Current Test Data:</Label>
|
|
<div className="mt-2 p-2 bg-gray-100 rounded text-sm">
|
|
{testData || '(empty)'}
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<Label>Watched Form Values:</Label>
|
|
<div className="mt-2 p-2 bg-gray-100 rounded text-sm">
|
|
<pre>{JSON.stringify(watchedValues, null, 2)}</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</Card>
|
|
|
|
<form onSubmit={handleSubmit(onSubmit)} className="space-y-6">
|
|
<Card className="p-4">
|
|
<div className="space-y-4">
|
|
<div>
|
|
<Label>Title:</Label>
|
|
<Controller
|
|
control={control}
|
|
name="title"
|
|
render={({ field }) => (
|
|
<Input {...field} className="mt-1" />
|
|
)}
|
|
/>
|
|
</div>
|
|
|
|
<div>
|
|
<Label>Description (Editor):</Label>
|
|
<Controller
|
|
control={control}
|
|
name="description"
|
|
render={({ field }) => (
|
|
editorType === 'custom' ? (
|
|
<CustomEditor
|
|
onChange={field.onChange}
|
|
initialData={field.value}
|
|
/>
|
|
) : (
|
|
<FormEditor
|
|
onChange={field.onChange}
|
|
initialData={field.value}
|
|
/>
|
|
)
|
|
)}
|
|
/>
|
|
</div>
|
|
|
|
<div>
|
|
<Label>Creator Name:</Label>
|
|
<Controller
|
|
control={control}
|
|
name="creatorName"
|
|
render={({ field }) => (
|
|
<Input {...field} className="mt-1" />
|
|
)}
|
|
/>
|
|
</div>
|
|
|
|
<Button type="submit" className="w-full">
|
|
Submit Form
|
|
</Button>
|
|
</div>
|
|
</Card>
|
|
</form>
|
|
|
|
<Card className="p-4">
|
|
<h3 className="font-semibold mb-2">Instructions:</h3>
|
|
<ul className="list-disc list-inside space-y-1 text-sm">
|
|
<li>Switch between CustomEditor and FormEditor to test both</li>
|
|
<li>Click "Set Value" to test setValue functionality</li>
|
|
<li>Click "Set Empty" to test empty content handling</li>
|
|
<li>Click "Set HTML Content" to test rich HTML content</li>
|
|
<li>Type in the editor to test onChange functionality</li>
|
|
<li>Submit the form to see all data</li>
|
|
</ul>
|
|
</Card>
|
|
</div>
|
|
);
|
|
}
|