Базовый CRUD в Admiral


Типы полей
- TextInput – текстовое поле для ввода текста;
- SelectInput – поле с выбором значений(в том числе множественное);
- FilePictureInput – поле для загрузки файлов, также позволяет добавлять несколько файлов;
- BooleanInput – логическое поле, предназначенное для отображения и изменения булевого значения (истина/ложь);
- ArrayInput – специфическое поле, которое позволяет отображать некоторое множество для конкретной сущности. Например для Заказа будет удобно отобразить все его позиции (товары).
TextInput
<TextInput label="Заголовок" name="title" placeholder="Заголовок" required columnSpan={2}/>
- label – отображаемый заголовок поля, который подсказывает пользователю, что нужно ввести. Обычно размещается над или рядом с самим полем ввода;
- name – уникальный идентификатор поля, используемый при отправке данных формы. Это имя также связывает поле с соответствующим значением в объекте данных;
- placeholder – текст-подсказка, отображаемый внутри поля до ввода значений. Помогает понять ожидаемый формат или пример вводимых данных;
- required – Булево значение, указывающее, что поле обязательно для заполнения;
- columnSpan – определяет, сколько колонок в сетке формы занимает данное поле. Полезно для выравнивания и настройки визуального расположения элементов формы.
SelectInput
<SelectInput label="По атрибуту" name="facet_id" placeholder="По атрибуту" required mode="multiple"columnSpan={2}/>
- mode="multiple" позволяет выбрать не один, а сразу несколько значений из списка. Это полезно, когда нужно указать несколько категорий, тегов или других параметров одновременно.
FilePictureInput
<FilePictureInput columnSpan={2} label="Avatar" name="avatar" accept="image/*" maxCount={1} />
- accept – указывает допустимые типы файлов для загрузки. Например, image/* разрешает загрузку только изображений;
- maxCount – ограничивает количество файлов, которые можно загрузить.
BooleanInput
<BooleanInput label="Active?" name="active" />
- label – отображаемый заголовок поля, который подсказывает пользователю, что нужно ввести. Обычно размещается над или рядом с самим полем ввода;
- name – уникальный идентификатор поля, используемый при отправке данных формы. Это имя также связывает поле с соответствующим значением в объекте данных.
ArrayInput
<ArrayInput label="Schedule" name="schedule" required>
<SelectInput
label="Day of the week"
name="day"
placeholder="Day of the week"
required
/>
<TimePickerInput
label="Opening time"
name="start_time"
placeholder="Opening time"
format="HH:mm"
/>
<TimePickerInput
label="Closing time"
name="end_time"
placeholder="Closing time"
format="HH:mm"
/>
</ArrayInput>
- required – Булево значение, указывающее, что поле обязательно для заполнения.
Пример
const fields = (<>
<TextInput label="Имя" name="name" placeholder="Введите имя" required />
<SelectInput label="Должность" name="position" placeholder="Выберите должность" required />
<FilePictureInput label="Аватар" name="avatar" accept="image/*" maxCount={1} />
<BooleanInput label="Активен" name="is_active" />
<AjaxSelectInput label="Отдел" name="department_id" placeholder="Выберите отдел" />
<ArrayInput label="Расписание" name="schedule">
<TimePickerInput label="Начало" name="start_time" placeholder="Начало" format="HH:mm" />
<TimePickerInput label="Конец" name="end_time" placeholder="Конец" format="HH:mm" />
<BooleanInput label="Выходной?" name="day_off" />
</ArrayInput>
<>)
export const CRUD = createCRUD({path: '/employers',
resource: resource,
index: {
title: 'Сотрудники',
newButtonText: 'Добавить',
tableColumns: [
{
sorter: true,
title: 'ID',
dataIndex: 'id',
key: 'id',
width: 90,
},
],
},
form: {
create: {
fields,
},
edit: {
fields,
},
},
create: {
title: 'Добавление'
},
update: {
title: (id: string) => `Редактирование`,
},
})
Backend
https://admiral.dev.family/admin/emploers/489/update?id=489
Управление таблицей
export const CRUD = createCRUD({path: '/employers',
resource: resource,
index: {
title: 'Сотрудники',
newButtonText: 'Добавить',
tableColumns: [
{
sorter: true,
title: 'ID',
dataIndex: 'id',
key: 'id',
width: 90,
},
{
sorter: true,
title: 'Активен',
dataIndex: 'is_active',
key: 'is_active',
render: (value) => (value ? 'Да' : 'Нет'),
},
],
},
....
})
- sorter – указывает, что по этому столбцу можно сортировать данные. При клике на заголовок таблица будет отсортирована по соответствующему значению;
- title — заголовок столбца, отображаемый в шапке таблицы. Показывает, какое поле представлено в этом столбце (в данном случае – «Активен»);
- dataIndex — ключ из объекта данных, по которому будет отображаться значение в ячейках. Он указывает, какое свойство из строки данных использовать (например, is_active);
- key — уникальный идентификатор столбца, часто совпадает с dataIndex. Используется для оптимизации работы таблицы, особенно при обновлениях;
- render — функция, которая позволяет настроить, как будет отображаться значение в ячейке. В этом примере true выводится как «Да», а false — как «Нет»;
- width – позволяет вручную задавать размер колонки.
Управление формой
{
"data": {
"name": "Имя",
"position": "Должность",
"avatar": {
"uid": "uid", //уникальный идентификатор файла
"name": "name.png",
"url": "https://admiral.dev.family/photo.png" //url на изображение
"is_active": true,
"departmen_id": 1,
"schedule.start_time": "10:20",
"schedule.end_time": "11:20",
"schedule.day_off": true
},
"values": {
"departmen_id": [
{
"label": "Маркетинг",
"value": "7"
},
{
"label": "Бухгалтерия",
"value": "8"
}
]
}
}
https://admiral.dev.family/admin/emploers/489 (POST)
{
"name": "Имя",
"position": "Должность",
"avatar": {
"uid": "uid",
"name": "name.png",
"url": "https://admiral.dev.family/photo.png"
}, //будет либо бинарным файлом в случае загрузки в первый раз, либо объектом, если фото уже было загружено
"is_active": true,
"departmen_id": 1,
"schedule": [
{
"day_id": 1,
"start_time": "10:20",
"end_time": "11:20",
"day_off": true
},
{
"day_id": 2,
"start_time": "09:20",
"end_time": "12:20",
"day_off": true
}
]
}
Вывод
- Легко конфигурировать таблицы с сортировкой и кастомным отображением данных;
- Использовать готовые поля для различных типов данных, включая массивы и файлы;
- Подгружать и сохранять данные через понятный API.