diff --git a/frontend/src/features/parsing-filters/components/VisualFilterEditor.tsx b/frontend/src/features/parsing-filters/components/VisualFilterEditor.tsx index 06fa8cf84..ea6a569be 100644 --- a/frontend/src/features/parsing-filters/components/VisualFilterEditor.tsx +++ b/frontend/src/features/parsing-filters/components/VisualFilterEditor.tsx @@ -285,10 +285,20 @@ function StepFields({ onPatternCreated?: (p: RegexPattern) => void onChange: (config: Record) => void }) { + const { t } = useTranslation() const set = (key: string, val: unknown) => onChange({ ...config, [key]: val }) const str = (key: string) => (typeof config[key] === 'string' ? (config[key] as string) : '') const list = (key: string) => Array.isArray(config[key]) ? (config[key] as unknown[]).map((x) => String(x)) : [] + const obj = (key: string): Record => + config[key] && typeof config[key] === 'object' && !Array.isArray(config[key]) + ? (config[key] as Record) + : {} + const objStr = (key: string, sub: string) => { + const v = obj(key)[sub] + return typeof v === 'string' ? v : '' + } + const setObj = (key: string, sub: string, val: string) => set(key, { ...obj(key), [sub]: val }) switch (kind) { case 'grok': @@ -335,7 +345,13 @@ function StepFields({ return ( <> set('function', v)} /> - set('params', v)} /> +
+
{t('parsingFilters.visual.parameters')}
+
+ setObj('params', 'key', v)} /> + setObj('params', 'value', v)} /> +
+
set('where', v)} /> ) @@ -399,7 +415,7 @@ function WhereField({ ) } -/** Editable list of strings (rename.from, add.params). */ +/** Editable list of strings (rename.from). */ function ListField({ label, values, diff --git a/frontend/src/features/parsing-filters/lib/filter-model.ts b/frontend/src/features/parsing-filters/lib/filter-model.ts index be7a49a8d..0d87daa6e 100644 --- a/frontend/src/features/parsing-filters/lib/filter-model.ts +++ b/frontend/src/features/parsing-filters/lib/filter-model.ts @@ -121,6 +121,7 @@ function pruneEmpty(config: Record): Record { if (v == null) continue if (typeof v === 'string' && v.trim() === '') continue if (Array.isArray(v) && v.length === 0) continue + if (isRecord(v) && Object.keys(v).length === 0) continue out[k] = v } return out @@ -137,7 +138,7 @@ export function emptyStep(kind: StepKind): Step { case 'rename': return { kind, config: { to: '', from: [] } } case 'add': - return { kind, config: { function: '', params: [] } } + return { kind, config: { function: 'string', params: {} } } case 'drop': return { kind, config: {} } default: diff --git a/frontend/src/shared/i18n/locales/de.json b/frontend/src/shared/i18n/locales/de.json index ab072ba04..ccf637e4f 100644 --- a/frontend/src/shared/i18n/locales/de.json +++ b/frontend/src/shared/i18n/locales/de.json @@ -4455,7 +4455,10 @@ "patternCreated": "Muster „{{name}}“ erstellt", "patternCreateError": "Muster konnte nicht erstellt werden", "patternIdInvalid": "Die Muster-ID muss mit einem Buchstaben oder _ beginnen und nur Buchstaben, Ziffern oder _ verwenden", - "patternDefRequired": "Definition ist erforderlich" + "patternDefRequired": "Definition ist erforderlich", + "parameters": "Parameter", + "paramsKey": "Schlüssel", + "paramsValue": "Wert" }, "allDataTypes": "Alle Datentypen" }, diff --git a/frontend/src/shared/i18n/locales/en.json b/frontend/src/shared/i18n/locales/en.json index 907ba36bf..b06b3e675 100644 --- a/frontend/src/shared/i18n/locales/en.json +++ b/frontend/src/shared/i18n/locales/en.json @@ -4415,7 +4415,10 @@ "patternCreated": "Pattern \"{{name}}\" created", "patternCreateError": "Failed to create pattern", "patternIdInvalid": "Pattern ID must start with a letter or _ and use only letters, digits or _", - "patternDefRequired": "Definition is required" + "patternDefRequired": "Definition is required", + "parameters": "Parameters", + "paramsKey": "Key", + "paramsValue": "Value" }, "allDataTypes": "All data types" }, diff --git a/frontend/src/shared/i18n/locales/es.json b/frontend/src/shared/i18n/locales/es.json index 54345a314..ed8ed0dc4 100644 --- a/frontend/src/shared/i18n/locales/es.json +++ b/frontend/src/shared/i18n/locales/es.json @@ -4339,7 +4339,10 @@ "patternCreated": "Patrón \"{{name}}\" creado", "patternCreateError": "No se pudo crear el patrón", "patternIdInvalid": "El ID debe empezar con letra o _ y usar solo letras, dígitos o _", - "patternDefRequired": "La definición es obligatoria" + "patternDefRequired": "La definición es obligatoria", + "parameters": "Parámetros", + "paramsKey": "Clave", + "paramsValue": "Valor" }, "allDataTypes": "Todos los tipos de dato" }, diff --git a/frontend/src/shared/i18n/locales/fr.json b/frontend/src/shared/i18n/locales/fr.json index 78ed500ac..cc3c47e1c 100644 --- a/frontend/src/shared/i18n/locales/fr.json +++ b/frontend/src/shared/i18n/locales/fr.json @@ -4455,7 +4455,10 @@ "patternCreated": "Motif « {{name}} » créé", "patternCreateError": "Échec de la création du motif", "patternIdInvalid": "L'ID du motif doit commencer par une lettre ou _ et n'utiliser que des lettres, chiffres ou _", - "patternDefRequired": "La définition est requise" + "patternDefRequired": "La définition est requise", + "parameters": "Paramètres", + "paramsKey": "Clé", + "paramsValue": "Valeur" }, "allDataTypes": "Tous les types de données" }, diff --git a/frontend/src/shared/i18n/locales/it.json b/frontend/src/shared/i18n/locales/it.json index e154f2591..501a6ff91 100644 --- a/frontend/src/shared/i18n/locales/it.json +++ b/frontend/src/shared/i18n/locales/it.json @@ -4455,7 +4455,10 @@ "patternCreated": "Pattern \"{{name}}\" creato", "patternCreateError": "Creazione del pattern non riuscita", "patternIdInvalid": "L'ID del pattern deve iniziare con una lettera o _ e usare solo lettere, cifre o _", - "patternDefRequired": "La definizione è obbligatoria" + "patternDefRequired": "La definizione è obbligatoria", + "parameters": "Parametri", + "paramsKey": "Chiave", + "paramsValue": "Valore" }, "allDataTypes": "Tutti i tipi di dati" }, diff --git a/frontend/src/shared/i18n/locales/pt.json b/frontend/src/shared/i18n/locales/pt.json index 9d74d6531..cdfe86170 100644 --- a/frontend/src/shared/i18n/locales/pt.json +++ b/frontend/src/shared/i18n/locales/pt.json @@ -4339,7 +4339,10 @@ "patternCreated": "Padrão \"{{name}}\" criado", "patternCreateError": "Falha ao criar o padrão", "patternIdInvalid": "O ID deve começar com letra ou _ e usar apenas letras, dígitos ou _", - "patternDefRequired": "A definição é obrigatória" + "patternDefRequired": "A definição é obrigatória", + "parameters": "Parâmetros", + "paramsKey": "Chave", + "paramsValue": "Valor" }, "allDataTypes": "Todos os tipos de dado" }, diff --git a/frontend/src/shared/i18n/locales/ru.json b/frontend/src/shared/i18n/locales/ru.json index a7788d675..86f4e709e 100644 --- a/frontend/src/shared/i18n/locales/ru.json +++ b/frontend/src/shared/i18n/locales/ru.json @@ -4265,7 +4265,10 @@ "patternCreated": "Шаблон «{{name}}» создан", "patternCreateError": "Не удалось создать шаблон", "patternIdInvalid": "ID шаблона должен начинаться с буквы или _ и содержать только буквы, цифры или _", - "patternDefRequired": "Определение обязательно" + "patternDefRequired": "Определение обязательно", + "parameters": "Параметры", + "paramsKey": "Ключ", + "paramsValue": "Значение" }, "allDataTypes": "Все типы данных" },