Skip to content

Commit 94f9baf

Browse files
committed
refactor(web-react): introduce standalone ValidationText and update all components #DS-2398
Drop Field components as they are all already split into standalone components.
1 parent eeb7752 commit 94f9baf

File tree

80 files changed

+837
-324
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+837
-324
lines changed

packages/web-react/package.json

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,6 @@
318318
"require": "./dist/components/EmptyState/index.cjs",
319319
"default": "./dist/components/EmptyState/index.js"
320320
},
321-
"./components/Field": {
322-
"types": "./dist/components/Field/index.d.ts",
323-
"development": "./src/components/Field/index.ts",
324-
"production": "./dist/components/Field/index.js",
325-
"import": "./dist/components/Field/index.js",
326-
"require": "./dist/components/Field/index.cjs",
327-
"default": "./dist/components/Field/index.js"
328-
},
329321
"./components/FieldGroup": {
330322
"types": "./dist/components/FieldGroup/index.d.ts",
331323
"development": "./src/components/FieldGroup/index.ts",

packages/web-react/src/components/Checkbox/Checkbox.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@ import React, { type ForwardedRef, forwardRef } from 'react';
55
import { PropsProvider } from '../../context';
66
import { useAriaDescribedBy, useAriaIds, useStyleProps } from '../../hooks';
77
import { FormFieldVariants, type ForwardRefComponent, type SpiritCheckboxProps } from '../../types';
8-
import { ValidationText } from '../Field';
9-
import { useValidationTextRole } from '../Field/useValidationTextRole';
108
import { HelperText } from '../HelperText';
119
import { Label } from '../Label';
10+
import { ValidationText, useValidationTextRole } from '../ValidationText';
1211
import { useCheckboxStyleProps } from './useCheckboxStyleProps';
1312

1413
const _Checkbox = (props: SpiritCheckboxProps, ref: ForwardedRef<HTMLInputElement>): JSX.Element => {
@@ -40,11 +39,11 @@ const _Checkbox = (props: SpiritCheckboxProps, ref: ForwardedRef<HTMLInputElemen
4039
return (
4140
<PropsProvider
4241
value={{
43-
formFieldVariant: FormFieldVariants.INLINE,
42+
formFieldVariant: isItem ? FormFieldVariants.ITEM : FormFieldVariants.INLINE,
4443
isDisabled,
45-
isItem,
4644
isLabelHidden,
4745
isRequired,
46+
validationState,
4847
}}
4948
>
5049
<div style={styleProps.style} className={classNames(classProps.root, styleProps.className)}>
@@ -65,7 +64,6 @@ const _Checkbox = (props: SpiritCheckboxProps, ref: ForwardedRef<HTMLInputElemen
6564
<HelperText id={`${id}__helperText`} registerAria={register} helperText={helperText} />
6665
{validationState && (
6766
<ValidationText
68-
UNSAFE_className={classProps.validationText}
6967
id={`${id}__validationText`}
7068
{...(hasValidationIcon && { hasValidationStateIcon: validationState })}
7169
validationText={validationText}

packages/web-react/src/components/Checkbox/__tests__/Checkbox.test.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
stylePropsTest,
1111
validHtmlAttributesTest,
1212
validationStatePropsTest,
13-
validationTextPropsTest,
1413
} from '@local/tests';
1514
import Checkbox from '../Checkbox';
1615

@@ -27,8 +26,6 @@ describe('Checkbox', () => {
2726

2827
validationStatePropsTest(Checkbox, 'Checkbox--');
2928

30-
validationTextPropsTest(Checkbox, '.Checkbox__validationText');
31-
3229
requiredPropsTest(Checkbox, 'checkbox', 'id', 'test-checkbox');
3330

3431
validHtmlAttributesTest(Checkbox);

packages/web-react/src/components/Checkbox/__tests__/useCheckboxStyleProps.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ describe('useCheckboxStyleProps', () => {
1212
root: 'Checkbox Checkbox--inputPositionStart',
1313
text: 'Checkbox__text',
1414
input: 'Checkbox__input',
15-
validationText: 'Checkbox__validationText',
1615
});
1716
});
1817

packages/web-react/src/components/Checkbox/useCheckboxStyleProps.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,21 @@ export interface CheckboxStyles {
99
root: string;
1010
text: string;
1111
input: string;
12-
validationText: string;
1312
};
1413
/** props to be passed to the input element */
1514
props: CheckboxProps;
1615
}
1716

1817
export function useCheckboxStyleProps(props: SpiritCheckboxProps): CheckboxStyles {
19-
const { inputPosition = InputPositions.START, isItem, validationState, ...restProps } = props;
20-
const { isDisabled } = restProps;
18+
const { inputPosition = InputPositions.START, validationState, ...restProps } = props;
19+
const { isDisabled, isItem } = restProps;
2120

2221
const checkboxClass = useClassNamePrefix('Checkbox');
2322
const checkboxDisabledClass = `${checkboxClass}--disabled`;
2423
const checkboxItemClass = `${checkboxClass}--item`;
2524
const checkboxInputClass = `${checkboxClass}__input`;
2625
const checkboxInputPositionClass = useInputPositionClass(checkboxClass, inputPosition);
2726
const checkboxTextClass = `${checkboxClass}__text`;
28-
const checkboxValidationTextClass = `${checkboxClass}__validationText`;
2927
const checkboxValidationClass = `${checkboxClass}--${validationState}`;
3028

3129
const rootStyles = classNames(checkboxClass, {
@@ -40,7 +38,6 @@ export function useCheckboxStyleProps(props: SpiritCheckboxProps): CheckboxStyle
4038
root: rootStyles,
4139
text: checkboxTextClass,
4240
input: checkboxInputClass,
43-
validationText: checkboxValidationTextClass,
4441
},
4542
props: {
4643
...restProps,

packages/web-react/src/components/Field/README.md

Lines changed: 0 additions & 79 deletions
This file was deleted.

packages/web-react/src/components/Field/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

packages/web-react/src/components/Field/types.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

packages/web-react/src/components/FieldGroup/FieldGroup.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import classNames from 'classnames';
44
import React from 'react';
55
import { PropsProvider } from '../../context';
66
import { useAriaDescribedBy, useAriaIds, useStyleProps } from '../../hooks';
7-
import { FormFieldVariants, type SpiritFieldGroupProps } from '../../types';
8-
import { ValidationText } from '../Field';
9-
import { useValidationTextRole } from '../Field/useValidationTextRole';
7+
import { type SpiritFieldGroupProps } from '../../types';
108
import { HelperText } from '../HelperText';
9+
import { Label } from '../Label';
10+
import { ValidationText, useValidationTextRole } from '../ValidationText';
1111
import { VisuallyHidden } from '../VisuallyHidden';
1212
import { useFieldGroupStyleProps } from './useFieldGroupStyleProps';
1313

@@ -38,7 +38,13 @@ const FieldGroup = (props: SpiritFieldGroupProps) => {
3838
});
3939

4040
return (
41-
<PropsProvider value={{ isDisabled, formFieldVariant: FormFieldVariants.BOX }}>
41+
<PropsProvider
42+
value={{
43+
isDisabled,
44+
isRequired,
45+
validationState,
46+
}}
47+
>
4248
<fieldset
4349
{...transferProps}
4450
{...styleProps}
@@ -48,17 +54,16 @@ const FieldGroup = (props: SpiritFieldGroupProps) => {
4854
>
4955
<VisuallyHidden elementType="legend">{label}</VisuallyHidden>
5056
{!isLabelHidden && (
51-
<div className={classProps.label} aria-hidden="true">
57+
<Label elementType="div" aria-hidden="true">
5258
{label}
53-
</div>
59+
</Label>
5460
)}
5561
<div className={classProps.fields}>{children}</div>
5662
<HelperText id={`${id}__helperText`} registerAria={register} helperText={helperText} />
5763
{validationState && (
5864
<ValidationText
59-
UNSAFE_className={classProps.validationText}
65+
id={`${id}__validationText`}
6066
{...(hasValidationIcon && { hasValidationStateIcon: validationState })}
61-
id={`${id}__helperText`}
6267
validationText={validationText}
6368
registerAria={register}
6469
role={validationTextRole}

packages/web-react/src/components/FieldGroup/__tests__/FieldGroup.test.tsx

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
stylePropsTest,
99
validHtmlAttributesTest,
1010
validationStatePropsTest,
11-
validationTextPropsTest,
1211
} from '@local/tests';
1312
import FieldGroup from '../FieldGroup';
1413

@@ -27,8 +26,6 @@ describe('FieldGroup', () => {
2726

2827
validationStatePropsTest(FieldGroup, 'FieldGroup--');
2928

30-
validationTextPropsTest(FieldGroup, '.FieldGroup__validationText');
31-
3229
stylePropsTest(
3330
(props) => <FieldGroup {...props} label="Label" id="field-group-example" data-testid="test-field-group" />,
3431
'test-field-group',
@@ -55,27 +52,13 @@ describe('FieldGroup', () => {
5552

5653
expect(label).toHaveTextContent('Label');
5754

58-
const labelDiv = fieldGroup.querySelector('.FieldGroup__label') as HTMLElement;
59-
60-
expect(labelDiv).toHaveTextContent('Label');
61-
6255
const list = fieldGroup.querySelector('.FieldGroup__fields') as HTMLElement;
6356
const items = list.querySelectorAll('div');
6457

6558
expect(items).toHaveLength(3);
6659
expect(items[0]).toHaveTextContent('Item');
6760
});
6861

69-
it('should have className isRequired', () => {
70-
render(
71-
<FieldGroup id="example-field-group" label="Label" isRequired>
72-
{itemList}
73-
</FieldGroup>,
74-
);
75-
76-
expect(screen.getAllByText('Label')[1]).toHaveClass('FieldGroup__label--required');
77-
});
78-
7962
it('should have className isDisabled', () => {
8063
render(
8164
<FieldGroup id="example-field-group" label="Label" isDisabled>

0 commit comments

Comments
 (0)