mirror of
https://github.com/portainer/portainer.git
synced 2025-08-09 15:55:23 +02:00
fix(edge/update): remove schedule date for old envs [EE-3023] (#8315)
This commit is contained in:
parent
c9aae27b29
commit
851a3346a9
7 changed files with 57 additions and 50 deletions
|
@ -4,7 +4,6 @@ import { useRouter } from '@uirouter/react';
|
|||
|
||||
import { notifySuccess } from '@/portainer/services/notifications';
|
||||
import { withLimitToBE } from '@/react/hooks/useLimitToBE';
|
||||
import { isoDate } from '@/portainer/filters/filters';
|
||||
|
||||
import { PageHeader } from '@@/PageHeader';
|
||||
import { Widget } from '@@/Widget';
|
||||
|
@ -21,6 +20,7 @@ import { useList } from '../queries/list';
|
|||
import { NameField } from '../common/NameField';
|
||||
import { EdgeGroupsField } from '../common/EdgeGroupsField';
|
||||
import { BetaAlert } from '../common/BetaAlert';
|
||||
import { defaultValue } from '../common/ScheduledTimeField';
|
||||
|
||||
export default withLimitToBE(CreateView);
|
||||
|
||||
|
@ -30,7 +30,7 @@ function CreateView() {
|
|||
groupIds: [],
|
||||
type: ScheduleType.Update,
|
||||
version: '',
|
||||
scheduledTime: isoDate(Date.now() + 24 * 60 * 60 * 1000),
|
||||
scheduledTime: defaultValue(),
|
||||
};
|
||||
|
||||
const schedulesQuery = useList();
|
||||
|
|
|
@ -25,6 +25,10 @@ export function ScheduledTimeField({ disabled }: Props) {
|
|||
|
||||
const dateValue = useMemo(() => parseIsoDate(value), [value]);
|
||||
|
||||
if (!value) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<FormControl label="Schedule date & time" errors={error}>
|
||||
{!disabled ? (
|
||||
|
@ -64,6 +68,10 @@ export function timeValidation() {
|
|||
);
|
||||
}
|
||||
|
||||
export function defaultValue() {
|
||||
return isoDate(Date.now() + 24 * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
function isValidDate(date: Date) {
|
||||
return date instanceof Date && !Number.isNaN(date.valueOf());
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { useFormikContext } from 'formik';
|
||||
import semverCompare from 'semver-compare';
|
||||
import _ from 'lodash';
|
||||
import { useEffect } from 'react';
|
||||
|
||||
import { EdgeTypes, EnvironmentId } from '@/react/portainer/environments/types';
|
||||
import { useEnvironmentList } from '@/react/portainer/environments/queries/useEnvironmentList';
|
||||
|
@ -10,10 +11,10 @@ import { TextTip } from '@@/Tip/TextTip';
|
|||
import { FormValues } from './types';
|
||||
import { useEdgeGroupsEnvironmentIds } from './useEdgeGroupsEnvironmentIds';
|
||||
import { VersionSelect } from './VersionSelect';
|
||||
import { ScheduledTimeField } from './ScheduledTimeField';
|
||||
import { defaultValue, ScheduledTimeField } from './ScheduledTimeField';
|
||||
|
||||
export function UpdateScheduleDetailsFieldset() {
|
||||
const { values } = useFormikContext<FormValues>();
|
||||
const { values, setFieldValue } = useFormikContext<FormValues>();
|
||||
|
||||
const environmentIdsQuery = useEdgeGroupsEnvironmentIds(values.groupIds);
|
||||
|
||||
|
@ -29,6 +30,14 @@ export function UpdateScheduleDetailsFieldset() {
|
|||
const hasNoTimeZone = environments.some((env) => !env.LocalTimeZone);
|
||||
const hasTimeZone = environments.some((env) => env.LocalTimeZone);
|
||||
|
||||
useEffect(() => {
|
||||
if (!hasTimeZone) {
|
||||
setFieldValue('scheduledTime', '');
|
||||
} else if (!values.scheduledTime) {
|
||||
setFieldValue('scheduledTime', defaultValue());
|
||||
}
|
||||
}, [setFieldValue, hasTimeZone, values.scheduledTime]);
|
||||
|
||||
return (
|
||||
<>
|
||||
{edgeGroupsEnvironmentIds.length > 0 ? (
|
||||
|
|
|
@ -1,27 +1,32 @@
|
|||
import { array, object, string } from 'yup';
|
||||
import { array, object, SchemaOf, string } from 'yup';
|
||||
|
||||
import { parseIsoDate } from '@/portainer/filters/filters';
|
||||
|
||||
import { EdgeUpdateSchedule, ScheduleType } from '../types';
|
||||
|
||||
import { nameValidation } from './NameField';
|
||||
import { typeValidation } from './ScheduleTypeSelector';
|
||||
import { FormValues } from './types';
|
||||
|
||||
export function validation(
|
||||
schedules: EdgeUpdateSchedule[],
|
||||
currentId?: EdgeUpdateSchedule['id']
|
||||
) {
|
||||
): SchemaOf<FormValues> {
|
||||
return object({
|
||||
groupIds: array().min(1, 'At least one group is required'),
|
||||
name: nameValidation(schedules, currentId),
|
||||
type: typeValidation(),
|
||||
// time: number()
|
||||
// .min(Date.now() / 1000)
|
||||
// .required(),
|
||||
version: string().when('type', {
|
||||
is: ScheduleType.Update,
|
||||
// update type
|
||||
then: (schema) => schema.required('Version is required'),
|
||||
// rollback
|
||||
otherwise: (schema) => schema.required('No rollback options available'),
|
||||
}),
|
||||
scheduledTime: string()
|
||||
.default('')
|
||||
.test('valid', (value) => !value || parseIsoDate(value) !== null),
|
||||
version: string()
|
||||
.default('')
|
||||
.when('type', {
|
||||
is: ScheduleType.Update,
|
||||
// update type
|
||||
then: (schema) => schema.required('Version is required'),
|
||||
// rollback
|
||||
otherwise: (schema) => schema.required('No rollback options available'),
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue