Skip to content
Open
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
3 changes: 1 addition & 2 deletions packages/react-core/src/components/Label/Label.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,8 @@ export const Label: React.FunctionComponent<LabelProps> = ({
if (isEditableActive && key === 'Escape') {
event.preventDefault();
event.stopImmediatePropagation();
// Reset div text to initial children prop - pre-edit
setCurrValue(children);
if (editableInputRef.current.value) {
editableInputRef.current.value = children as string;
onEditCancel && onEditCancel(event, children as string);
}
setIsEditableActive(false);
Expand Down
38 changes: 38 additions & 0 deletions packages/react-core/src/components/Label/__tests__/Label.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,44 @@ describe('Label', () => {
expect(asFragment()).toMatchSnapshot();
});

test('editable label discards the draft text when the edit is canceled with escape', async () => {
const user = userEvent.setup();

render(
<Label onEditCancel={jest.fn()} onEditComplete={jest.fn()} isEditable>
Something
</Label>
);

await user.click(screen.getByRole('button', { name: 'Something' }));
await user.type(screen.getByRole('textbox'), ' else');
expect(screen.getByRole('textbox')).toHaveValue('Something else');

await user.keyboard('{Escape}');
expect(screen.getByRole('button', { name: 'Something' })).toBeInTheDocument();

// Reopening the editor must show the original text, not the discarded draft
await user.click(screen.getByRole('button', { name: 'Something' }));
expect(screen.getByRole('textbox')).toHaveValue('Something');
});

test('editable label calls onEditCancel with the previous text when the edit is canceled with escape', async () => {
const user = userEvent.setup();
const onEditCancel = jest.fn();

render(
<Label onEditCancel={onEditCancel} isEditable>
Something
</Label>
);

await user.click(screen.getByRole('button', { name: 'Something' }));
await user.type(screen.getByRole('textbox'), ' else');
await user.keyboard('{Escape}');

expect(onEditCancel).toHaveBeenCalledWith(expect.anything(), 'Something');
});

test('renders with variant overflow and type is set to button ', () => {
const { asFragment } = render(<Label variant="overflow">Something</Label>);
expect(screen.getByRole('button')).toHaveAttribute('type', 'button');
Expand Down
Loading