Appearance
Утилиты
Краткое описание
| Функция | Назначение | Принимает | Возвращает |
|---|---|---|---|
extractEntityFromPath | Извлечение имени сущности из URL-пути (после сегмента global или site/[id]) | string | string | null |
extractPageTypeFromPath | Определение типа страницы (edit или create) по последнему сегменту пути | string | 'edit' | 'create' | null |
generateSlugFromText | Генерация слага из текста: транслитерация, приведение к нижнему регистру, очистка от символов | string | string |
transformResponseData | Преобразование массива из API в формат для селекта с объектами {id, label}, добавляя вариант "Нет" | any[] | {id: number, label: string}[] |
transformResponseFields | Преобразование одного объекта API в {id, label}, с обработкой null | object | null | {id: number, label: string} |
assignTransformedField | Присвоение в объект преобразованного поля из одного ключа в другой | object, string, string | void |
validationRules | Набор универсальных правил валидации для разных типов полей (текст, число, email, телефон и др.) | object (параметры) | object (правила) |
attachMedia | Прикрепляет медиафайлы к сущности | url: string, entityName: string, entityId: number, mediaIds: number[] | - |
Подробное описание
extractEntityFromPath(path: string): string | null
- Разбивает путь по
/, игнорируя пустые элементы. - Если найден сегмент
global, возвращает следующий за ним сегмент. - Если найден сегмент
site, проверяет, есть ли после него числовой ID сайта и следующий сегмент — возвращает его. - Иначе возвращает
null.
Пример использования:
ts
extractEntityFromPath('/global/products/edit') // вернёт 'products'
extractEntityFromPath('/site/123/categories/create') // вернёт 'categories'
extractEntityFromPath('/random/path') // вернёт nullextractPageTypeFromPath(path: string): 'edit' | 'create' | null
- Возвращает
'edit'или'create', если последний сегмент пути совпадает с этими значениями. - В противном случае возвращает
null.
Пример использования:
ts
extractPageTypeFromPath('/global/products/edit') // 'edit'
extractPageTypeFromPath('/site/5/items/create') // 'create'
extractPageTypeFromPath('/global/products/view') // nullgenerateSlugFromText(text: string): string
- Проверяет, что вход — строка.
- Транслитерирует (например, кириллицу в латиницу).
- Приводит к нижнему регистру.
- Заменяет пробелы на дефисы.
- Удаляет все символы, кроме букв, цифр и дефисов.
Пример использования:
ts
generateSlugFromText('Пример заголовка статьи') // 'primer-zagolovka-stati'
generateSlugFromText(' Тест! @Slug * ') // 'test-slug'
generateSlugFromText('') // ''transformResponseData(responseData: any[]): {id: number, label: string}[]
- Если вход не массив, возвращает массив с одним элементом
{id: 0, label: 'Нет'}. - Иначе формирует новый массив с элементом
{id: 0, label: 'Нет'}и мапит входные объекты в{id, label}поmenutitle.
Пример использования:
ts
transformResponseData([
{ id: 1, menutitle: 'Категория 1' },
{ id: 2, menutitle: 'Категория 2' },
])
// Ответ:
// [
// {id: 0, label: 'Нет'},
// {id: 1, label: 'Категория 1'},
// {id: 2, label: 'Категория 2'}
// ]
transformResponseData(null)
// Ответ:
// [{id: 0, label: 'Нет'}]transformResponseFields(field: object | null): {id: number, label: string}
- Если поле
nullилиundefined, возвращает{id: 0, label: 'Нет'}. - Иначе извлекает
idиmenutitleиз объекта.
Пример использования:
ts
transformResponseFields({ id: 10, menutitle: 'Поле A' }) // {id: 10, label: 'Поле A'}
transformResponseFields(null) // {id: 0, label: 'Нет'}assignTransformedField(data: object, sourceKey: string, targetKey: string): void
- Берёт значение из
data[sourceKey]. - Преобразует его через
transformResponseFields. - Записывает результат в
data[targetKey].
Пример использования:
ts
const data = {
category: { id: 5, menutitle: 'Категория 5' },
}
assignTransformedField(data, 'category', 'category_id')
// Ответ:
// data теперь содержит:
// {
// category_id: {id: 5, label: 'Категория 5'}
// }validationRules
Набор валидаторов с сообщениями:
| Тип | Описание правил |
|---|---|
text | Обязательность (по умолчанию), мин/макс длина символов |
number | Обязательность, мин/макс значение |
email | Обязательность, проверка формата email, мин/макс длина |
phone | Обязательность, мин длина (обычно для номеров +7) |
checkbox | Обязательность (например, согласие с условиями) |
file | Обязательность выбора файла |
select | Обязательность выбора из списка |
Пример использования:
ts
const rules = {
menutitle: {
value: validationRules.text({ min: 3 }),
},
slug: {
value: validationRules.text({ min: 3 }),
},
}attachMedia
Используется для прикрепления медиафайлов к сущности.
Сигнатура функции:
ts
(url: string, entityName: string, entityId: number, mediaIds: number[]): void => undefinedПример использования:
См: configs/forms/products.ts