143 lines
4.4 KiB
TypeScript
143 lines
4.4 KiB
TypeScript
|
import type {
|
|||
|
AuthorsSortField,
|
|||
|
CollectionsSortField,
|
|||
|
CommunitiesSortField,
|
|||
|
InvitesSortField,
|
|||
|
ShoutsSortField,
|
|||
|
TabSortConfig,
|
|||
|
TopicsSortField
|
|||
|
} from './sort'
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурации сортировки для разных вкладок админ-панели
|
|||
|
* Основаны на том, что реально поддерживают резолверы в бэкенде
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Авторы"
|
|||
|
* Основана на резолвере admin_get_users в resolvers/admin.py
|
|||
|
*/
|
|||
|
export const AUTHORS_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: ['id', 'email', 'name', 'created_at', 'last_seen'] as AuthorsSortField[],
|
|||
|
defaultField: 'id' as AuthorsSortField,
|
|||
|
defaultDirection: 'asc'
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Публикации"
|
|||
|
* Основана на резолвере admin_get_shouts в resolvers/admin.py
|
|||
|
*/
|
|||
|
export const SHOUTS_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: ['id', 'title', 'slug', 'created_at', 'published_at', 'updated_at'] as ShoutsSortField[],
|
|||
|
defaultField: 'id' as ShoutsSortField,
|
|||
|
defaultDirection: 'desc' // Новые публикации сначала
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Темы"
|
|||
|
* Основана на резолвере get_topics_with_stats в resolvers/topic.py
|
|||
|
*/
|
|||
|
export const TOPICS_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: [
|
|||
|
'id',
|
|||
|
'title',
|
|||
|
'slug',
|
|||
|
'created_at',
|
|||
|
'authors',
|
|||
|
'shouts',
|
|||
|
'followers'
|
|||
|
] as TopicsSortField[],
|
|||
|
defaultField: 'id' as TopicsSortField,
|
|||
|
defaultDirection: 'asc'
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Сообщества"
|
|||
|
* Основана на резолвере get_communities_all в resolvers/community.py
|
|||
|
*/
|
|||
|
export const COMMUNITIES_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: [
|
|||
|
'id',
|
|||
|
'name',
|
|||
|
'slug',
|
|||
|
'created_at',
|
|||
|
'created_by',
|
|||
|
'shouts',
|
|||
|
'followers',
|
|||
|
'authors'
|
|||
|
] as CommunitiesSortField[],
|
|||
|
defaultField: 'id' as CommunitiesSortField,
|
|||
|
defaultDirection: 'asc'
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Коллекции"
|
|||
|
* Основана на резолвере get_collections_all в resolvers/collection.py
|
|||
|
*/
|
|||
|
export const COLLECTIONS_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: ['id', 'title', 'slug', 'created_at', 'published_at'] as CollectionsSortField[],
|
|||
|
defaultField: 'id' as CollectionsSortField,
|
|||
|
defaultDirection: 'asc'
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Конфигурация сортировки для вкладки "Приглашения"
|
|||
|
* Основана на резолвере admin_get_invites в resolvers/admin.py
|
|||
|
*/
|
|||
|
export const INVITES_SORT_CONFIG: TabSortConfig = {
|
|||
|
allowedFields: ['inviter_name', 'author_name', 'shout_title', 'status'] as InvitesSortField[],
|
|||
|
defaultField: 'inviter_name' as InvitesSortField,
|
|||
|
defaultDirection: 'asc'
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Получает конфигурацию сортировки для указанной вкладки
|
|||
|
*/
|
|||
|
export const getSortConfigForTab = (tab: string): TabSortConfig => {
|
|||
|
switch (tab) {
|
|||
|
case 'authors':
|
|||
|
return AUTHORS_SORT_CONFIG
|
|||
|
case 'shouts':
|
|||
|
return SHOUTS_SORT_CONFIG
|
|||
|
case 'topics':
|
|||
|
return TOPICS_SORT_CONFIG
|
|||
|
case 'communities':
|
|||
|
return COMMUNITIES_SORT_CONFIG
|
|||
|
case 'collections':
|
|||
|
return COLLECTIONS_SORT_CONFIG
|
|||
|
case 'invites':
|
|||
|
return INVITES_SORT_CONFIG
|
|||
|
default:
|
|||
|
// По умолчанию возвращаем конфигурацию авторов
|
|||
|
return AUTHORS_SORT_CONFIG
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Переводы названий полей для отображения пользователю
|
|||
|
*/
|
|||
|
export const FIELD_LABELS: Record<string, string> = {
|
|||
|
// Общие поля
|
|||
|
id: 'ID',
|
|||
|
title: 'Название',
|
|||
|
name: 'Имя',
|
|||
|
slug: 'Slug',
|
|||
|
created_at: 'Создано',
|
|||
|
updated_at: 'Обновлено',
|
|||
|
published_at: 'Опубликовано',
|
|||
|
created_by: 'Создатель',
|
|||
|
shouts: 'Публикации',
|
|||
|
followers: 'Подписчики',
|
|||
|
authors: 'Авторы',
|
|||
|
|
|||
|
// Поля авторов
|
|||
|
email: 'Email',
|
|||
|
last_seen: 'Последний вход',
|
|||
|
|
|||
|
// Поля приглашений
|
|||
|
inviter_name: 'Приглашающий',
|
|||
|
author_name: 'Приглашаемый',
|
|||
|
shout_title: 'Публикация',
|
|||
|
status: 'Статус'
|
|||
|
}
|