/*
* Copyright (C) 2021 Red Hat, Inc.
* SPDX-License-Identifier: LGPL-2.1-or-later
*/
import cockpit from 'cockpit';
import React, { useState } from 'react';
import { Alert } from "@patternfly/react-core/dist/esm/components/Alert/index.js";
import { Button } from "@patternfly/react-core/dist/esm/components/Button/index.js";
import { DatePicker } from "@patternfly/react-core/dist/esm/components/DatePicker/index.js";
import { Flex, FlexItem } from "@patternfly/react-core/dist/esm/layouts/Flex/index.js";
import { Form, FormGroup, FormAlert } from "@patternfly/react-core/dist/esm/components/Form/index.js";
import { FormSelect, FormSelectOption } from "@patternfly/react-core/dist/esm/components/FormSelect/index.js";
import { InputGroup } from "@patternfly/react-core/dist/esm/components/InputGroup/index.js";
import {
Modal, ModalBody, ModalFooter, ModalHeader
} from '@patternfly/react-core/dist/esm/components/Modal/index.js';
import { Radio } from "@patternfly/react-core/dist/esm/components/Radio/index.js";
import { TextInput } from "@patternfly/react-core/dist/esm/components/TextInput/index.js";
import { TimePicker } from "@patternfly/react-core/dist/esm/components/TimePicker/index.js";
import { MinusIcon, PlusIcon } from '@patternfly/react-icons';
import { FormHelper } from "cockpit-components-form-helper";
import { ModalError } from 'cockpit-components-inline-notification.jsx';
import { useDialogs } from "dialogs.jsx";
import { updateTime } from './services.jsx';
import { create_timer } from './timer-dialog-helpers.js';
import * as timeformat from "timeformat";
import "./timers.scss";
const _ = cockpit.gettext;
export const CreateTimerDialogButton = ({ owner, isLoading }) => {
const Dialogs = useDialogs();
return (
);
};
export const TimerDialog = ({ owner, timer }) => {
const Dialogs = useDialogs();
const [command, setCommand] = useState(timer?.command || '');
const [delay, setDelay] = useState(timer?.delay || 'specific-time');
const [delayNumber, setDelayNumber] = useState(timer?.delayNumber || 0);
const [delayUnit, setDelayUnit] = useState(timer?.delayUnit || 'sec');
const [description, setDescription] = useState(timer?.description || '');
const [dialogError, setDialogError] = useState(undefined);
const [inProgress, setInProgress] = useState(false);
const [name, setName] = useState(timer?.name || '');
const [repeat, setRepeat] = useState(timer?.repeat || 'no');
const [repeatPatterns, setRepeatPatterns] = useState(timer?.repeatPatterns || []);
const [specificTime, setSpecificTime] = useState(timer?.specificTime || "00:00");
const [isSpecificTimeOpen, setSpecificTimeOpen] = useState(false);
const [submitted, setSubmitted] = useState(false);
const validationFailed = {};
if (!name.trim().length || !/^[a-zA-Z0-9:_.@-]+$/.test(name))
validationFailed.name = true;
if (!description.trim().length)
validationFailed.description = true;
if (!command.trim().length)
validationFailed.command = true;
if (!/^[0-9]+$/.test(delayNumber))
validationFailed.delayNumber = true;
const timePicker = (idx) => (
setRepeatPatterns(old => {
const arr = [...old];
arr[idx].isOpen = isOpen;
return arr;
})}
menuAppendTo={() => document.body}
onChange={(_, time) => setRepeatPatterns(old => {
const arr = [...old];
arr[idx].time = time;
return arr;
})}
/>
);
function onSubmit(event) {
setSubmitted(true);
if (event)
event.preventDefault();
if (Object.keys(validationFailed).length)
return false;
create_timer({ name, description, command, delay, delayUnit, delayNumber, repeat, specificTime, repeatPatterns, owner })
.then(Dialogs.close, exc => {
setDialogError(exc.message);
setInProgress(false);
});
return false;
}
return (
{dialogError && }
);
};