import React, { useMemo } from "react" import { Button, Card, InputNumber, Select, Space } from "antd" import { DeleteOutlined, PlusOutlined } from "@ant-design/icons" import { useTranslation } from "react-i18next" import type { ActionDraft, ActionEvent, AutoScoreTagOption } from "./AutoScoreUtils" import { createDefaultActionDraft } from "./AutoScoreUtils" interface ActionEditorProps { value: ActionDraft[] tagOptions: AutoScoreTagOption[] canEdit: boolean onChange: (nextDrafts: ActionDraft[]) => void } export const ActionEditor: React.FC = ({ value, tagOptions, canEdit, onChange, }) => { const { t } = useTranslation() const actionOptions = useMemo( () => [ { value: "add_score", label: t("autoScore.actionAddScore") }, { value: "add_tag", label: t("autoScore.actionAddTag") }, ], [t] ) const mergedTagOptions = useMemo(() => { const optionMap = new Map(tagOptions.map((option) => [option.value, option])) for (const action of value) { if (action.event !== "add_tag") continue const tagValues = Array.isArray(action.value) ? action.value : action.value ? [action.value] : [] for (const tagValue of tagValues) { if (!optionMap.has(tagValue)) { optionMap.set(tagValue, { label: tagValue, value: tagValue }) } } } return Array.from(optionMap.values()) }, [tagOptions, value]) const updateAction = (id: string, patch: Partial>) => { onChange(value.map((item) => (item.id === id ? { ...item, ...patch } : item))) } const handleAddAction = () => { onChange([...value, createDefaultActionDraft()]) } const handleRemoveAction = (id: string) => { if (value.length <= 1) return onChange(value.filter((item) => item.id !== id)) } return ( {value.map((action) => (
updateAction(action.id, { value: nextValue })} /> )}
))}
) }