Pular para o conteúdo

Diálogo (Dialog)

Componentes Dialog são usados para apresentar conteúdo em uma camada acima do conteúdo principal do aplicativo, e frequentemente solicitam uma resposta do usuário. São um componente crítico para diálogos modais, lightboxes, pop-ups de notificação e popups de conteúdo personalizado.

Para usar o Dialog, importe-o dos seus componentes e passe as props necessárias incluindo open, onOpenChange e o conteúdo do diálogo como filhos. Opcionalmente, você pode personalizar sua aparência com as props className, fullWidth, fullHeight, fullScreen, scrollable, maxWidth, modal e onOpenAutoFocus.

Um exemplo básico de uso do componente dialog para mostrar um pop-up simples.

import React, { useState } from "react";
import {
Button,
Dialog,
DialogActions,
DialogContent,
DialogTitle,
SearchIcon,
TextField,
Typography
} from "@firecms/ui";
export default function DialogBasicDemo() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open Dialog</Button>
<Dialog
open={open}
onOpenChange={setOpen}>
<DialogTitle variant={"h6"} className={"flex flex-row gap-4 items-center"}>
<SearchIcon size={"small"}/>
Search
</DialogTitle>
<DialogContent>
<Typography variant={"body2"}>
Search in your documents
</Typography>
<TextField size={"small"}/>
</DialogContent>
<DialogActions>
<Button
color={"primary"}
onClick={() => setOpen(false)} variant={"text"}>
Close
</Button>
<Button
color={"primary"}
onClick={() => setOpen(false)}
variant={"filled"}>
Got it!
</Button>
</DialogActions>
</Dialog>
</>
);
}

Um exemplo de um diálogo que cobre a tela inteira.

import React, { useState } from "react";
import { Button, CenteredView, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from "@firecms/ui";
export default function DialogFullScreenDemo() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open Full-Screen Dialog</Button>
<Dialog
open={open}
onOpenChange={setOpen}
fullScreen={true}
>
<DialogContent
includeMargin={false}>
<CenteredView>
<DialogTitle variant={"h3"} includeMargin={false}>
Your dialog
</DialogTitle>
<Typography gutterBottom>
Full-Screen Dialog Content
</Typography>
<Button variant={"outlined"}>
Click me
</Button>
</CenteredView>
</DialogContent>
<DialogActions>
<Button
color={"primary"}
onClick={() => setOpen(false)}
variant={"filled"}>
Done
</Button>
</DialogActions>
</Dialog>
</>
);
}

Ilustra como tornar o conteúdo de um diálogo com rolagem.

import React, { useState } from "react";
import { Button, Dialog, DialogActions } from "@firecms/ui";
export default function DialogScrollableDemo() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open Scrollable Dialog</Button>
<Dialog
open={open}
onOpenChange={setOpen}
scrollable={true}
>
<div className={"p-8 bg-red-100 text-red-800"} style={{ height: "200vh" }}>Scrollable Dialog Content
</div>
<DialogActions>
<Button
color={"primary"}
onClick={() => setOpen(false)}
variant={"filled"}>
Got it!
</Button>
</DialogActions>
</Dialog>
</>
);
}

Demonstra o uso da prop maxWidth para personalizar a largura do diálogo.

import React, { useState } from "react";
import { Button, Dialog, DialogActions, DialogContent, DialogTitle } from "@firecms/ui";
export default function DialogCustomWidthDemo() {
const [open, setOpen] = useState(false);
return (
<>
<Button onClick={() => setOpen(true)}>Open Custom Width Dialog</Button>
<Dialog
open={open}
onOpenChange={setOpen}
maxWidth="5xl"
>
<DialogTitle variant={"h5"} gutterBottom>
Your dialog
</DialogTitle>
<DialogContent>
Dialog with Custom Width
</DialogContent>
<DialogActions>
<Button
color={"primary"}
onClick={() => setOpen(false)}
variant={"filled"}>
Close
</Button>
</DialogActions>
</Dialog>
</>
);
}