Skip to content

Commit 23fa3c7

Browse files
bnussman-akamaibnussmanmjac0bs
authored
refactor: [M3-8938] - Update TextField to not depend on ramda (#11306)
* use clamp from linode/ui * move clamping max and min to validation package * add changesets * Add custom validation error messages Thanks! Co-authored-by: Mariah Jacobs <[email protected]> --------- Co-authored-by: Banks Nussman <[email protected]> Co-authored-by: Mariah Jacobs <[email protected]>
1 parent c580bfc commit 23fa3c7

File tree

16 files changed

+162
-55
lines changed

16 files changed

+162
-55
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Tech Stories
3+
---
4+
5+
Refactor components to use `clamp` from `@linode/ui` rather than `ramda` ([#11306](https://github.com/linode/manager/pull/11306))

packages/manager/src/components/Paginate.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { clamp, slice } from 'ramda';
1+
import { clamp } from '@linode/ui';
2+
import { slice } from 'ramda';
23
import * as React from 'react';
34

45
import scrollTo from 'src/utilities/scrollTo';

packages/manager/src/features/Linodes/LinodesDetail/LinodeRescue/StandardRescueDialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Button, Notice, Paper } from '@linode/ui';
1+
import { Button, Notice, Paper, clamp } from '@linode/ui';
22
import { styled, useTheme } from '@mui/material/styles';
33
import { useSnackbar } from 'notistack';
4-
import { assoc, clamp, equals, pathOr } from 'ramda';
4+
import { assoc, equals, pathOr } from 'ramda';
55
import * as React from 'react';
66

77
import { ActionsPanel } from 'src/components/ActionsPanel/ActionsPanel';

packages/manager/src/features/Longview/LongviewLanding/Gauges/CPU.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { Typography } from '@linode/ui';
1+
import { Typography, clamp } from '@linode/ui';
22
import { useTheme } from '@mui/material/styles';
3-
import { clamp, pathOr } from 'ramda';
3+
import { pathOr } from 'ramda';
44
import * as React from 'react';
55

66
import { GaugePercent } from 'src/components/GaugePercent/GaugePercent';
@@ -89,7 +89,7 @@ export const normalizeValue = (value: number, numCores: number) => {
8989
if (numCores < 0) {
9090
return 0;
9191
}
92-
const clamped = clamp(0, 100 * numCores)(value);
92+
const clamped = clamp(0, 100 * numCores, value);
9393
return Math.round(clamped);
9494
};
9595

packages/manager/src/features/NodeBalancers/NodeBalancerActiveCheck.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ import {
44
TextField,
55
Typography,
66
} from '@linode/ui';
7+
import {
8+
CHECK_ATTEMPTS,
9+
CHECK_INTERVAL,
10+
CHECK_TIMEOUT,
11+
} from '@linode/validation';
712
import Grid from '@mui/material/Unstable_Grid2';
813
import * as React from 'react';
914

@@ -138,6 +143,8 @@ export const ActiveCheck = (props: ActiveCheckProps) => {
138143
errorGroup={forEdit ? `${configIdx}` : undefined}
139144
errorText={errorMap.check_interval}
140145
label="Interval"
146+
max={CHECK_INTERVAL.MAX}
147+
min={CHECK_INTERVAL.MIN}
141148
onChange={onHealthCheckIntervalChange}
142149
type="number"
143150
value={healthCheckInterval}
@@ -159,6 +166,8 @@ export const ActiveCheck = (props: ActiveCheckProps) => {
159166
errorGroup={forEdit ? `${configIdx}` : undefined}
160167
errorText={errorMap.check_timeout}
161168
label="Timeout"
169+
max={CHECK_TIMEOUT.MAX}
170+
min={CHECK_TIMEOUT.MIN}
162171
onChange={onHealthCheckTimeoutChange}
163172
type="number"
164173
value={healthCheckTimeout}
@@ -178,6 +187,8 @@ export const ActiveCheck = (props: ActiveCheckProps) => {
178187
errorGroup={forEdit ? `${configIdx}` : undefined}
179188
errorText={errorMap.check_attempts}
180189
label="Attempts"
190+
max={CHECK_ATTEMPTS.MAX}
191+
min={CHECK_ATTEMPTS.MIN}
181192
onChange={onHealthCheckAttemptsChange}
182193
type="number"
183194
value={healthCheckAttempts}

packages/manager/src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerConfigurations.tsx

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ import { scrollErrorIntoView } from 'src/utilities/scrollErrorIntoView';
3838
import { NodeBalancerConfigPanel } from '../NodeBalancerConfigPanel';
3939
import { lensFrom } from '../NodeBalancerCreate';
4040
import {
41-
clampNumericString,
4241
createNewNodeBalancerConfig,
4342
createNewNodeBalancerConfigNode,
4443
nodeForRequest,
@@ -626,13 +625,13 @@ class NodeBalancerConfigurations extends React.Component<
626625
success={panelMessages[idx]}
627626
>
628627
<NodeBalancerConfigPanel
629-
onHealthCheckAttemptsChange={this.updateStateWithClamp(
628+
onHealthCheckAttemptsChange={this.updateState(
630629
L.healthCheckAttemptsLens
631630
)}
632-
onHealthCheckIntervalChange={this.updateStateWithClamp(
631+
onHealthCheckIntervalChange={this.updateState(
633632
L.healthCheckIntervalLens
634633
)}
635-
onHealthCheckTimeoutChange={this.updateStateWithClamp(
634+
onHealthCheckTimeoutChange={this.updateState(
636635
L.healthCheckTimeoutLens
637636
)}
638637
onHealthCheckTypeChange={this.updateState(
@@ -1080,15 +1079,6 @@ class NodeBalancerConfigurations extends React.Component<
10801079
this.setState(set(lens, value), L && callback ? callback(L) : undefined);
10811080
};
10821081

1083-
updateStateWithClamp = (
1084-
lens: Lens,
1085-
L?: { [key: string]: Lens },
1086-
callback?: (L: { [key: string]: Lens }) => () => void
1087-
) => (value: any) => {
1088-
const clampedValue = clampNumericString(0, Number.MAX_SAFE_INTEGER)(value);
1089-
this.updateState(lens, L, callback)(clampedValue);
1090-
};
1091-
10921082
render() {
10931083
const { nodeBalancerLabel } = this.props;
10941084
const {

packages/manager/src/features/NodeBalancers/utils.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { clamp, compose, filter, isNil, toString } from 'ramda';
1+
import { filter, isNil } from 'ramda';
22

3-
import { defaultNumeric } from 'src/utilities/defaultNumeric';
43
import { getErrorMap } from 'src/utilities/errorUtils';
54

65
import type {
@@ -12,11 +11,6 @@ import type {
1211
import type { APIError } from '@linode/api-v4';
1312
import type { NodeBalancerConfigNode } from '@linode/api-v4/lib/nodebalancers';
1413

15-
export const clampNumericString = (low: number, hi: number) =>
16-
compose(toString, clamp(low, hi), (value: number) =>
17-
defaultNumeric(0, value)
18-
) as (value: any) => string;
19-
2014
export const createNewNodeBalancerConfigNode = (): NodeBalancerConfigNodeFields => ({
2115
address: '',
2216
label: '',

packages/manager/src/utilities/defaultNumeric.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/ui": Tech Stories
3+
---
4+
5+
Update `TextField` to not depend on `ramda` ([#11306](https://github.com/linode/manager/pull/11306))

packages/ui/src/components/TextField/TextField.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1+
import KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown';
2+
import { useTheme } from '@mui/material/styles';
3+
import { default as _TextField } from '@mui/material/TextField';
4+
import React from 'react';
5+
6+
import { clamp, convertToKebabCase } from '../../utilities';
17
import { Box } from '../Box';
28
import { CircleProgress } from '../CircleProgress';
39
import { FormHelperText } from '../FormHelperText';
410
import { InputAdornment } from '../InputAdornment';
511
import { InputLabel } from '../InputLabel';
612
import { TooltipIcon } from '../TooltipIcon';
7-
import { convertToKebabCase } from '../../utilities';
8-
import KeyboardArrowDown from '@mui/icons-material/KeyboardArrowDown';
9-
import { useTheme } from '@mui/material/styles';
10-
import { default as _TextField } from '@mui/material/TextField';
11-
import { clamp } from 'ramda';
12-
import * as React from 'react';
1313

1414
import type { BoxProps } from '../Box';
15-
import { TooltipProps } from '../Tooltip';
15+
import type { TooltipProps } from '../Tooltip';
1616
import type { StandardTextFieldProps } from '@mui/material/TextField';
1717

1818
interface BaseProps {

0 commit comments

Comments
 (0)