import { useState, useEffect } from 'react' import arrayMove from 'array-move' import ExerciseInputs from './ExerciseInputs' import { SortableList } from '../../sortable' import { TextInput } from '../../form' import { TExerciseInstance } from '../types' const ExerciseInstanceInputs = ({ value = [], name, onChange }: { value?: TExerciseInstance[] name: string onChange: GenericEventHandler }) => { const [state, setState] = useState(value.map(item => item.id)) function updateOrderProperty( values: T[], orderList: U[] ) { const orderedValues = values.map(value => { const order = orderList.findIndex(orderedId => orderedId === value.id) return { ...value, order } }) onChange({ target: { type: 'custom', name, value: orderedValues } }) } function onSortEnd({ oldIndex, newIndex }: { oldIndex: number newIndex: number }) { const newOrder = arrayMove(state, oldIndex, newIndex) setState(newOrder) updateOrderProperty(value, newOrder) } useEffect(() => { const missingIds = value .filter(item => !state.includes(item.id)) .filter(item => !item.id.startsWith('--')) .map(item => item.id) const stateWithoutRemovedItems = state.filter(stateId => value.find(item => stateId === item.id) ) setState([...stateWithoutRemovedItems, ...missingIds]) }, [value]) const items = state .map(stateId => { const itemIndex = value.findIndex(item => item.id === stateId) if (itemIndex < 0) return null const item = value[itemIndex] return (

{item.id}

{item.exercise && ( )}
) }) .filter(block => block !== null) return ( ) } export default ExerciseInstanceInputs