import {
Button, ControlGroup,
Dialog, DialogBody, DialogFooter,
Icon, InputGroup, Tag,
} from '@blueprintjs/core';
import { parseMemoryMB, parseTimeMS } from '@hydrooj/utils/lib/common';
import { isEqual } from 'lodash';
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { i18n } from 'vj/utils';
import CustomSelectAutoComplete from '../../autocomplete/components/CustomSelectAutoComplete';
import { RootState } from '../reducer';
interface SubtaskSettingsProps {
subtaskIds: number[];
subtaskId: number;
time: string;
memory: string;
}
export function SubtaskSettings(props: SubtaskSettingsProps) {
const [open, setOpen] = React.useState(false);
const [depsOpen, setDepsOpen] = React.useState(false);
const subtaskIds = props.subtaskIds.filter((i) => i !== props.subtaskId);
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 deps = useSelector((state: RootState) => state.config.subtasks.find((i) => i.id === props.subtaskId).if || [], isEqual);
const type = useSelector((state: RootState) => state.config.subtasks.find((i) => i.id === props.subtaskId).type || 'min');
const [ctime, setTime] = React.useState(time);
const [cmemory, setMemory] = React.useState(memory);
const [cscore, setScore] = React.useState(score);
const [cdeps, setDeps] = React.useState(deps.join(', '));
const [ctype, setType] = React.useState(type);
const dispatch = useDispatch();
useEffect(() => {
dispatch({
type: 'problemconfig/updateSubtaskConfig',
id: props.subtaskId,
payload: {
type: ctype,
},
});
}, [ctype]);
function onConfirm() {
dispatch({
type: 'problemconfig/updateSubtaskConfig',
id: props.subtaskId,
payload: {
time: ctime,
memory: cmemory,
score: cscore,
if: cdeps.split(',').map((i) => i.trim()).filter((i) => +i).map((i) => +i),
},
});
setOpen(false);
setDepsOpen(false);
}
return (<>
setOpen(true)}>
{time || props.time || '1s'}
{memory || props.memory || '256m'}
{' '}
{score || 0}
setDepsOpen(true)}>
{i18n('Dependencies')}: {deps.length ? deps.join(', ') : i18n('(None)')}
{i18n('Scoring method')}
>);
}
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(true)}>
{time || '1s'}
{' '}
{memory || '256MB'}
>);
}