feat: add revert

This commit is contained in:
Joel 2025-02-27 11:43:35 +08:00
parent 3e5c2aa607
commit 74cb3209ef
3 changed files with 24 additions and 5 deletions

View File

@ -13,26 +13,29 @@ type Props = {
payload: MetadataItemWithEdit
onChange: (payload: MetadataItemWithEdit) => void
onRemove: (id: string) => void
onReset: (id: string) => void
}
const EditMetadatabatchItem: FC<Props> = ({
payload,
onChange,
onRemove,
onReset,
}) => {
const isUpdated = payload.isUpdated
const isDeleted = payload.updateType === UpdateType.delete
return (
<div className='flex h-6 items-center space-x-0.5'>
{isUpdated ? <EditedBeacon onReset={() => { }} /> : <div className='shrink-0 size-4' />}
{isUpdated ? <EditedBeacon onReset={() => onReset(payload.id)} /> : <div className='shrink-0 size-4' />}
<Label text={payload.name} isDeleted={isDeleted} />
{payload.isMultipleValue
? <InputHasSetMultipleValue onClear={() => onChange({ ...payload, isMultipleValue: false })} />
: <InputCombined
type={payload.type}
value={payload.value}
onChange={v => onChange({ ...payload, value: v as string })
} />}
onChange={v => onChange({ ...payload, value: v as string })}
readOnly={isDeleted}
/>}
<div
className={

View File

@ -11,6 +11,7 @@ type Props = {
type: DataType
value: any
onChange: (value: any) => void
readOnly?: boolean
}
const InputCombined: FC<Props> = ({
@ -18,6 +19,7 @@ const InputCombined: FC<Props> = ({
type,
value,
onChange,
readOnly,
}) => {
// TODO: configClassName...
const className = cn('grow p-0.5 h-6 text-xs')
@ -34,6 +36,7 @@ const InputCombined: FC<Props> = ({
size='sm'
controlWrapClassName='overflow-hidden'
controlClassName='pt-0 pb-0'
readOnly={readOnly}
/>
</div>
)
@ -44,8 +47,8 @@ const InputCombined: FC<Props> = ({
className={cn(className, 'rounded-md')}
value={value}
onChange={e => onChange(e.target.value)}
>
</Input>
readOnly={readOnly}
/>
)
}
export default React.memo(InputCombined)

View File

@ -56,6 +56,18 @@ const EditMetadataBatchModal: FC<Props> = ({
setTempleList(newTempleList)
}, [templeList])
const handleItemReset = useCallback((id: string) => {
const newTempleList = produce(templeList, (draft) => {
const index = draft.findIndex(i => i.id === id)
if (index !== -1) {
draft[index] = { ...list[index] }
draft[index].isUpdated = false
delete draft[index].updateType
}
})
setTempleList(newTempleList)
}, [list, templeList])
const testAddedList: MetadataItemWithEdit[] = [
{
id: '1', name: 'name1', type: DataType.string, value: 'aaa',
@ -98,6 +110,7 @@ const EditMetadataBatchModal: FC<Props> = ({
payload={item}
onChange={handleTemplesChange}
onRemove={handleTempleItemRemove}
onReset={handleItemReset}
/>
))}
</div>