ConceptPortal-public/rsconcept/frontend/src/utils/labels.ts

175 lines
7.9 KiB
TypeScript
Raw Normal View History

/**
* Module: Text descriptors for UI and model elements.
2023-12-28 14:04:44 +03:00
*
* Label is a short text used to represent an entity.
* Description is a long description used in tooltips.
*/
2025-02-11 20:56:24 +03:00
import { AccessPolicy, LibraryItemType } from '@/features/library/models/library';
2025-02-12 15:13:37 +03:00
import { UserRole } from '@/features/users/stores/role';
2024-08-26 17:25:07 +03:00
2023-12-16 19:20:26 +03:00
/**
2025-01-15 23:03:35 +03:00
* Retrieves label for {@link UserRole}.
2023-12-16 19:20:26 +03:00
*/
2025-01-15 23:03:35 +03:00
export function labelAccessMode(mode: UserRole): string {
2023-12-28 14:04:44 +03:00
// prettier-ignore
2023-12-16 19:20:26 +03:00
switch (mode) {
2025-01-15 23:03:35 +03:00
case UserRole.READER: return 'Читатель';
case UserRole.EDITOR: return 'Редактор';
case UserRole.OWNER: return 'Владелец';
case UserRole.ADMIN: return 'Администратор';
2023-12-16 19:20:26 +03:00
}
}
/**
2025-01-15 23:03:35 +03:00
* Retrieves description for {@link UserRole}.
2023-12-16 19:20:26 +03:00
*/
2025-01-15 23:03:35 +03:00
export function describeAccessMode(mode: UserRole): string {
2023-12-28 14:04:44 +03:00
// prettier-ignore
2023-12-16 19:20:26 +03:00
switch (mode) {
2025-01-15 23:03:35 +03:00
case UserRole.READER:
2023-12-16 19:20:26 +03:00
return 'Режим запрещает редактирование';
2025-01-15 23:03:35 +03:00
case UserRole.EDITOR:
2024-05-27 20:42:34 +03:00
return 'Режим редактирования';
2025-01-15 23:03:35 +03:00
case UserRole.OWNER:
2024-05-27 20:42:34 +03:00
return 'Режим владельца';
2025-01-15 23:03:35 +03:00
case UserRole.ADMIN:
2024-05-27 20:42:34 +03:00
return 'Режим администратора';
2023-12-16 19:20:26 +03:00
}
}
2024-03-09 16:40:10 +03:00
/**
* Retrieves label for {@link AccessPolicy}.
*/
export function labelAccessPolicy(policy: AccessPolicy): string {
// prettier-ignore
switch (policy) {
case AccessPolicy.PRIVATE: return 'Личный';
case AccessPolicy.PROTECTED: return 'Защищенный';
case AccessPolicy.PUBLIC: return 'Открытый';
}
}
/**
* Retrieves description for {@link AccessPolicy}.
*/
export function describeAccessPolicy(policy: AccessPolicy): string {
// prettier-ignore
switch (policy) {
case AccessPolicy.PRIVATE:
return 'Доступ только для владельца';
case AccessPolicy.PROTECTED:
return 'Доступ для владельца и редакторов';
case AccessPolicy.PUBLIC:
return 'Открытый доступ';
}
}
/**
* Retrieves label for {@link LibraryItemType}.
*/
export function labelLibraryItemType(itemType: LibraryItemType): string {
// prettier-ignore
switch (itemType) {
case LibraryItemType.RSFORM: return 'КС';
case LibraryItemType.OSS: return 'ОСС';
}
}
/**
* Retrieves description for {@link LibraryItemType}.
*/
export function describeLibraryItemType(itemType: LibraryItemType): string {
// prettier-ignore
switch (itemType) {
case LibraryItemType.RSFORM: return 'Концептуальная схема';
case LibraryItemType.OSS: return 'Операционная схема синтеза';
}
}
2024-03-09 16:40:10 +03:00
/**
* UI info descriptors.
*/
export const infoMsg = {
changesSaved: 'Изменения сохранены',
2024-06-20 21:11:40 +03:00
pathReady: 'Путь скопирован',
substituteSingle: 'Отождествление завершено',
reorderComplete: 'Упорядочение завершено',
reindexComplete: 'Имена конституент обновлены',
moveComplete: 'Перемещение завершено',
linkReady: 'Ссылка скопирована',
versionRestored: 'Загрузка версии завершена',
locationRenamed: 'Ваши схемы перемещены',
cloneComplete: (alias: string) => `Копия создана: ${alias}`,
2024-08-22 22:41:41 +03:00
noDataToExport: 'Нет данных для экспорта',
2024-08-26 17:25:07 +03:00
substitutionsCorrect: 'Таблица отождествлений прошла проверку',
uploadSuccess: 'Схема загружена из файла',
inlineSynthesisComplete: 'Встраивание завершено',
newLibraryItem: 'Схема успешно создана',
addedConstituents: (count: number) => `Добавлены конституенты: ${count}`,
newUser: (username: string) => `Пользователь успешно создан: ${username}`,
newVersion: (version: string) => `Версия создана: ${version}`,
2024-07-21 15:19:57 +03:00
newConstituent: (alias: string) => `Конституента добавлена: ${alias}`,
newOperation: (alias: string) => `Операция добавлена: ${alias}`,
versionDestroyed: 'Версия удалена',
itemDestroyed: 'Схема удалена',
2024-07-23 23:04:21 +03:00
operationDestroyed: 'Операция удалена',
operationExecuted: 'Операция выполнена',
allOperationExecuted: 'Все операции выполнены',
constituentsDestroyed: (count: number) => `Конституенты удалены: ${count}`
};
/**
* UI error descriptors.
*/
export const errorMsg = {
astFailed: 'Невозможно построить дерево разбора',
2024-11-14 22:10:29 +03:00
typeStructureFailed: 'Структура отсутствует',
2024-07-24 18:11:39 +03:00
passwordsMismatch: 'Пароли не совпадают',
2025-02-03 18:17:44 +03:00
passwordsSame: 'Пароль совпадает со старым',
imageFailed: 'Ошибка при создании изображения',
2024-08-01 11:56:21 +03:00
reuseOriginal: 'Повторное использование удаляемой конституенты при отождествлении',
substituteInherited: 'Нельзя удалять наследованные конституенты при отождествлении',
inputAlreadyExists: 'Концептуальная схема с таким именем уже существует',
2025-02-03 18:17:44 +03:00
requiredField: 'Обязательное поле',
emailField: 'Введите корректный адрес электронной почты',
rulesNotAccepted: 'Примите условия пользования Порталом',
privacyNotAccepted: 'Примите политику обработки персональных данных',
2025-02-04 23:34:02 +03:00
loginFormat: 'Имя пользователя должно содержать только буквы и цифры',
invalidLocation: 'Некорректный формат пути',
2025-02-12 02:12:08 +03:00
versionTaken: 'Версия с таким шифром уже существует',
emptySubstitutions: 'Выберите хотя бы одно отождествление',
aliasInvalid: 'Введите незанятое имя, соответствующее типу',
invalidResponse: 'Некорректный ответ сервера'
};
/**
* UI tooltip descriptors.
2024-03-09 16:40:10 +03:00
*/
export const tooltipText = {
2024-06-18 15:07:41 +03:00
unsaved: 'Сохраните или отмените изменения',
shareItem: (policy?: AccessPolicy) =>
policy === AccessPolicy.PUBLIC ? 'Поделиться схемой' : 'Поделиться можно только <br/>открытой схемой'
2024-03-20 19:49:45 +03:00
};
/**
* UI prompt messages.
*/
export const promptText = {
promptUnsaved: 'Присутствуют несохраненные изменения. Продолжить без их учета?',
deleteLibraryItem: 'Вы уверены, что хотите удалить данную схему?',
2024-08-23 19:09:31 +03:00
deleteOSS:
'Внимание!!\nУдаление операционной схемы приведет к удалению всех операций и собственных концептуальных схем.\nДанное действие нельзя отменить.\nВы уверены, что хотите удалить данную ОСС?',
generateWordforms: 'Данное действие приведет к перезаписи словоформ при совпадении граммем. Продолжить?',
2024-06-21 19:27:36 +03:00
restoreArchive: 'При восстановлении архивной версии актуальная схему будет заменена. Продолжить?',
ownerChange:
'Вы уверены, что хотите изменить владельца? Вы потеряете право управления данной схемой. Данное действие отменить нельзя'
};
// ============== INTERNAL LABELS FOR DEVELOPERS TEXT ================
export function contextOutsideScope(contextName: string, contextState: string): string {
2024-12-12 21:58:19 +03:00
return `${contextName} has to be used within <${contextState}>`;
}