Skip to content

Commit c93aabd

Browse files
authored
Remove deprecated v4 components, add v5 components (#48)
* update deprecated components in react console * fix tests
1 parent da97840 commit c93aabd

File tree

6 files changed

+150
-155
lines changed

6 files changed

+150
-155
lines changed

packages/module/src/components/AccessConsoles/AccessConsoles.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ describe('AccessConsoles', () => {
8787
expect(screen.getByText('VNC console text')).toBeInTheDocument();
8888

8989
// Open dropdown and select "Serial console" option
90-
await user.click(screen.getByRole('button', { name: 'Options menu' }));
91-
await user.click(screen.getByText('Serial console', { selector: 'button' }));
90+
await user.click(screen.getByRole('button', { name: 'Console type toggle' }));
91+
await user.click(screen.getByText('Serial console'));
9292

9393
// VNC content is no longer visible, and loading contents of the Serial console are visible.
9494
expect(screen.getByText(/Loading/)).toBeInTheDocument();

packages/module/src/components/AccessConsoles/AccessConsoles.tsx

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { css } from '@patternfly/react-styles';
3-
import { Select, SelectOption, SelectOptionObject, SelectVariant } from '@patternfly/react-core/deprecated';
3+
import { Select, SelectOption, MenuToggle, MenuToggleElement, SelectList } from '@patternfly/react-core';
44

55
import { constants } from '../common/constants';
66

@@ -54,9 +54,7 @@ export const AccessConsoles: React.FunctionComponent<AccessConsolesProps> = ({
5454
[DESKTOP_VIEWER_CONSOLE_TYPE]: textDesktopViewerConsole
5555
};
5656
const [type, setType] = React.useState(
57-
preselectedType !== NONE_TYPE
58-
? ({ value: preselectedType, toString: () => typeMap[preselectedType] } as SelectOptionObject)
59-
: null
57+
preselectedType !== NONE_TYPE ? { value: preselectedType, toString: () => typeMap[preselectedType] } : null
6058
);
6159
const [isOpen, setIsOpen] = React.useState(false);
6260

@@ -69,10 +67,31 @@ export const AccessConsoles: React.FunctionComponent<AccessConsolesProps> = ({
6967
}
7068
});
7169

72-
const onToggle = (_event: any, isOpen: boolean) => {
73-
setIsOpen(isOpen);
70+
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
71+
<MenuToggle
72+
ref={toggleRef}
73+
id="pf-v5-c-console__type-selector"
74+
onClick={onToggleClick}
75+
aria-label="Console type toggle"
76+
isExpanded={isOpen}
77+
style={
78+
{
79+
width: '100%'
80+
} as React.CSSProperties
81+
}
82+
>
83+
{type.toString()}
84+
</MenuToggle>
85+
);
86+
87+
const onToggleClick = () => {
88+
setIsOpen(!isOpen);
7489
};
7590

91+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent>, value: string | number) => {
92+
setType(value as unknown as React.SetStateAction<{ value: string; toString: () => string }>);
93+
setIsOpen(false);
94+
};
7695
const selectOptions: any[] = [];
7796

7897
React.Children.toArray(children as React.ReactElement[]).forEach((child: any) => {
@@ -81,33 +100,37 @@ export const AccessConsoles: React.FunctionComponent<AccessConsolesProps> = ({
81100
<SelectOption
82101
key={VNC_CONSOLE_TYPE}
83102
id={VNC_CONSOLE_TYPE}
84-
value={{ value: VNC_CONSOLE_TYPE, toString: () => textVncConsole } as SelectOptionObject}
85-
/>
103+
value={{ value: VNC_CONSOLE_TYPE, toString: () => textVncConsole }}
104+
>
105+
{textVncConsole}
106+
</SelectOption>
86107
);
87108
} else if (isChildOfType(child, SERIAL_CONSOLE_TYPE)) {
88109
selectOptions.push(
89110
<SelectOption
90111
key={SERIAL_CONSOLE_TYPE}
91112
id={SERIAL_CONSOLE_TYPE}
92-
value={{ value: SERIAL_CONSOLE_TYPE, toString: () => textSerialConsole } as SelectOptionObject}
93-
/>
113+
value={{ value: SERIAL_CONSOLE_TYPE, toString: () => textSerialConsole }}
114+
>
115+
{textSerialConsole}
116+
</SelectOption>
94117
);
95118
} else if (isChildOfType(child, DESKTOP_VIEWER_CONSOLE_TYPE)) {
96119
selectOptions.push(
97120
<SelectOption
98121
key={DESKTOP_VIEWER_CONSOLE_TYPE}
99122
id={DESKTOP_VIEWER_CONSOLE_TYPE}
100-
value={{ value: DESKTOP_VIEWER_CONSOLE_TYPE, toString: () => textDesktopViewerConsole } as SelectOptionObject}
101-
/>
123+
value={{ value: DESKTOP_VIEWER_CONSOLE_TYPE, toString: () => textDesktopViewerConsole }}
124+
>
125+
{textDesktopViewerConsole}
126+
</SelectOption>
102127
);
103128
} else {
104129
const typeText = getChildTypeName(child);
105130
selectOptions.push(
106-
<SelectOption
107-
key={typeText}
108-
id={typeText}
109-
value={{ value: typeText, toString: () => typeText } as SelectOptionObject}
110-
/>
131+
<SelectOption key={typeText} id={typeText} value={{ value: typeText, toString: () => typeText }}>
132+
{typeText}
133+
</SelectOption>
111134
);
112135
}
113136
});
@@ -117,18 +140,13 @@ export const AccessConsoles: React.FunctionComponent<AccessConsolesProps> = ({
117140
<div className={css(styles.consoleActions)}>
118141
<Select
119142
aria-label={textSelectConsoleType}
120-
placeholderText={textSelectConsoleType}
121-
toggleId="pf-v5-c-console__type-selector"
122-
variant={SelectVariant.single}
123-
onSelect={(_, selection, __) => {
124-
setType(selection as SelectOptionObject);
125-
setIsOpen(false);
126-
}}
127-
selections={type}
143+
toggle={toggle}
144+
onSelect={onSelect}
128145
isOpen={isOpen}
129-
onToggle={onToggle}
146+
selected={type}
147+
onOpenChange={(isOpen) => setIsOpen(isOpen)}
130148
>
131-
{selectOptions}
149+
<SelectList>{selectOptions}</SelectList>
132150
</Select>
133151
</div>
134152
)}

packages/module/src/components/AccessConsoles/__snapshots__/AccessConsoles.test.tsx.snap

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,32 +24,22 @@ exports[`AccessConsoles with SerialConsole and VncConsole as children 1`] = `
2424
<div
2525
class="pf-v5-c-console__actions"
2626
>
27-
<div
28-
class="pf-v5-c-select"
29-
data-ouia-component-id="OUIA-Generated-Select-single-1"
30-
data-ouia-component-type="PF5/Select"
31-
data-ouia-safe="true"
27+
<button
28+
aria-expanded="false"
29+
aria-label="Console type toggle"
30+
class="pf-v5-c-menu-toggle"
31+
id="pf-v5-c-console__type-selector"
32+
style="width: 100%;"
33+
type="button"
3234
>
33-
<button
34-
aria-expanded="false"
35-
aria-haspopup="listbox"
36-
aria-label="Options menu"
37-
aria-labelledby=" pf-v5-c-console__type-selector"
38-
class="pf-v5-c-select__toggle"
39-
id="pf-v5-c-console__type-selector"
40-
type="button"
35+
<span
36+
class="pf-v5-c-menu-toggle__text"
37+
/>
38+
<span
39+
class="pf-v5-c-menu-toggle__controls"
4140
>
42-
<div
43-
class="pf-v5-c-select__toggle-wrapper"
44-
>
45-
<span
46-
class="pf-v5-c-select__toggle-text"
47-
>
48-
Select console type
49-
</span>
50-
</div>
5141
<span
52-
class="pf-v5-c-select__toggle-arrow"
42+
class="pf-v5-c-menu-toggle__toggle-icon"
5343
>
5444
<svg
5545
aria-hidden="true"
@@ -65,8 +55,8 @@ exports[`AccessConsoles with SerialConsole and VncConsole as children 1`] = `
6555
/>
6656
</svg>
6757
</span>
68-
</button>
69-
</div>
58+
</span>
59+
</button>
7060
</div>
7161
</div>
7262
</DocumentFragment>
Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import React from 'react';
2-
import {
3-
Dropdown as DropdownDeprecated,
4-
DropdownItem as DropdownItemDeprecated,
5-
DropdownToggle as DropdownToggleDeprecated
6-
} from '@patternfly/react-core/deprecated';
2+
import { Dropdown, DropdownItem, DropdownList, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
73

84
export interface SpiceActionsProps extends React.HTMLProps<HTMLDivElement> {
95
/** Callback for when Ctrl+Alt+Delete item is selected */
@@ -20,19 +16,31 @@ export const SpiceActions: React.FunctionComponent<SpiceActionsProps> = ({
2016
}: SpiceActionsProps) => {
2117
const [isOpen, setIsOpen] = React.useState(false);
2218

19+
const onToggleClick = () => {
20+
setIsOpen(!isOpen);
21+
};
22+
23+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent>, _value: string | number) => {
24+
setIsOpen(false);
25+
onCtrlAltDel();
26+
};
27+
2328
return (
24-
<DropdownDeprecated
29+
<Dropdown
2530
id="console-send-shortcut"
26-
onSelect={() => {
27-
setIsOpen(!isOpen);
28-
onCtrlAltDel();
29-
}}
31+
onSelect={onSelect}
3032
isOpen={isOpen}
31-
toggle={
32-
<DropdownToggleDeprecated onToggle={(_event, isDropdownOpen) => setIsOpen(isDropdownOpen)}>{textSendShortcut}</DropdownToggleDeprecated>
33-
}
34-
dropdownItems={[<DropdownItemDeprecated key="ctrl-alt-delete">{textCtrlAltDel}</DropdownItemDeprecated>]}
35-
/>
33+
onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
34+
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
35+
<MenuToggle ref={toggleRef} onClick={onToggleClick} isExpanded={isOpen}>
36+
{textSendShortcut}
37+
</MenuToggle>
38+
)}
39+
>
40+
<DropdownList>
41+
<DropdownItem key="ctrl-alt-delete">{textCtrlAltDel}</DropdownItem>
42+
</DropdownList>
43+
</Dropdown>
3644
);
3745
};
3846
SpiceActions.displayName = 'SpiceActions';

packages/module/src/components/VncConsole/VncActions.tsx

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
import React from 'react';
22
import { css } from '@patternfly/react-styles';
33
import { Button, ButtonVariant } from '@patternfly/react-core';
4-
import {
5-
Dropdown as DropdownDeprecated,
6-
DropdownItem as DropdownItemDeprecated,
7-
DropdownToggle as DropdownToggleDeprecated
8-
} from '@patternfly/react-core/deprecated';
4+
import { Dropdown, DropdownItem, DropdownList, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
95

106
import styles from '@patternfly/react-styles/css/components/Consoles/VncConsole';
117

@@ -29,24 +25,34 @@ export const VncActions: React.FunctionComponent<VncActionProps> = ({
2925
additionalButtons = []
3026
}) => {
3127
const [isOpen, setIsOpen] = React.useState(false);
28+
29+
const onToggleClick = () => {
30+
setIsOpen(!isOpen);
31+
};
32+
33+
const onSelect = (_event: React.MouseEvent<Element, MouseEvent>, _value: string | number) => {
34+
setIsOpen(false);
35+
};
3236
const toolbar = (
3337
<div className={css(styles.consoleActionsVnc)}>
3438
{additionalButtons}
35-
<DropdownDeprecated
39+
<Dropdown
3640
id="pf-v5-c-console__send-shortcut"
37-
onSelect={() => setIsOpen(false)}
38-
toggle={
39-
<DropdownToggleDeprecated id="pf-v5-c-console__actions-vnc-toggle-id" onToggle={() => setIsOpen(!isOpen)}>
40-
{textSendShortcut}
41-
</DropdownToggleDeprecated>
42-
}
4341
isOpen={isOpen}
44-
dropdownItems={[
45-
<DropdownItemDeprecated onClick={onCtrlAltDel} key="ctrl-alt-delete">
42+
onSelect={onSelect}
43+
onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
44+
toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
45+
<MenuToggle ref={toggleRef} onClick={onToggleClick} isExpanded={isOpen}>
46+
{textSendShortcut}
47+
</MenuToggle>
48+
)}
49+
>
50+
<DropdownList>
51+
<DropdownItem onClick={onCtrlAltDel} key="ctrl-alt-delete">
4652
{textCtrlAltDel}
47-
</DropdownItemDeprecated>
48-
]}
49-
/>
53+
</DropdownItem>
54+
</DropdownList>
55+
</Dropdown>
5056
<Button variant={ButtonVariant.secondary} onClick={onDisconnect}>
5157
{textDisconnect}
5258
</Button>

0 commit comments

Comments
 (0)