diff --git a/ui/app/mirrors/create/qrep/qrep.tsx b/ui/app/mirrors/create/qrep/qrep.tsx index 6e5ecbcf3a..5e9c9dd264 100644 --- a/ui/app/mirrors/create/qrep/qrep.tsx +++ b/ui/app/mirrors/create/qrep/qrep.tsx @@ -64,9 +64,6 @@ export default function QRepConfigForm({ const [sourceTables, setSourceTables] = useState< { value: string; label: string }[] >([]); - const [allColumns, setAllColumns] = useState< - { value: string; label: string }[] - >([]); const [watermarkColumns, setWatermarkColumns] = useState< { value: string; label: string }[] >([]); @@ -122,12 +119,6 @@ export default function QRepConfigForm({ const types = allowedTypesForWatermarkColumn.get(sourceType); return !types || types.has(col.type); }); - setAllColumns( - cols.map((col) => ({ - value: col.name, - label: `${col.name} (${col.type})`, - })) - ); setWatermarkColumns( filteredCols.map((col) => ({ value: col.name, @@ -218,7 +209,6 @@ export default function QRepConfigForm({ /> ) : setting.label === 'Upsert Key Columns' ? ( >; setting: MirrorSetting; } export default function UpsertColsDisplay({ - columns, loading, setter, setting, }: UpsertColsProps) { - const [uniqueColumnsSet, setUniqueColumnsSet] = useState>( - new Set() - ); + const [upsertColumnsText, setUpsertColumnsText] = useState(''); + + const handleTextChange = (value: string) => { + setUpsertColumnsText(value); + + // Parse comma-separated values and trim whitespace + const columnsArray = value + .split(',') + .map((col) => col.trim()) + .filter((col) => col.length > 0); - const handleUniqueColumns = ( - col: string, - setting: MirrorSetting, - action: 'add' | 'remove' - ) => { - if (action === 'add') setUniqueColumnsSet((prev) => new Set(prev).add(col)); - else if (action === 'remove') { - setUniqueColumnsSet((prev) => { - const newSet = new Set(prev); - newSet.delete(col); - return newSet; - }); - } - const uniqueColsArr = Array.from(uniqueColumnsSet); - setting.stateHandler(uniqueColsArr, setter); + setting.stateHandler(columnsArray, setter); }; useEffect(() => { - const uniqueColsArr = Array.from(uniqueColumnsSet); + // Parse comma-separated values and update the config + const columnsArray = upsertColumnsText + .split(',') + .map((col) => col.trim()) + .filter((col) => col.length > 0); + setter((curr) => { let defaultMode: QRepWriteMode = { writeType: QRepWriteType.QREP_WRITE_MODE_APPEND, upsertKeyColumns: [], }; let currWriteMode = (curr as QRepConfig).writeMode || defaultMode; - currWriteMode.upsertKeyColumns = uniqueColsArr as string[]; + currWriteMode.upsertKeyColumns = columnsArray; return { ...curr, writeMode: currWriteMode, }; }); - }, [uniqueColumnsSet, setter]); + }, [upsertColumnsText, setter]); + return ( - <> - { - val && handleUniqueColumns(val.value, setting, 'add'); +
+ handleTextChange(e.target.value)} + disabled={loading} + style={{ + width: '100%', + padding: '8px 12px', + border: '1px solid #ccc', + borderRadius: '4px', + fontSize: '14px', + backgroundColor: loading ? '#f5f5f5' : 'white', }} - isLoading={loading} - options={columns} - theme={SelectTheme} /> -
- {Array.from(uniqueColumnsSet).map((col: string) => { - return ( - - {col} - - - ); - })} -
- + {upsertColumnsText && ( +
+ Columns:{' '} + {upsertColumnsText + .split(',') + .map((col) => col.trim()) + .filter((col) => col.length > 0) + .join(', ')} +
+ )} +
); }