mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Modals: Be more consistent with Modal cancel button styling (#68302)
* Modals: Be more consistent with Modal cancel button styling * Update docs * Fix tests * fixing tests
This commit is contained in:
parent
9cd585d533
commit
debf04eb2c
@ -97,7 +97,7 @@ export const ConfirmModal = ({
|
|||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
<Button variant={dismissVariant} onClick={onDismiss}>
|
<Button variant={dismissVariant} onClick={onDismiss} fill="outline">
|
||||||
{dismissText}
|
{dismissText}
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
|
@ -6,7 +6,26 @@ import { ModalTabsHeader } from './ModalTabsHeader';
|
|||||||
|
|
||||||
# Modal
|
# Modal
|
||||||
|
|
||||||
Generic Modal component
|
Generic Modal component.
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
|
||||||
|
```tsx
|
||||||
|
<Modal title="title" isOpen={true}>
|
||||||
|
<div>Some body</div>
|
||||||
|
<Modal.ButtonRow>
|
||||||
|
<Button variant="secondary" fill="outline">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
|
<Button>Save</Button>
|
||||||
|
</Modal.ButtonRow>
|
||||||
|
</Modal>
|
||||||
|
```
|
||||||
|
|
||||||
|
For buttons at the bottom of the modal you should always use:
|
||||||
|
|
||||||
|
- Modal.ButtonRow - this makes sure the Buttons are right aligned
|
||||||
|
- If you have a Cancel button use fill="outline" and variant="secondary" and place it on the left side of any other button.
|
||||||
|
|
||||||
<ArgTypes of={Modal} />
|
<ArgTypes of={Modal} />
|
||||||
|
|
||||||
|
@ -62,10 +62,10 @@ const useAddPolicyModal = (
|
|||||||
onSubmit={(newRoute) => parentRoute && handleAdd(newRoute, parentRoute)}
|
onSubmit={(newRoute) => parentRoute && handleAdd(newRoute, parentRoute)}
|
||||||
actionButtons={
|
actionButtons={
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
<Button type="submit">Save policy</Button>
|
<Button type="button" variant="secondary" onClick={handleDismiss} fill="outline">
|
||||||
<Button type="button" variant="secondary" onClick={handleDismiss}>
|
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button type="submit">Save policy</Button>
|
||||||
</Modal.ButtonRow>
|
</Modal.ButtonRow>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@ -121,10 +121,10 @@ const useEditPolicyModal = (
|
|||||||
route={route}
|
route={route}
|
||||||
actionButtons={
|
actionButtons={
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
<Button type="submit">Update default policy</Button>
|
<Button type="button" variant="secondary" onClick={handleDismiss} fill="outline">
|
||||||
<Button type="button" variant="secondary" onClick={handleDismiss}>
|
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button type="submit">Update default policy</Button>
|
||||||
</Modal.ButtonRow>
|
</Modal.ButtonRow>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@ -136,10 +136,10 @@ const useEditPolicyModal = (
|
|||||||
onSubmit={handleSave}
|
onSubmit={handleSave}
|
||||||
actionButtons={
|
actionButtons={
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
<Button type="submit">Update policy</Button>
|
<Button type="button" variant="secondary" onClick={handleDismiss} fill="outline">
|
||||||
<Button type="button" variant="secondary" onClick={handleDismiss}>
|
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button type="submit">Update policy</Button>
|
||||||
</Modal.ButtonRow>
|
</Modal.ButtonRow>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
@ -230,6 +230,9 @@ export const DashboardPicker = ({ dashboardUid, panelId, isOpen, onChange, onDis
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
|
<Button type="button" variant="secondary" onClick={onDismiss} fill="text">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
variant="primary"
|
variant="primary"
|
||||||
@ -242,9 +245,6 @@ export const DashboardPicker = ({ dashboardUid, panelId, isOpen, onChange, onDis
|
|||||||
>
|
>
|
||||||
Confirm
|
Confirm
|
||||||
</Button>
|
</Button>
|
||||||
<Button type="button" variant="secondary" onClick={onDismiss}>
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
</Modal.ButtonRow>
|
</Modal.ButtonRow>
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
|
@ -374,6 +374,15 @@ export function EditCloudGroupModal(props: ModalProps): React.ReactElement {
|
|||||||
)}
|
)}
|
||||||
<div className={styles.modalButtons}>
|
<div className={styles.modalButtons}>
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
|
<Button
|
||||||
|
variant="secondary"
|
||||||
|
type="button"
|
||||||
|
disabled={loading}
|
||||||
|
onClick={() => onClose(false)}
|
||||||
|
fill="outline"
|
||||||
|
>
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
type="button"
|
type="button"
|
||||||
disabled={!isDirty || loading}
|
disabled={!isDirty || loading}
|
||||||
@ -381,9 +390,6 @@ export function EditCloudGroupModal(props: ModalProps): React.ReactElement {
|
|||||||
>
|
>
|
||||||
{loading ? 'Saving...' : 'Save evaluation interval'}
|
{loading ? 'Saving...' : 'Save evaluation interval'}
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="secondary" type="button" disabled={loading} onClick={() => onClose(false)}>
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
</Modal.ButtonRow>
|
</Modal.ButtonRow>
|
||||||
</div>
|
</div>
|
||||||
{!hasSomeNoRecordingRules && <div>This group does not contain alert rules.</div>}
|
{!hasSomeNoRecordingRules && <div>This group does not contain alert rules.</div>}
|
||||||
|
@ -45,7 +45,7 @@ export const MoveModal = ({ onConfirm, onDismiss, selectedItems, ...props }: Pro
|
|||||||
<FolderPicker allowEmpty onChange={({ uid }) => setMoveTarget(uid)} />
|
<FolderPicker allowEmpty onChange={({ uid }) => setMoveTarget(uid)} />
|
||||||
</Field>
|
</Field>
|
||||||
<Modal.ButtonRow>
|
<Modal.ButtonRow>
|
||||||
<Button onClick={onDismiss} variant="secondary">
|
<Button onClick={onDismiss} variant="secondary" fill="outline">
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
<Button disabled={moveTarget === undefined} onClick={onMove} variant="primary">
|
<Button disabled={moveTarget === undefined} onClick={onMove} variant="primary">
|
||||||
|
@ -99,7 +99,7 @@ export const ResourcePickerPopover = (props: Props) => {
|
|||||||
<div className={styles.resourcePickerPopoverContent}>
|
<div className={styles.resourcePickerPopoverContent}>
|
||||||
{renderPicker()}
|
{renderPicker()}
|
||||||
<ButtonGroup className={styles.buttonGroup}>
|
<ButtonGroup className={styles.buttonGroup}>
|
||||||
<Button className={styles.button} variant={'secondary'} onClick={() => onClose()}>
|
<Button className={styles.button} variant={'secondary'} onClick={() => onClose()} fill="outline">
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
|
@ -129,12 +129,12 @@ export const MoveToFolderModal = ({ results, onMoveItems, onDismiss }: Props) =>
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<HorizontalGroup justify="flex-end">
|
<HorizontalGroup justify="flex-end">
|
||||||
|
<Button variant="secondary" onClick={onDismiss} fill="outline">
|
||||||
|
Cancel
|
||||||
|
</Button>
|
||||||
<Button icon={moving ? 'fa fa-spinner' : undefined} variant="primary" onClick={moveTo}>
|
<Button icon={moving ? 'fa fa-spinner' : undefined} variant="primary" onClick={moveTo}>
|
||||||
Move
|
Move
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="secondary" onClick={onDismiss}>
|
|
||||||
Cancel
|
|
||||||
</Button>
|
|
||||||
</HorizontalGroup>
|
</HorizontalGroup>
|
||||||
</>
|
</>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
@ -2,7 +2,7 @@ import { cx } from '@emotion/css';
|
|||||||
import React, { useCallback, useEffect, useState } from 'react';
|
import React, { useCallback, useEffect, useState } from 'react';
|
||||||
import { useEffectOnce } from 'react-use';
|
import { useEffectOnce } from 'react-use';
|
||||||
|
|
||||||
import { Alert, Button, LoadingPlaceholder, useStyles2 } from '@grafana/ui';
|
import { Alert, Button, LoadingPlaceholder, Modal, useStyles2 } from '@grafana/ui';
|
||||||
|
|
||||||
import { selectors } from '../../e2e/selectors';
|
import { selectors } from '../../e2e/selectors';
|
||||||
import ResourcePickerData, { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';
|
import ResourcePickerData, { ResourcePickerQueryType } from '../../resourcePicker/resourcePickerData';
|
||||||
@ -261,31 +261,28 @@ const ResourcePicker = ({
|
|||||||
renderAdvanced={renderAdvanced}
|
renderAdvanced={renderAdvanced}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Space v={2} />
|
{errorMessage && (
|
||||||
|
<>
|
||||||
|
<Space v={2} />
|
||||||
|
<Alert severity="error" title="An error occurred while requesting resources from Azure Monitor">
|
||||||
|
{errorMessage}
|
||||||
|
</Alert>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
<Button
|
<Modal.ButtonRow>
|
||||||
disabled={!!errorMessage || !internalSelected.every(isValid)}
|
<Button onClick={onCancel} variant="secondary" fill="outline">
|
||||||
onClick={handleApply}
|
Cancel
|
||||||
data-testid={selectors.components.queryEditor.resourcePicker.apply.button}
|
</Button>
|
||||||
>
|
<Button
|
||||||
Apply
|
disabled={!!errorMessage || !internalSelected.every(isValid)}
|
||||||
</Button>
|
onClick={handleApply}
|
||||||
|
data-testid={selectors.components.queryEditor.resourcePicker.apply.button}
|
||||||
<Space layout="inline" h={1} />
|
>
|
||||||
|
Apply
|
||||||
<Button onClick={onCancel} variant="secondary">
|
</Button>
|
||||||
Cancel
|
</Modal.ButtonRow>
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{errorMessage && (
|
|
||||||
<>
|
|
||||||
<Space v={2} />
|
|
||||||
<Alert severity="error" title="An error occurred while requesting resources from Azure Monitor">
|
|
||||||
{errorMessage}
|
|
||||||
</Alert>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -150,7 +150,7 @@ describe('Render', () => {
|
|||||||
|
|
||||||
it('should display log group selector field', async () => {
|
it('should display log group selector field', async () => {
|
||||||
setup();
|
setup();
|
||||||
await waitFor(async () => expect(await screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(async () => expect(await screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should only display the first two default log groups and show all of them when clicking "Show all" button', async () => {
|
it('should only display the first two default log groups and show all of them when clicking "Show all" button', async () => {
|
||||||
@ -215,8 +215,8 @@ describe('Render', () => {
|
|||||||
|
|
||||||
render(<ConfigEditor {...newProps} />);
|
render(<ConfigEditor {...newProps} />);
|
||||||
|
|
||||||
await waitFor(() => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await waitFor(() =>
|
await waitFor(() =>
|
||||||
expect(screen.getByText('You need to save the data source before adding log groups.')).toBeInTheDocument()
|
expect(screen.getByText('You need to save the data source before adding log groups.')).toBeInTheDocument()
|
||||||
);
|
);
|
||||||
@ -232,7 +232,7 @@ describe('Render', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const { rerender } = render(<ConfigEditor {...newProps} />);
|
const { rerender } = render(<ConfigEditor {...newProps} />);
|
||||||
await waitFor(() => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
const rerenderProps = {
|
const rerenderProps = {
|
||||||
...newProps,
|
...newProps,
|
||||||
options: {
|
options: {
|
||||||
@ -245,7 +245,7 @@ describe('Render', () => {
|
|||||||
};
|
};
|
||||||
rerender(<ConfigEditor {...rerenderProps} />);
|
rerender(<ConfigEditor {...rerenderProps} />);
|
||||||
await waitFor(() => expect(screen.getByText('AWS SDK Default')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('AWS SDK Default')).toBeInTheDocument());
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await waitFor(() =>
|
await waitFor(() =>
|
||||||
expect(
|
expect(
|
||||||
screen.getByText(
|
screen.getByText(
|
||||||
@ -265,7 +265,7 @@ describe('Render', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
const { rerender } = render(<ConfigEditor {...newProps} />);
|
const { rerender } = render(<ConfigEditor {...newProps} />);
|
||||||
await waitFor(() => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
const rerenderProps = {
|
const rerenderProps = {
|
||||||
...newProps,
|
...newProps,
|
||||||
options: {
|
options: {
|
||||||
@ -274,7 +274,7 @@ describe('Render', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
rerender(<ConfigEditor {...rerenderProps} />);
|
rerender(<ConfigEditor {...rerenderProps} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await waitFor(() => expect(screen.getByText('Log group name prefix')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('Log group name prefix')).toBeInTheDocument());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -37,7 +37,7 @@ describe('LogGroupSelection', () => {
|
|||||||
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
||||||
render(<LogGroupsField {...defaultProps} legacyLogGroupNames={['loggroupname']} />);
|
render(<LogGroupsField {...defaultProps} legacyLogGroupNames={['loggroupname']} />);
|
||||||
|
|
||||||
await waitFor(async () => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(async () => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledWith({
|
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledWith({
|
||||||
region: defaultProps.region,
|
region: defaultProps.region,
|
||||||
logGroupNamePrefix: 'loggroupname',
|
logGroupNamePrefix: 'loggroupname',
|
||||||
@ -53,7 +53,7 @@ describe('LogGroupSelection', () => {
|
|||||||
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
||||||
render(<LogGroupsField {...defaultProps} legacyLogGroupNames={['loggroupname', logGroupNamesVariable.name]} />);
|
render(<LogGroupsField {...defaultProps} legacyLogGroupNames={['loggroupname', logGroupNamesVariable.name]} />);
|
||||||
|
|
||||||
await waitFor(async () => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(async () => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledTimes(1);
|
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledTimes(1);
|
||||||
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledWith({
|
expect(defaultProps.datasource.resources.getLogGroups).toHaveBeenCalledWith({
|
||||||
region: defaultProps.region,
|
region: defaultProps.region,
|
||||||
@ -71,7 +71,7 @@ describe('LogGroupSelection', () => {
|
|||||||
.fn()
|
.fn()
|
||||||
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
.mockResolvedValue([{ value: { arn: 'arn', name: 'loggroupname' } }]);
|
||||||
render(<LogGroupsField {...defaultProps} logGroups={[{ arn: 'arn', name: 'loggroupname' }]} />);
|
render(<LogGroupsField {...defaultProps} logGroups={[{ arn: 'arn', name: 'loggroupname' }]} />);
|
||||||
await waitFor(() => expect(screen.getByText('Select Log Groups')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('Select log groups')).toBeInTheDocument());
|
||||||
expect(defaultProps.datasource.resources.getLogGroups).not.toHaveBeenCalled();
|
expect(defaultProps.datasource.resources.getLogGroups).not.toHaveBeenCalled();
|
||||||
expect(defaultProps.onChange).not.toHaveBeenCalled();
|
expect(defaultProps.onChange).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
@ -68,9 +68,9 @@ describe('LogGroupsSelector', () => {
|
|||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
lodash.debounce = originalDebounce;
|
lodash.debounce = originalDebounce;
|
||||||
});
|
});
|
||||||
it('opens a modal with a search field when the Select Log Groups Button is clicked', async () => {
|
it('opens a modal with a search field when the Select log groups Button is clicked', async () => {
|
||||||
render(<LogGroupsSelector {...defaultProps} />);
|
render(<LogGroupsSelector {...defaultProps} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
return defaultProps.fetchLogGroups();
|
return defaultProps.fetchLogGroups();
|
||||||
});
|
});
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
||||||
defer.resolve();
|
defer.resolve();
|
||||||
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
||||||
@ -96,7 +96,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
||||||
defer.resolve();
|
defer.resolve();
|
||||||
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
||||||
@ -108,7 +108,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
it('calls fetchLogGroups with a search phrase when it is typed in the Search Field', async () => {
|
it('calls fetchLogGroups with a search phrase when it is typed in the Search Field', async () => {
|
||||||
const fetchLogGroups = jest.fn(() => defaultProps.fetchLogGroups());
|
const fetchLogGroups = jest.fn(() => defaultProps.fetchLogGroups());
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
await userEvent.type(screen.getByLabelText('log group search'), 'something');
|
await userEvent.type(screen.getByLabelText('log group search'), 'something');
|
||||||
await waitFor(() => screen.getByDisplayValue('something'));
|
await waitFor(() => screen.getByDisplayValue('something'));
|
||||||
@ -129,7 +129,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
return defaultProps.fetchLogGroups();
|
return defaultProps.fetchLogGroups();
|
||||||
});
|
});
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
expect(screen.getByText('Loading...')).toBeInTheDocument();
|
||||||
firstCall.resolve();
|
firstCall.resolve();
|
||||||
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
await waitFor(() => expect(screen.queryByText('Loading...')).not.toBeInTheDocument());
|
||||||
@ -147,7 +147,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
it('shows a log group as checked after the user checks it', async () => {
|
it('shows a log group as checked after the user checks it', async () => {
|
||||||
const onChange = jest.fn();
|
const onChange = jest.fn();
|
||||||
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
expect(screen.getByLabelText('logGroup2')).not.toBeChecked();
|
expect(screen.getByLabelText('logGroup2')).not.toBeChecked();
|
||||||
await userEvent.click(screen.getByLabelText('logGroup2'));
|
await userEvent.click(screen.getByLabelText('logGroup2'));
|
||||||
@ -157,7 +157,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
it('calls onChange with the selected log group when checked and the user clicks the Add button', async () => {
|
it('calls onChange with the selected log group when checked and the user clicks the Add button', async () => {
|
||||||
const onChange = jest.fn();
|
const onChange = jest.fn();
|
||||||
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
await userEvent.click(screen.getByLabelText('logGroup2'));
|
await userEvent.click(screen.getByLabelText('logGroup2'));
|
||||||
await userEvent.click(screen.getByText('Add log groups'));
|
await userEvent.click(screen.getByText('Add log groups'));
|
||||||
@ -174,7 +174,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
it('does not call onChange after a selection if the user hits the cancel button', async () => {
|
it('does not call onChange after a selection if the user hits the cancel button', async () => {
|
||||||
const onChange = jest.fn();
|
const onChange = jest.fn();
|
||||||
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
render(<LogGroupsSelector {...defaultProps} onChange={onChange} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
await userEvent.click(screen.getByLabelText('logGroup2'));
|
await userEvent.click(screen.getByLabelText('logGroup2'));
|
||||||
await userEvent.click(screen.getByText('Cancel'));
|
await userEvent.click(screen.getByText('Cancel'));
|
||||||
@ -197,7 +197,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.queryByText(labelText)).not.toBeInTheDocument();
|
expect(screen.queryByText(labelText)).not.toBeInTheDocument();
|
||||||
defer.resolve();
|
defer.resolve();
|
||||||
await waitFor(() => expect(screen.queryByText(labelText)).not.toBeInTheDocument());
|
await waitFor(() => expect(screen.queryByText(labelText)).not.toBeInTheDocument());
|
||||||
@ -215,7 +215,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
render(<LogGroupsSelector {...defaultProps} fetchLogGroups={fetchLogGroups} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.queryByText(labelText)).not.toBeInTheDocument();
|
expect(screen.queryByText(labelText)).not.toBeInTheDocument();
|
||||||
defer.resolve();
|
defer.resolve();
|
||||||
await waitFor(() => expect(screen.getByText(labelText)).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText(labelText)).toBeInTheDocument());
|
||||||
@ -223,7 +223,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
|
|
||||||
it('should display log groups counter label', async () => {
|
it('should display log groups counter label', async () => {
|
||||||
render(<LogGroupsSelector {...defaultProps} selectedLogGroups={[]} />);
|
render(<LogGroupsSelector {...defaultProps} selectedLogGroups={[]} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await waitFor(() => expect(screen.getByText('0 log groups selected')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('0 log groups selected')).toBeInTheDocument());
|
||||||
await userEvent.click(screen.getByLabelText('logGroup2'));
|
await userEvent.click(screen.getByLabelText('logGroup2'));
|
||||||
await waitFor(() => expect(screen.getByText('1 log group selected')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('1 log group selected')).toBeInTheDocument());
|
||||||
@ -239,7 +239,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await waitFor(() => expect(screen.getByText('1 log group selected')).toBeInTheDocument());
|
await waitFor(() => expect(screen.getByText('1 log group selected')).toBeInTheDocument());
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await selectEvent.select(screen.getByLabelText('Template variable'), '$logGroupVariable', {
|
await selectEvent.select(screen.getByLabelText('Template variable'), '$logGroupVariable', {
|
||||||
container: document.body,
|
container: document.body,
|
||||||
});
|
});
|
||||||
@ -284,7 +284,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
onChange={onChange}
|
onChange={onChange}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
await screen.getByRole('button', { name: 'select-clear-value' }).click();
|
await screen.getByRole('button', { name: 'select-clear-value' }).click();
|
||||||
await userEvent.click(screen.getByText('Add log groups'));
|
await userEvent.click(screen.getByText('Add log groups'));
|
||||||
expect(onChange).toHaveBeenCalledWith([
|
expect(onChange).toHaveBeenCalledWith([
|
||||||
@ -297,7 +297,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
|
|
||||||
it('should display account label if account options prop has values', async () => {
|
it('should display account label if account options prop has values', async () => {
|
||||||
render(<LogGroupsSelector {...defaultProps} />);
|
render(<LogGroupsSelector {...defaultProps} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
expect(screen.getByText('Account label')).toBeInTheDocument();
|
expect(screen.getByText('Account label')).toBeInTheDocument();
|
||||||
waitFor(() => expect(screen.getByText('Account Name 123')).toBeInTheDocument());
|
waitFor(() => expect(screen.getByText('Account Name 123')).toBeInTheDocument());
|
||||||
@ -305,7 +305,7 @@ describe('LogGroupsSelector', () => {
|
|||||||
|
|
||||||
it('should not display account label if account options prop doesnt has values', async () => {
|
it('should not display account label if account options prop doesnt has values', async () => {
|
||||||
render(<LogGroupsSelector {...defaultProps} accountOptions={[]} />);
|
render(<LogGroupsSelector {...defaultProps} accountOptions={[]} />);
|
||||||
await userEvent.click(screen.getByText('Select Log Groups'));
|
await userEvent.click(screen.getByText('Select log groups'));
|
||||||
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
expect(screen.getByText('Log group name prefix')).toBeInTheDocument();
|
||||||
expect(screen.queryByText('Account label')).not.toBeInTheDocument();
|
expect(screen.queryByText('Account label')).not.toBeInTheDocument();
|
||||||
waitFor(() => expect(screen.queryByText('Account Name 123')).not.toBeInTheDocument());
|
waitFor(() => expect(screen.queryByText('Account Name 123')).not.toBeInTheDocument());
|
||||||
|
@ -112,7 +112,7 @@ export const LogGroupsSelector = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Modal className={styles.modal} title="Select Log Groups" isOpen={isModalOpen} onDismiss={toggleModal}>
|
<Modal className={styles.modal} title="Select log groups" isOpen={isModalOpen} onDismiss={toggleModal}>
|
||||||
<div className={styles.logGroupSelectionArea}>
|
<div className={styles.logGroupSelectionArea}>
|
||||||
<div className={styles.searchField}>
|
<div className={styles.searchField}>
|
||||||
<EditorField label="Log group name prefix">
|
<EditorField label="Log group name prefix">
|
||||||
@ -229,15 +229,15 @@ export const LogGroupsSelector = ({
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</EditorField>
|
</EditorField>
|
||||||
<Space layout="block" v={2} />
|
|
||||||
<div>
|
<Modal.ButtonRow>
|
||||||
<Button onClick={handleApply} type="button" className={styles.addBtn}>
|
<Button onClick={handleCancel} variant="secondary" type="button" fill="outline">
|
||||||
Add log groups
|
|
||||||
</Button>
|
|
||||||
<Button onClick={handleCancel} variant="secondary" type="button">
|
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
<Button onClick={handleApply} type="button">
|
||||||
|
Add log groups
|
||||||
|
</Button>
|
||||||
|
</Modal.ButtonRow>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
@ -251,7 +251,7 @@ export const LogGroupsSelector = ({
|
|||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
Select Log Groups
|
Select log groups
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
|
@ -118,7 +118,7 @@ describe('QueryEditor should render right editor', () => {
|
|||||||
statistic: 'Average',
|
statistic: 'Average',
|
||||||
} as CloudWatchQuery;
|
} as CloudWatchQuery;
|
||||||
render(<QueryEditor {...props} query={query} />);
|
render(<QueryEditor {...props} query={query} />);
|
||||||
expect(await screen.findByText('Select Log Groups')).toBeInTheDocument();
|
expect(await screen.findByText('Select log groups')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -95,10 +95,6 @@ const getStyles = (theme: GrafanaTheme2) => ({
|
|||||||
verticalAlign: 'middle',
|
verticalAlign: 'middle',
|
||||||
marginLeft: theme.spacing(0.5),
|
marginLeft: theme.spacing(0.5),
|
||||||
}),
|
}),
|
||||||
|
|
||||||
addBtn: css({
|
|
||||||
marginRight: '10px',
|
|
||||||
}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
export default getStyles;
|
export default getStyles;
|
||||||
|
Loading…
Reference in New Issue
Block a user