mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 13:29:41 +02:00
refactor(ui/modals): replace bootbox with react solution [EE-4541] (#8010)
This commit is contained in:
parent
392c7f74b8
commit
e66dea44e3
111 changed files with 1330 additions and 1562 deletions
56
app/react/components/modals/Dialog.tsx
Normal file
56
app/react/components/modals/Dialog.tsx
Normal file
|
@ -0,0 +1,56 @@
|
|||
import { ReactNode } from 'react';
|
||||
|
||||
import { Button } from '@@/buttons';
|
||||
|
||||
import { ButtonOptions, ModalType } from './types';
|
||||
import { openModal } from './open-modal';
|
||||
import { Modal, OnSubmit } from './Modal';
|
||||
|
||||
export interface DialogOptions<T> {
|
||||
title?: ReactNode;
|
||||
message: ReactNode;
|
||||
modalType?: ModalType;
|
||||
buttons: Array<ButtonOptions<T>>;
|
||||
}
|
||||
|
||||
interface Props<T> extends DialogOptions<T> {
|
||||
onSubmit: OnSubmit<T>;
|
||||
}
|
||||
|
||||
export function Dialog<T>({
|
||||
buttons,
|
||||
message,
|
||||
title,
|
||||
onSubmit,
|
||||
modalType,
|
||||
}: Props<T>) {
|
||||
const ariaLabel = requireString(title) || requireString(message) || 'Dialog';
|
||||
|
||||
return (
|
||||
<Modal onDismiss={() => onSubmit()} aria-label={ariaLabel}>
|
||||
{title && <Modal.Header title={title} modalType={modalType} />}
|
||||
<Modal.Body>{message}</Modal.Body>
|
||||
<Modal.Footer>
|
||||
{buttons.map((button, index) => (
|
||||
<Button
|
||||
onClick={() => onSubmit(button.value)}
|
||||
className={button.className}
|
||||
color={button.color}
|
||||
key={index}
|
||||
size="medium"
|
||||
>
|
||||
{button.label}
|
||||
</Button>
|
||||
))}
|
||||
</Modal.Footer>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
function requireString(value: ReactNode) {
|
||||
return typeof value === 'string' ? value : undefined;
|
||||
}
|
||||
|
||||
export async function openDialog<T>(options: DialogOptions<T>) {
|
||||
return openModal<DialogOptions<T>, T>(Dialog, options);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue