limits vlaiadtion adn keywrods forms

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-12 20:05:21 +00:00
parent 9824e9a4dc
commit 44ecd3fa7d
7 changed files with 224 additions and 110 deletions

View File

@@ -102,11 +102,11 @@ export const createKeywordsPageConfig = (
handlers: {
clusters: Array<{ id: number; name: string }>;
activeSector: { id: number; name: string } | null;
availableSeedKeywords: Array<{ id: number; keyword: string; volume: number; difficulty: number; intent: string }>;
formData: {
seed_keyword_id: number;
volume_override?: number | null;
difficulty_override?: number | null;
keyword?: string;
volume?: number | null;
difficulty?: number | null;
intent?: string;
cluster_id?: number | null;
status: string;
};
@@ -504,42 +504,53 @@ export const createKeywordsPageConfig = (
// They're automatically loaded by TablePageTemplate based on the current route
formFields: (clusters: Array<{ id: number; name: string }>) => [
{
key: 'seed_keyword_id',
label: 'Seed Keyword',
type: 'select',
placeholder: 'Select a seed keyword',
value: (handlers.formData.seed_keyword_id && handlers.formData.seed_keyword_id > 0) ? handlers.formData.seed_keyword_id.toString() : '',
key: 'keyword',
label: 'Keyword',
type: 'text',
placeholder: 'Enter keyword (e.g., best massage chairs)',
value: handlers.formData.keyword || '',
onChange: (value: any) =>
handlers.setFormData({ ...handlers.formData, seed_keyword_id: value ? parseInt(value) : 0 }),
handlers.setFormData({ ...handlers.formData, keyword: value }),
required: true,
options: [
{ value: '', label: 'Select a keyword...' },
...handlers.availableSeedKeywords.map((sk) => ({
value: sk.id.toString(),
label: `${sk.keyword} (Vol: ${sk.volume.toLocaleString()}, Diff: ${sk.difficulty}, ${sk.intent})`,
})),
],
},
{
key: 'volume_override',
label: 'Volume Override (optional)',
key: 'volume',
label: 'Search Volume',
type: 'number',
placeholder: 'Leave empty to use seed keyword volume',
value: handlers.formData.volume_override ?? '',
placeholder: 'Monthly search volume',
value: handlers.formData.volume ?? '',
onChange: (value: any) =>
handlers.setFormData({ ...handlers.formData, volume_override: value ? parseInt(value) : null }),
handlers.setFormData({ ...handlers.formData, volume: value ? parseInt(value) : null }),
required: true,
min: 0,
},
{
key: 'difficulty_override',
label: 'Difficulty Override (optional)',
key: 'difficulty',
label: 'Difficulty (0-100)',
type: 'number',
placeholder: 'Leave empty to use seed keyword difficulty',
value: handlers.formData.difficulty_override ?? '',
placeholder: 'SEO difficulty score',
value: handlers.formData.difficulty ?? '',
onChange: (value: any) =>
handlers.setFormData({ ...handlers.formData, difficulty_override: value ? parseInt(value) : null }),
handlers.setFormData({ ...handlers.formData, difficulty: value ? parseInt(value) : null }),
required: true,
min: 0,
max: 100,
},
{
key: 'intent',
label: 'Search Intent',
type: 'select',
value: handlers.formData.intent || 'informational',
onChange: (value: any) =>
handlers.setFormData({ ...handlers.formData, intent: value }),
required: true,
options: [
{ value: 'informational', label: 'Informational' },
{ value: 'navigational', label: 'Navigational' },
{ value: 'transactional', label: 'Transactional' },
{ value: 'commercial', label: 'Commercial' },
],
},
{
key: 'cluster_id',
label: 'Cluster',