import { Button, ControlGroup, Dialog, DialogBody, DialogFooter, Icon, InputGroup, Tag, } from '@blueprintjs/core'; import { parseMemoryMB, parseTimeMS } from '@hydrooj/utils/lib/common'; 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)}> } rightElement={ms} onChange={(ev) => setTime(`${ev.currentTarget.value}ms`)} placeholder={`Inherit (${parseTimeMS(props.time, false) || '1000'})`} value={ctime ? parseTimeMS(ctime, false).toString() || '' : ''} /> } rightElement={MB} onChange={(ev) => setMemory(`${ev.currentTarget.value}MB`)} placeholder={`Inherit (${parseMemoryMB(props.memory, false) || '256'})`} value={cmemory ? parseMemoryMB(cmemory, false).toString() || '' : ''} /> } 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)}> } rightElement={ms} onChange={(ev) => setTime(`${ev.currentTarget.value}ms`)} placeholder="1000" value={ctime ? parseTimeMS(ctime, false).toString() || '' : ''} /> } rightElement={MB} onChange={(ev) => setMemory(`${ev.currentTarget.value}MB`)} placeholder="256" value={cmemory ? parseMemoryMB(cmemory, false).toString() || '' : ''} /> } />
  • setOpen(true)}>
       {time || '1s'} {' '} {memory || '256MB'}
  • ); }