Рецепты
04
FormDialog
Модальная форма с ловушкой фокуса и закрытием по Escape, на оверлее [data-state] из слоя анимаций.
отрендерил aura-react
отрендерил aura-react
отрендерил aura-react
отрендерил aura-react
отрендерил aura-react
Код
Demo.tsx
import { useState } from 'react';
import { Button, Dialog, Field, Group } from '@ilomee/aura-react';
// Форма в модалке — это Dialog с формой внутри. `Dialog` владеет затемнением, ловушкой фокуса,
// блокировкой прокрутки и Escape; форма и две кнопки — та часть, которая всегда была специфична для
// конкретного экрана, поэтому рецепт вокруг них стал примером, а не компонентом.
export default function Demo() {
const [open, setOpen] = useState(true);
const [name, setName] = useState('');
return (
<>
<Button variant="primary" onClick={() => setOpen(true)}>
New workspace
</Button>
<Dialog
open={open}
onClose={() => setOpen(false)}
title="New workspace"
autoFocus={false}
withCloseButton
>
<form
onSubmit={(e) => {
e.preventDefault();
setOpen(false);
}}
>
<Field label="Name" value={name} onValueChange={setName} placeholder="Acme" />
<Group style={{ marginTop: 20, justifyContent: 'flex-end' }}>
<Button type="button" onClick={() => setOpen(false)}>
Cancel
</Button>
<Button type="submit" variant="primary" disabled={!name}>
Create
</Button>
</Group>
</form>
</Dialog>
</>
);
}Это пример, а не компонент: его не поставляет ни один пакет и импортировать нечего. Он собран из примитивов, которые есть во всех четырёх пакетах, поэтому та же композиция работает в любом стеке — скопируйте её в свой компонент, и дальше она ваша.
Пропсы
Пропсов нет: композиция принимает то, что вы передадите примитивам внутри неё. Их пропсы — на их собственных страницах.
Какие классы отдаёт
Все фреймворки отдают одни и те же классы — именно поэтому четыре библиотеки выглядят одинаково. Их можно использовать напрямую, вообще без библиотеки компонентов.
| Класс | Роль | Примечания |
|---|---|---|
| .aura-overlay | база | Обязательный. Без него модификатор не работает. |
| .aura-popup | база | Обязательный. Без него модификатор не работает. |