|
@@ -1,6 +1,6 @@
|
|
|
'use client'
|
|
|
import type { FC } from 'react'
|
|
|
-import React, { useCallback } from 'react'
|
|
|
+import React, { useCallback, useMemo } from 'react'
|
|
|
import produce from 'immer'
|
|
|
import cn from 'classnames'
|
|
|
import type { InputVar } from '../../../../types'
|
|
@@ -24,14 +24,39 @@ const Form: FC<Props> = ({
|
|
|
values,
|
|
|
onChange,
|
|
|
}) => {
|
|
|
+ const mapKeysWithSameValueSelector = useMemo(() => {
|
|
|
+ const keysWithSameValueSelector = (key: string) => {
|
|
|
+ const targetValueSelector = inputs.find(
|
|
|
+ item => item.variable === key,
|
|
|
+ )?.value_selector
|
|
|
+ if (!targetValueSelector)
|
|
|
+ return [key]
|
|
|
+
|
|
|
+ const result: string[] = []
|
|
|
+ inputs.forEach((item) => {
|
|
|
+ if (item.value_selector?.join('.') === targetValueSelector.join('.'))
|
|
|
+ result.push(item.variable)
|
|
|
+ })
|
|
|
+ return result
|
|
|
+ }
|
|
|
+
|
|
|
+ const m = new Map()
|
|
|
+ for (const input of inputs)
|
|
|
+ m.set(input.variable, keysWithSameValueSelector(input.variable))
|
|
|
+
|
|
|
+ return m
|
|
|
+ }, [inputs])
|
|
|
+
|
|
|
const handleChange = useCallback((key: string) => {
|
|
|
+ const mKeys = mapKeysWithSameValueSelector.get(key) ?? [key]
|
|
|
return (value: any) => {
|
|
|
const newValues = produce(values, (draft) => {
|
|
|
- draft[key] = value
|
|
|
+ for (const k of mKeys)
|
|
|
+ draft[k] = value
|
|
|
})
|
|
|
onChange(newValues)
|
|
|
}
|
|
|
- }, [values, onChange])
|
|
|
+ }, [values, onChange, mapKeysWithSameValueSelector])
|
|
|
const isArrayLikeType = [InputVarType.contexts, InputVarType.iterator].includes(inputs[0]?.type)
|
|
|
const isContext = inputs[0]?.type === InputVarType.contexts
|
|
|
const handleAddContext = useCallback(() => {
|