Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import * as Yup from 'yup';
import { Group } from '../../../api/apiDataTypes';
import { applicationsStore } from '../../../stores/Stores';
import { DEFAULT_TIMEZONE } from '../../common/TimezonePicker';
import { MAX_UPDATES_PER_TIME_PERIOD } from '../GroupItem';
import GroupDetailsForm from './GroupDetailsForm';
import GroupPolicyForm from './GroupPolicyForm';

Expand Down Expand Up @@ -68,7 +69,8 @@ export default function GroupEditDialog(props: GroupEditDialogProps) {
policy_updates_enabled: values.updatesEnabled,
policy_safe_mode: values.safeMode,
policy_office_hours: values.onlyOfficeHours,
policy_max_updates_per_period: parseInt(values.maxUpdates),
policy_max_updates_per_period: values.updatesUnlimited
? Max_UPDATES_PER_TIME_PERIOD : parseInt(values.maxUpdates),
Comment on lines +72 to +73
policy_period_interval: updatesPeriodPolicy,
policy_update_timeout: updatesTimeoutPolicy,
};
Expand Down Expand Up @@ -188,7 +190,11 @@ export default function GroupEditDialog(props: GroupEditDialogProps) {
name: maxCharacters(50, true).required(),
track: maxCharacters(256),
description: maxCharacters(250),
maxUpdates: positiveNum(),
maxUpdates: Yup.number(). when('updatesUnlimited', {
is: true,
then: schema => schema.notRequired(),
otherwise: () => positiveNum(),
}),
Comment on lines +193 to +197
updatesPeriodRange: positiveNum(),
updatesTimeout: positiveNum(),
});
Expand All @@ -205,6 +211,7 @@ export default function GroupEditDialog(props: GroupEditDialogProps) {
track: '',
appID: appID,
maxUpdates: 1,
updatesUnlimited: false,
updatesPeriodRange: 1,
updatesPeriodUnit: 'hours',
updatesTimeout: 1,
Expand All @@ -231,6 +238,7 @@ export default function GroupEditDialog(props: GroupEditDialogProps) {
onlyOfficeHours: group.policy_office_hours,
safeMode: group.policy_safe_mode,
maxUpdates: group.policy_max_updates_per_period,
updatesUnlimited: group.policy_max_updates_per_period >= MAX_UPDATES_PER_TIME_PERIOD,
channel: group.channel ? group.channel.id : '',
updatesPeriodRange: currentUpdatesPeriodRange,
updatesPeriodUnit: currentUpdatesPeriodUnit,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,22 @@ export default function GroupPolicyForm(props: GroupPolicyFormProps) {
</Grid>
</Grid>
</Box>
<Box mt={1}>
<FormControlLabel
label={t('groups|unlimited_updates_lower')}
control={
<Field
name="updatesUnlimited"
component={Switch}
color="primary"
checked={values.updatesUnlimited}
onChange={(e: any) => {
setFieldValue('updatesUnlimited', e.target.checked);
}}
/>
}
/>
</Box>
<Box my={2}>
<Grid container spacing={2} justifyContent="space-between" alignItems="center" size={12}>
<Grid size={5}>
Expand All @@ -129,7 +145,8 @@ export default function GroupPolicyForm(props: GroupPolicyFormProps) {
margin="dense"
type="number"
fullWidth
inputProps={{ min: 0 }}
disabled={values.updatesUnlimited}
inputProps={{ min: 1 }}
/>
</Box>
</Grid>
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/components/Groups/GroupItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import MoreMenu from '../common/MoreMenu';
import VersionProgressBar from '../common/VersionBreakdownBar';

// From this number, we stop rate limiting in the backend
const MAX_UPDATES_PER_TIME_PERIOD = 900000;
export const MAX_UPDATES_PER_TIME_PERIOD = 900000;

export function formatUpdateLimits(t: TFunction, group: Group) {
if (group.policy_max_updates_per_period >= MAX_UPDATES_PER_TIME_PERIOD) {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/i18n/locales/en/groups.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"safe_mode_lower": "Safe mode",
"status_breakdown": "Status Breakdown",
"track_identifier": "Track (identifier for clients, filled with the group ID if omitted)",
"unlimited_updates_lower": "Unlimited updates",
"update_policy_unlimited": "Unlimited number of parallel updates",
"update": "Update",
"update_limits": "Update Limits",
Expand Down