import { Button, ControlGroup, Dialog, DialogBody, DialogFooter, Icon, InputGroup, } from '@blueprintjs/core'; import React from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { i18n } from 'vj/utils'; import { RootState } from '../reducer'; interface SubtaskSettingsProps { subtaskId: number; time: string; memory: string; } export function SubtaskSettings(props: SubtaskSettingsProps) { const [open, setOpen] = React.useState(false); const score = useSelector((state: RootState) => state.config.subtasks.find((i) => i.id === props.subtaskId).score); const time = useSelector((state: RootState) => state.config.subtasks.find((i) => i.id === props.subtaskId).time); const memory = useSelector((state: RootState) => state.config.subtasks.find((i) => i.id === props.subtaskId).memory); const [ctime, setTime] = React.useState(time); const [cmemory, setMemory] = React.useState(memory); const [cscore, setScore] = React.useState(score); const dispatcher = (func, key) => (ev: React.ChangeEvent | number) => { let value = typeof ev !== 'object' ? ev : ev.currentTarget?.value; if (key === 'score') value = +value; func(value); }; const dispatch = useDispatch(); function onConfirm() { dispatch({ type: 'problemconfig/updateSubtaskConfig', id: props.subtaskId, time: ctime, memory: cmemory, score: cscore, }); setOpen(false); } return (<> setOpen(false)}> } onChange={dispatcher(setTime, 'time')} placeholder={`Inherit (${props.time || '1s'})`} value={ctime || ''} /> } onChange={dispatcher(setMemory, 'memory')} placeholder={`Inherit (${props.memory || '256m'})`} value={cmemory || ''} /> } onChange={dispatcher(setScore, 'score')} placeholder="Score" type="number" value={cscore.toString()} /> } />
  • setOpen(true)}>
       {time || props.time || '1s'}    {memory || props.memory || '256m'} {' '} {score || 0}
  • ); } export function GlobalSettings() { const time = useSelector((s: RootState) => s.config?.time); const memory = useSelector((s: RootState) => s.config?.memory); const [open, setOpen] = React.useState(false); const [ctime, setTime] = React.useState(time); const [cmemory, setMemory] = React.useState(memory); React.useEffect(() => { setTime(time); }, [time]); React.useEffect(() => { setMemory(memory); }, [memory]); const dispatch = useDispatch(); function onConfirm() { dispatch({ type: 'problemconfig/updateGlobalConfig', time: ctime, memory: cmemory, }); setOpen(false); } return (<> setOpen(false)}> } onChange={(ev) => setTime(ev.currentTarget.value)} placeholder="1s" value={ctime || ''} /> } onChange={(ev) => setMemory(ev.currentTarget.value)} placeholder="256m" value={cmemory || ''} /> } />
  • setOpen(true)}>
       {time || '1s'} {' '} {memory || '256m'}
  • ); }