mirror of
https://github.com/nocobase/nocobase
synced 2024-11-15 10:17:00 +00:00
Add *.pdf preview (#2105)
* Create uk-UA.json added Ukrainian locale json * Add files via upload * fix * Update uk_UA.ts * feat(client): add pdf preview * feat(client): add pdf preview to upload * fix: refactor pdf preview --------- Co-authored-by: alexkash <kashmensky@gmail.com>
This commit is contained in:
parent
e79ea701a3
commit
dd3e872b06
713
packages/core/client/src/locale/uk_UA.ts
Normal file
713
packages/core/client/src/locale/uk_UA.ts
Normal file
@ -0,0 +1,713 @@
|
||||
export default {
|
||||
"Display <1><0>10</0><1>20</1><2>50</2><3>100</3></1> items per page": "Відображати <1><0>10</0><1>20</1><2>50</2><3>100</3></1> предметів на сторінку",
|
||||
"Meet <1><0>All</0><1>Any</1></1> conditions in the group": "Виконувати <1><0>усі</0><1>будь-які</1></1> умови в групі",
|
||||
"Open in<1><0>Modal</0><1>Drawer</1><2>Window</2></1>": "Відкрити в<1><0>Модалі</0><1>Шухляді</1><2>Вікні</2></1>",
|
||||
"{{count}} filter items": "{{count}} предметів для фільтрації",
|
||||
"{{count}} more items": "Ще {{count}} предметів",
|
||||
"Total {{count}} items": "Всього {{count}} предметів",
|
||||
"Today": "Сьогодні",
|
||||
"Yesterday": "Вчора",
|
||||
"Tomorrow": "Завтра",
|
||||
"Month": "Місяць",
|
||||
"Week": "Тиждень",
|
||||
"This week": "Цей тиждень",
|
||||
"This month": "Цей місяць",
|
||||
"This year": "Цей рік",
|
||||
"Next year": "Наступний рік",
|
||||
"Last week": "Минулий тиждень",
|
||||
"Next week": "Наступний тиждень",
|
||||
"Last month": "Минулий місяць",
|
||||
"Next month": "Наступний місяць",
|
||||
"Last quarter": "Минулий квартал",
|
||||
"This quarter": "Цей квартал",
|
||||
"Next quarter": "Наступний квартал",
|
||||
"Last year": "Минулий рік",
|
||||
"Last 7 days": "Минулі 7 днів",
|
||||
"Last 30 days": "Минулі 30 днів",
|
||||
"Last 90 days": "Минулі 90 днів",
|
||||
"Next 7 days": "Наступні 7 днів",
|
||||
"Next 30 days": "Наступні 30 днів",
|
||||
"Next 90 days": "Наступні 90 днів",
|
||||
"Work week": "Робочий тиждень",
|
||||
"Day": "День",
|
||||
"Agenda": "Порядок денний",
|
||||
"Date": "Дата",
|
||||
"Time": "Час",
|
||||
"Event": "Подія",
|
||||
"None": "Немає",
|
||||
"Unconnected": "Не з'єднаний",
|
||||
"System settings": "Системні налаштування",
|
||||
"System title": "Системний заголовок",
|
||||
"Logo": "Логотип",
|
||||
"Add menu item": "Додати елемент меню",
|
||||
"Page": "Сторінка",
|
||||
"Name": "Ім'я",
|
||||
"Icon": "Іконка",
|
||||
"Group": "Група",
|
||||
"Link": "Посилання",
|
||||
"Save conditions": "Зберегти умови",
|
||||
"Edit menu item": "Редагувати елемент меню",
|
||||
"Move to": "Перемістити до",
|
||||
"Insert left": "Вставити зліва",
|
||||
"Insert right": "Вставити справа",
|
||||
"Insert inner": "Вставити всередину",
|
||||
"Delete": "Видалити",
|
||||
"UI editor": "Редактор UI",
|
||||
"Collection": "Колекція",
|
||||
"Collections & Fields": "Колекції та поля",
|
||||
"All collections": "Всі колекції",
|
||||
"Add category": "Додати категорію",
|
||||
"Enable child collections": "Увімкнути дочірні колекції",
|
||||
"Allow adding records to the current collection": "Дозволити додавання записів до поточної колекції",
|
||||
"Delete category": "Видалити категорію",
|
||||
"Edit category": "Редагувати категорію",
|
||||
"Collection category": "Категорія колекції",
|
||||
"Collection template": "Шаблон колекції",
|
||||
"Sort": "Сортувати",
|
||||
"Categories": "Категорії",
|
||||
"Visible": "Видимо",
|
||||
"Read only": "Тільки для читання",
|
||||
"Easy reading": "Легке читання",
|
||||
"Hidden": "Приховано",
|
||||
"Hidden(reserved value)": "Приховано (зарезервоване значення)",
|
||||
"Not required": "Не обов'язково",
|
||||
"Value": "Значення",
|
||||
"Disabled": "Вимкнено",
|
||||
"Enabled": "Увімкнено",
|
||||
"On": "Увімк.",
|
||||
"Off": "Вимк.",
|
||||
"Empty": "Порожньо",
|
||||
"Linkage rule": "Правило зв'язку",
|
||||
"Linkage rules": "Правила зв'язку",
|
||||
"Condition": "Умова",
|
||||
"Properties": "Властивості",
|
||||
"Add linkage rule": "Додати правило зв'язку",
|
||||
"Add property": "Додати властивість",
|
||||
"Category name": "Назва категорії",
|
||||
"Roles & Permissions": "Ролі та дозволи",
|
||||
"Edit profile": "Редагувати профіль",
|
||||
"Change password": "Змінити пароль",
|
||||
"Old password": "Старий пароль",
|
||||
"New password": "Новий пароль",
|
||||
"Switch role": "Перемкнути роль",
|
||||
"Super admin": "Суперадміністратор",
|
||||
"Language": "Мова",
|
||||
"Allow sign up": "Дозволити реєстрацію",
|
||||
"Enable SMS authentication": "Увімкнути аутентифікацію за допомогою SMS",
|
||||
"Sign out": "Вийти",
|
||||
"Cancel": "Скасувати",
|
||||
"Submit": "Відправити",
|
||||
"Close": "Закрити",
|
||||
"Set the data scope": "Встановити обсяг даних",
|
||||
"Data blocks": "Блоки даних",
|
||||
"Filter blocks": "Блоки фільтрів",
|
||||
"Table": "Таблиця",
|
||||
"Table OID(Inheritance)": "Таблиця OID (спадковість)",
|
||||
"Form": "Форма",
|
||||
"List": "Список",
|
||||
"Grid Card": "Сітка карток",
|
||||
"pixels": "пікселів",
|
||||
"Screen size": "Розмір екрану",
|
||||
"Display title": "Заголовок відображення",
|
||||
"Set the count of columns displayed in a row": "Встановити кількість стовпців, відображених у рядку",
|
||||
"Column": "Стовпець",
|
||||
"Phone device": "Пристрій для телефона",
|
||||
"Tablet device": "Планшетний пристрій",
|
||||
"Desktop device": "Пристрій для настільного комп'ютера",
|
||||
"Large screen device": "Пристрій з великим екраном",
|
||||
"Collapse": "Згорнути",
|
||||
"Select data source": "Вибрати джерело даних",
|
||||
"Calendar": "Календар",
|
||||
"Delete events": "Видалити події",
|
||||
"This event": "Ця подія",
|
||||
"This and following events": "Ця та наступні події",
|
||||
"All events": "Усі події",
|
||||
"Delete this event?": "Видалити цю подію?",
|
||||
"Delete Event": "Видалити подію",
|
||||
"Kanban": "Канбан",
|
||||
"Gantt": "Гант",
|
||||
"Create gantt block": "Створити блок Ганта",
|
||||
"Progress field": "Поле прогресу",
|
||||
"Time scale": "Масштаб часу",
|
||||
"Hour": "Година",
|
||||
"Quarter of day": "Чверть дня",
|
||||
"Half of day": "Половина дня",
|
||||
"Year": "Рік",
|
||||
"QuarterYear": "Квартал/рік",
|
||||
"Select grouping field": "Вибрати поле групування",
|
||||
"Media": "Медіа",
|
||||
"Markdown": "Markdown",
|
||||
"Wysiwyg": "Wysiwyg",
|
||||
"Chart blocks": "Блоки діаграм",
|
||||
"Column chart": "Стовпчаста діаграма",
|
||||
"Bar chart": "Гістограма",
|
||||
"Line chart": "Лінійна діаграма",
|
||||
"Pie chart": "Кругова діаграма",
|
||||
"Area chart": "Площинна діаграма",
|
||||
"Other chart": "Інша діаграма",
|
||||
"Other blocks": "Інші блоки",
|
||||
"In configuration": "У конфігурації",
|
||||
"Chart title": "Заголовок діаграми",
|
||||
"Chart type": "Тип діаграми",
|
||||
"Chart config": "Налаштування діаграми",
|
||||
"Templates": "Шаблони",
|
||||
"Select template": "Вибрати шаблон",
|
||||
"Action logs": "Журнал дій",
|
||||
"Create template": "Створити шаблон",
|
||||
"Edit markdown": "Редагувати Markdown",
|
||||
"Add block": "Додати блок",
|
||||
"Add new": "Додати новий",
|
||||
"Add record": "Додати запис",
|
||||
"Add child": "Додати дочірній",
|
||||
"Collapse all": "Згорнути все",
|
||||
"Expand all": "Розгорнути все",
|
||||
"Expand/Collapse": "Розгорнути/згорнути",
|
||||
"Default collapse": "Згорнути за замовчуванням",
|
||||
"Tree table": "Деревовидна таблиця",
|
||||
"Custom field display name": "Спеціальне ім'я відображення поля",
|
||||
"Display fields": "Відображати поля колекції",
|
||||
"Edit record": "Редагувати запис",
|
||||
"Delete menu item": "Видалити пункт меню",
|
||||
"Add page": "Додати сторінку",
|
||||
"Add group": "Додати групу",
|
||||
"Add link": "Додати посилання",
|
||||
"Insert above": "Вставити вище",
|
||||
"Insert below": "Вставити нижче",
|
||||
"Save": "Зберегти",
|
||||
"Delete block": "Видалити блок",
|
||||
"Are you sure you want to delete it?": "Ви впевнені, що хочете видалити це?",
|
||||
"This is a demo text, **supports Markdown syntax**.": "Це демонстраційний текст, **підтримує синтаксис Markdown**.",
|
||||
"Filter": "Фільтр",
|
||||
"Connect data blocks": "Підключити блоки даних",
|
||||
"Action type": "Тип дії",
|
||||
"Actions": "Дії",
|
||||
"Insert": "Вставити",
|
||||
"Update": "Оновити",
|
||||
"View": "Переглянути",
|
||||
"View record": "Переглянути запис",
|
||||
"Refresh": "Оновити",
|
||||
"Data changes": "Зміни даних",
|
||||
"Field name": "Назва поля",
|
||||
"Before change": "Перед зміною",
|
||||
"After change": "Після зміни",
|
||||
"Delete record": "Видалити запис",
|
||||
"Create collection": "Створити колекцію",
|
||||
"Collection display name": "Відображуване ім'я колекції",
|
||||
"Collection name": "Ім'я колекції",
|
||||
"Inherits": "Наслідує",
|
||||
"Generate ID field automatically": "Автоматично генерувати поле ID",
|
||||
"Store the creation user of each record": "Зберігати користувача, який створив кожний запис",
|
||||
"Store the last update user of each record": "Зберігати користувача останнього оновлення кожного запису",
|
||||
"Store the creation time of each record": "Зберігати час створення кожного запису",
|
||||
"Store the last update time of each record": "Зберігати час останнього оновлення кожного запису",
|
||||
"More options": "Більше опцій",
|
||||
"Records can be sorted": "Записи можна сортувати",
|
||||
"Calendar collection": "Календарна колекція",
|
||||
"General collection": "Загальна колекція",
|
||||
"Connect to database view": "Підключити до перегляду бази даних",
|
||||
"Source collections": "Вихідні колекції",
|
||||
"Field source": "Джерело поля",
|
||||
"Preview": "Попередній перегляд",
|
||||
"Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Випадково генерується і може бути змінено. Підтримує літери, цифри і підкреслення, повинно починатися з літери.",
|
||||
"Storage type": "Тип зберігання",
|
||||
"Edit": "Редагувати",
|
||||
"Edit collection": "Редагувати колекцію",
|
||||
"Configure fields": "Налаштувати поля",
|
||||
"Configure columns": "Налаштувати стовпці",
|
||||
"Edit field": "Редагувати поле",
|
||||
"Override": "Замінити",
|
||||
"Override field": "Замінити поле",
|
||||
"Configure fields of {{title}}": "Налаштувати поля для {{title}}",
|
||||
"Association fields filter": "Фільтр асоціативних полів",
|
||||
"PK & FK fields": "PK & FK поля",
|
||||
"Association fields": "Асоціативні поля",
|
||||
"Choices fields": "Поля з вибором",
|
||||
"System fields": "Системні поля",
|
||||
"General fields": "Загальні поля",
|
||||
"Inherited fields": "Успадковані поля",
|
||||
"Parent collection fields": "Поля батьківської колекції",
|
||||
"Basic": "Основні",
|
||||
"Single line text": "Однорядковий текст",
|
||||
"Long text": "Довгий текст",
|
||||
"Phone": "Телефон",
|
||||
"Email": "Електронна пошта",
|
||||
"Number": "Число",
|
||||
"Integer": "Ціле число",
|
||||
"Percent": "Відсоток",
|
||||
"Password": "Пароль",
|
||||
"Advanced type": "Розширений",
|
||||
"Formula": "Формула",
|
||||
"Formula description": "Обчислення значення для кожного запису на основі інших полів у тому ж записі.",
|
||||
"Choices": "Вибір",
|
||||
"Checkbox": "Прапорець",
|
||||
"Single select": "Одиночний вибір",
|
||||
"Multiple select": "Множинний вибір",
|
||||
"Radio group": "Група радіокнопок",
|
||||
"Checkbox group": "Група прапорців",
|
||||
"China region": "Регіон Китаю",
|
||||
"Attachment": "Вкладення",
|
||||
"Date & Time": "Дата та час",
|
||||
"Datetime": "Дата та час",
|
||||
"Relation": "Відношення",
|
||||
"Link to": "Посилання на",
|
||||
"Link to description": "Використовується для швидкого створення взаємозв'язків між колекціями та сумісний з найпоширенішими сценаріями. Підходить для використання не програмістами. Якщо присутнє як поле, це список випадаючого вибору, за допомогою якого вибираються записи з цільової колекції. Після створення відбувається одночасне створення пов'язаних полів поточної колекції в цільовій колекції.",
|
||||
"Sub-table": "Підтаблиця",
|
||||
"Sub-details": "Підрозділи",
|
||||
"System info": "Системна інформація",
|
||||
"Created at": "Створено о",
|
||||
"Last updated at": "Останнє оновлення о",
|
||||
"Created by": "Створено користувачем",
|
||||
"Last updated by": "Останнє оновлення користувачем",
|
||||
"Add field": "Додати поле",
|
||||
"Field display name": "Відображуване ім'я поля",
|
||||
"Field type": "Тип поля",
|
||||
"Field interface": "Інтерфейс поля",
|
||||
"Date format": "Формат дати",
|
||||
"Year/Month/Day": "Рік/Місяць/День",
|
||||
"Year-Month-Day": "Рік-Місяць-День",
|
||||
"Day/Month/Year": "День/Місяць/Рік",
|
||||
"Show time": "Показати час",
|
||||
"Time format": "Формат часу",
|
||||
"12 hour": "12-годинний",
|
||||
"24 hour": "24-годинний",
|
||||
"Relationship type": "Тип відношення",
|
||||
"Inverse relationship type": "Зворотний тип відношення",
|
||||
"Source collection": "Вихідна колекція",
|
||||
"Source key": "Ключ вихідної колекції",
|
||||
"Target collection": "Цільова колекція",
|
||||
"Through collection": "Проміжна колекція",
|
||||
"Target key": "Ключ цільової колекції",
|
||||
"Foreign key": "Зовнішній ключ",
|
||||
"One to one": "Один до одного",
|
||||
"One to many": "Один до багатьох",
|
||||
"Many to one": "Багато до одного",
|
||||
"Many to many": "Багато до багатьох",
|
||||
"Foreign key 1": "Зовнішній ключ 1",
|
||||
"Foreign key 2": "Зовнішній ключ 2",
|
||||
"One to one description": "Використовується для створення взаємозв'язку один до одного. Наприклад, у користувача є профіль.",
|
||||
"One to many description": "Використовується для створення взаємозв'язку один до багатьох. Наприклад, у країни є багато міст, а місто може належати лише одній країні. Якщо присутнє як поле, це підтаблиця, яка відображає записи пов'язаної колекції. При створенні автоматично створюється поле 'Багато до одного' у пов'язаній колекції.",
|
||||
"Many to one description": "Використовується для створення взаємозв'язку багато до одного. Наприклад, місто може належати лише одній країні, а країна може мати багато міст. Якщо присутнє як поле, це список випадаючого вибору, за допомогою якого вибирається запис з пов'язаної колекції. При створенні автоматично створюється поле 'Один до багатьох' у пов'язаній колекції.",
|
||||
"Many to many description": "Використовується для створення взаємозв'язку багато до багатьох. Наприклад, у студента може бути багато викладачів, а викладач може мати багато студентів. Якщо присутнє як поле, це список випадаючого вибору, за допомогою якого вибираються записи з пов'язаної колекції.",
|
||||
"Generated automatically if left blank": "Генерується автоматично, якщо залишити порожнім",
|
||||
"Display association fields": "Відображати асоціативні поля",
|
||||
"Display field title": "Відображати назву поля",
|
||||
"Field component": "Компонент поля",
|
||||
"Allow multiple": "Дозволити декілька",
|
||||
"Quick upload": "Швидке завантаження",
|
||||
"Select file": "Вибрати файл",
|
||||
"Subtable": "Підтаблиця",
|
||||
"Subform": "Підформа",
|
||||
"Field mode": "Режим поля",
|
||||
"Allow add new data": "Дозволити додавання нових даних",
|
||||
"Record picker": "Вибір запису",
|
||||
"Toggles the subfield mode": "Переключає режим підполя",
|
||||
"Selector mode": "Режим селектора",
|
||||
"Subtable mode": "Режим підтаблиці",
|
||||
"Subform mode": "Режим підформи",
|
||||
"Edit block title": "Редагувати заголовок блоку",
|
||||
"Block title": "Заголовок блоку",
|
||||
"Pattern": "Шаблон",
|
||||
"Operator": "Оператор",
|
||||
"Editable": "Редагований",
|
||||
"Readonly": "Тільки для читання",
|
||||
"Easy-reading": "Зручне читання",
|
||||
"Add filter": "Додати фільтр",
|
||||
"Add filter group": "Додати групу фільтрів",
|
||||
"Comparison": "Порівняння",
|
||||
"is": "є",
|
||||
"is not": "не є",
|
||||
"contains": "містить",
|
||||
"does not contain": "не містить",
|
||||
"starts with": "починається з",
|
||||
"not starts with": "не починається з",
|
||||
"ends with": "закінчується на",
|
||||
"not ends with": "не закінчується на",
|
||||
"is empty": "є порожнім",
|
||||
"is not empty": "не є порожнім",
|
||||
"Edit chart": "Редагувати діаграму",
|
||||
"Add text": "Додати текст",
|
||||
"Filterable fields": "Поля для фільтрації",
|
||||
"Edit button": "Редагувати кнопку",
|
||||
"Hide": "Приховати",
|
||||
"Enable actions": "Увімкнути дії",
|
||||
"Import": "Імпортувати",
|
||||
"Export": "Експортувати",
|
||||
"Customize": "Налаштувати",
|
||||
"Custom": "Власний",
|
||||
"Function": "Функція",
|
||||
"Popup form": "Виринаюча форма",
|
||||
"Flexible popup": "Гнучка виринаюча форма",
|
||||
"Configure actions": "Налаштувати дії",
|
||||
"Display order number": "Відображати номер порядку",
|
||||
"Enable drag and drop sorting": "Увімкнути сортування перетягуванням",
|
||||
"Triggered when the row is clicked": "Спрацьовує при кліці на рядок",
|
||||
"Add tab": "Додати вкладку",
|
||||
"Disable tabs": "Вимкнути вкладки",
|
||||
"Details": "Деталі",
|
||||
"Edit tab": "Редагувати вкладку",
|
||||
"Relationship blocks": "Блоки відношень",
|
||||
"Select record": "Вибрати запис",
|
||||
"Display name": "Відображуване ім'я",
|
||||
"Select icon": "Вибрати значок",
|
||||
"Custom column name": "Власна назва стовпця",
|
||||
"Edit description": "Редагувати опис",
|
||||
"Required": "Обов'язкове",
|
||||
"Unique": "Унікальне",
|
||||
"Label field": "Поле мітки",
|
||||
"Default is the ID field": "За замовчуванням - це поле ID",
|
||||
"Set default sorting rules": "Встановити правила сортування за замовчуванням",
|
||||
"Set validation rules": "Встановити правила перевірки",
|
||||
"Max length": "Максимальна довжина",
|
||||
"Min length": "Мінімальна довжина",
|
||||
"Maximum": "Максимум",
|
||||
"Minimum": "Мінімум",
|
||||
"Max length must greater than min length": "Максимальна довжина повинна бути більшою за мінімальну довжину",
|
||||
"Min length must less than max length": "Мінімальна довжина повинна бути меншою за максимальну довжину",
|
||||
"Maximum must greater than minimum": "Максимум повинен бути більшим за мінімум",
|
||||
"Minimum must less than maximum": "Мінімум повинен бути меншим за максимум",
|
||||
"Validation rule": "Правило перевірки",
|
||||
"Add validation rule": "Додати правило перевірки",
|
||||
"Format": "Формат",
|
||||
"Regular expression": "Регулярний вираз",
|
||||
"Error message": "Повідомлення про помилку",
|
||||
"Length": "Довжина",
|
||||
"The field value cannot be greater than ": "Значення поля не може бути більше ніж ",
|
||||
"The field value cannot be less than ": "Значення поля не може бути менше ніж ",
|
||||
"The field value is not an integer number": "Значення поля не є цілим числом",
|
||||
"Set default value": "Встановити значення за замовчуванням",
|
||||
"Default value": "Значення за замовчуванням",
|
||||
"is before": "перед",
|
||||
"is after": "після",
|
||||
"is on or after": "включно після",
|
||||
"is on or before": "включно перед",
|
||||
"is between": "між",
|
||||
"Upload": "Завантажити",
|
||||
"Select level": "Вибрати рівень",
|
||||
"Province": "Область",
|
||||
"City": "Місто",
|
||||
"Area": "Район",
|
||||
"Street": "Вулиця",
|
||||
"Village": "Село",
|
||||
"Must select to the last level": "Потрібно вибрати до останнього рівня",
|
||||
"Move {{title}} to": "Перемістити {{title}} до",
|
||||
"Target position": "Цільове положення",
|
||||
"After": "Після",
|
||||
"Before": "Перед",
|
||||
"Add {{type}} before \"{{title}}\"": "Додати {{type}} перед \"{{title}}\"",
|
||||
"Add {{type}} after \"{{title}}\"": "Додати {{type}} після \"{{title}}\"",
|
||||
"Add {{type}} in \"{{title}}\"": "Додати {{type}} у \"{{title}}\"",
|
||||
"Original name": "Оригінальна назва",
|
||||
"Custom name": "Власна назва",
|
||||
"Custom Title": "Власний заголовок",
|
||||
"Options": "Опції",
|
||||
"Option value": "Значення опції",
|
||||
"Option label": "Позначення опції",
|
||||
"Color": "Колір",
|
||||
"Add option": "Додати опцію",
|
||||
"Related collection": "Пов'язана колекція",
|
||||
"Allow linking to multiple records": "Дозволити посилання на кілька записів",
|
||||
"Allow uploading multiple files": "Дозволити завантаження кількох файлів",
|
||||
"Configure calendar": "Налаштувати календар",
|
||||
"Title field": "Поле заголовка",
|
||||
"Custom title": "Власний заголовок",
|
||||
"Daily": "Щоденно",
|
||||
"Weekly": "Щотижня",
|
||||
"Monthly": "Щомісяця",
|
||||
"Yearly": "Щороку",
|
||||
"Repeats": "Повторюється",
|
||||
"Show lunar": "Показати місячний календар",
|
||||
"Start date field": "Поле початкової дати",
|
||||
"End date field": "Поле кінцевої дати",
|
||||
"Navigate": "Навігація",
|
||||
"Title": "Заголовок",
|
||||
"Description": "Опис",
|
||||
"Select view": "Вибрати перегляд",
|
||||
"Reset": "Скинути",
|
||||
"Importable fields": "Поля, які можна імпортувати",
|
||||
"Exportable fields": "Поля, які можна експортувати",
|
||||
"Saved successfully": "Успішно збережено",
|
||||
"Nickname": "Нікнейм",
|
||||
"Sign in": "Увійти",
|
||||
"Sign in via account": "Увійти через обліковий запис",
|
||||
"Sign in via phone": "Увійти через телефон",
|
||||
"Create an account": "Створити обліковий запис",
|
||||
"Sign up": "Зареєструватися",
|
||||
"Confirm password": "Підтвердити пароль",
|
||||
"Log in with an existing account": "Увійти з існуючим обліковим записом",
|
||||
"Signed up successfully. It will jump to the login page.": "Успішно зареєстровано. Відбудеться перехід на сторінку входу.",
|
||||
"Password mismatch": "Невідповідність паролів",
|
||||
"Users": "Користувачі",
|
||||
"Verification code": "Код перевірки",
|
||||
"Send code": "Відправити код",
|
||||
"Retry after {{count}} seconds": "Повторіть спробу через {{count}} секунд",
|
||||
"Roles": "Ролі",
|
||||
"Add role": "Додати роль",
|
||||
"Role name": "Назва ролі",
|
||||
"Configure": "Налаштувати",
|
||||
"Configure permissions": "Налаштувати дозволи",
|
||||
"Edit role": "Редагувати роль",
|
||||
"Action permissions": "Дозволи дій",
|
||||
"Menu permissions": "Дозволи меню",
|
||||
"Menu item name": "Назва пункту меню",
|
||||
"Allow access": "Дозволити доступ",
|
||||
"Action name": "Назва дії",
|
||||
"Allow action": "Дозволити дію",
|
||||
"Action scope": "Область дії",
|
||||
"Operate on new data": "Виконувати дії з новими даними",
|
||||
"Operate on existing data": "Виконувати дії з існуючими даними",
|
||||
"Yes": "Так",
|
||||
"No": "Ні",
|
||||
"Red": "Червоний",
|
||||
"Magenta": "Пурпурний",
|
||||
"Volcano": "Вулкан",
|
||||
"Orange": "Помаранчевий",
|
||||
"Gold": "Золотий",
|
||||
"Lime": "Лайм",
|
||||
"Green": "Зелений",
|
||||
"Cyan": "Бірюзовий",
|
||||
"Blue": "Синій",
|
||||
"Geek blue": "Гік-синій",
|
||||
"Purple": "Фіолетовий",
|
||||
"Default": "За замовчуванням",
|
||||
"Add card": "Додати картку",
|
||||
"edit title": "редагувати назву",
|
||||
"Turn pages": "Переключати сторінки",
|
||||
"Others": "Інші",
|
||||
"Save as template": "Зберегти як шаблон",
|
||||
"Save as block template": "Зберегти як шаблон блока",
|
||||
"Block templates": "Шаблони блоків",
|
||||
"Convert reference to duplicate": "Конвертувати посилання на дублікат",
|
||||
"Template name": "Назва шаблону",
|
||||
"Block type": "Тип блока",
|
||||
"No blocks to connect": "Немає блоків для підключення",
|
||||
"Action column": "Стовпець дій",
|
||||
"Records per page": "Записів на сторінці",
|
||||
"(Fields only)": "(Тільки поля)",
|
||||
"Button title": "Заголовок кнопки",
|
||||
"Button icon": "Значок кнопки",
|
||||
"Submitted successfully": "Успішно надіслано",
|
||||
"Operation succeeded": "Операція успішна",
|
||||
"Operation failed": "Операція не вдалася",
|
||||
"Open mode": "Режим відкриття",
|
||||
"Popup size": "Розмір спливаючого вікна",
|
||||
"Small": "Малий",
|
||||
"Middle": "Середній",
|
||||
"Large": "Великий",
|
||||
"Menu item title": "Заголовок пункту меню",
|
||||
"Menu item icon": "Значок пункту меню",
|
||||
"Target": "Ціль",
|
||||
"Position": "Позиція",
|
||||
"Insert before": "Вставити перед",
|
||||
"Insert after": "Вставити після",
|
||||
"UI Editor": "Редактор інтерфейсу",
|
||||
"ASC": "ASC",
|
||||
"DESC": "DESC",
|
||||
"Add sort field": "Додати поле сортування",
|
||||
"ID": "ID",
|
||||
"Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Ідентифікатор для використання в програмі. Підтримує літери, цифри і підкреслення, повинен починатися з літери.",
|
||||
"Drawer": "Висувний блок",
|
||||
"Dialog": "Діалогове вікно",
|
||||
"Delete action": "Видалити дію",
|
||||
"Custom column title": "Власний заголовок стовпця",
|
||||
"Column title": "Заголовок стовпця'",
|
||||
"Original title: ": "Оригінальний заголовок: ",
|
||||
"Delete table column": "Видалити стовпець таблиці",
|
||||
"Skip required validation": "Пропустити обов'язкову перевірку",
|
||||
"Form values": "Значення форми",
|
||||
"Fields values": "Значення полів",
|
||||
"The field has been deleted": "Поле було видалено",
|
||||
"When submitting the following fields, the saved values are": "При поданні наступних полів збережені значення:",
|
||||
"After successful submission": "Після успішної подачі",
|
||||
"Then": "Тоді",
|
||||
"Stay on current page": "Залишитися на поточній сторінці",
|
||||
"Redirect to": "Перенаправити на",
|
||||
"Save action": "Зберегти дію",
|
||||
"Exists": "Існує",
|
||||
"Filename": "Ім'я файлу",
|
||||
"Add condition": "Додати умову",
|
||||
"Add condition group": "Додати групу умов",
|
||||
"exists": "існує",
|
||||
"not exists": "не існує",
|
||||
"=": "=",
|
||||
"≠": "≠",
|
||||
">": ">",
|
||||
"≥": "≥",
|
||||
"<": "<",
|
||||
"≤": "≤",
|
||||
"Role UID": "UID ролі",
|
||||
"Precision": "Точність",
|
||||
"Formula mode": "Режим формули",
|
||||
"Expression": "Вираз",
|
||||
"Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Введіть +, -, *, /, ( ), щоб виконувати обчислення, введіть @, щоб відкрити змінні поля.",
|
||||
"Formula error.": "Помилка формули.",
|
||||
"Accept": "Прийняти",
|
||||
"Rich Text": "Розширений текст",
|
||||
"Junction collection": "Колекція перетину",
|
||||
"Leave it blank, unless you need a custom intermediate table": "Залиште його порожнім, якщо вам не потрібна власна проміжна таблиця",
|
||||
"Fields": "Поля",
|
||||
"Edit field title": "Редагувати заголовок поля",
|
||||
"Field title": "Заголовок поля",
|
||||
"Original field title: ": "Оригінальний заголовок поля: ",
|
||||
"Edit tooltip": "Редагувати підказку",
|
||||
"Delete field": "Видалити поле",
|
||||
"Select collection": "Вибрати колекцію",
|
||||
"Blank block": "Порожній блок",
|
||||
"Duplicate template": "Дублювати шаблон",
|
||||
"Reference template": "Посилання на шаблон",
|
||||
"Create calendar block": "Створити блок календаря",
|
||||
"Create kanban block": "Створити блок канбану",
|
||||
"Grouping field": "Поле для групування",
|
||||
"Single select and radio fields can be used as the grouping field": "Одиночні поля вибору та поля радіокнопок можуть бути використані як поле для групування",
|
||||
"Tab name": "Назва вкладки",
|
||||
"Current record blocks": "Блоки поточного запису",
|
||||
"Popup message": "Повідомлення у спливаючому вікні",
|
||||
"Delete role": "Видалити роль",
|
||||
"Role display name": "Назва ролі",
|
||||
"Default role": "Роль за замовчуванням",
|
||||
"All collections use general action permissions by default; permission configured individually will override the default one.": "За замовчуванням всі колекції використовують загальні права доступу до дій; індивідуально налаштовані дозволи перезапишуть загальні.",
|
||||
"Allows configuration of the whole system, including UI, collections, permissions, etc.": "Дозволяє налаштування всієї системи, включаючи інтерфейс, колекції, дозволи тощо.",
|
||||
"New menu items are allowed to be accessed by default.": "Новим пунктам меню дозволяється доступ за замовчуванням.",
|
||||
"Global permissions": "Глобальні дозволи",
|
||||
"General permissions": "Загальні дозволи",
|
||||
"Global action permissions": "Глобальні дозволи на дії",
|
||||
"General action permissions": "Загальні дозволи на дії",
|
||||
"Plugin settings permissions": "Дозволи на налаштування плагінів",
|
||||
"Allow to desgin pages": "Дозволяє створювати сторінки",
|
||||
"Allow to manage plugins": "Дозволяє керувати плагінами",
|
||||
"Allow to configure plugins": "Дозволяє налаштовувати плагіни",
|
||||
"Allows to configure interface": "Дозволяє налаштовувати інтерфейс",
|
||||
"Allows to install, activate, disable plugins": "Дозволяє встановлювати, активувати та вимикати плагіни",
|
||||
"Allows to configure plugins": "Дозволяє налаштовувати плагіни",
|
||||
"Action display name": "Назва дії",
|
||||
"Allow": "Дозволити",
|
||||
"Data scope": "Обсяг даних",
|
||||
"Action on new records": "Дія для нових записів",
|
||||
"Action on existing records": "Дія для існуючих записів",
|
||||
"All records": "Всі записи",
|
||||
"Own records": "Власні записи",
|
||||
"Permission policy": "Політика дозволів",
|
||||
"Individual": "Індивідуальна",
|
||||
"General": "Загальна",
|
||||
"Accessible": "Доступно",
|
||||
"Configure permission": "Налаштувати дозвіл",
|
||||
"Action permission": "Дозвіл на дію",
|
||||
"Field permission": "Дозвіл на поле",
|
||||
"Scope name": "Назва обсягу",
|
||||
"File storages": "Сховища файлів",
|
||||
"Storage display name": "Назва сховища",
|
||||
"Storage name": "Назва сховища",
|
||||
"Default storage": "Сховище за замовчуванням",
|
||||
"Add storage": "Додати сховище",
|
||||
"Edit storage": "Редагувати сховище",
|
||||
"Storage base URL": "Базовий URL сховища",
|
||||
"Destination": "Призначення",
|
||||
"Use the built-in static file server": "Використовувати вбудований статичний файловий сервер",
|
||||
"Local storage": "Локальне сховище",
|
||||
"Aliyun OSS": "Aliyun OSS",
|
||||
"Amazon S3": "Amazon S3",
|
||||
"Tencent COS": "Tencent COS",
|
||||
"Region": "Регіон",
|
||||
"Bucket": "Bucket",
|
||||
"Path": "Шлях",
|
||||
"Unsaved changes": "Незбережені зміни",
|
||||
"Are you sure you don't want to save?": "Ви впевнені, що не бажаєте зберегти?",
|
||||
"Dragging": "Перетягування",
|
||||
"Popup": "Спливаюче вікно",
|
||||
"Trigger workflow": "Тригер робочого процесу",
|
||||
"Request API": "Запит API",
|
||||
"Assign field values": "Присвоїти значення полям",
|
||||
"Constant value": "Константне значення",
|
||||
"Dynamic value": "Динамічне значення",
|
||||
"Current user": "Поточний користувач",
|
||||
"Current record": "Поточний запис",
|
||||
"Current time": "Поточний час",
|
||||
"System variables": "Системні змінні",
|
||||
"Date variables": "Змінні дати",
|
||||
"Popup close method": "Метод закриття спливаючого вікна",
|
||||
"Automatic close": "Автоматичне закриття",
|
||||
"Manually close": "Закрити вручну",
|
||||
"After successful update": "Після успішного оновлення",
|
||||
"Save record": "Зберегти запис",
|
||||
"Updated successfully": "Оновлено успішно",
|
||||
"After successful save": "Після успішного збереження",
|
||||
"After clicking the custom button, the following field values will be assigned according to the following form.": "Після натискання на власну кнопку, наступні значення полів будуть присвоєні згідно з наступною формою.",
|
||||
"After clicking the custom button, the following fields of the current record will be saved according to the following form.": "Після натискання на власну кнопку, наступні поля поточного запису будуть збережені згідно з наступною формою.",
|
||||
"Button background color": "Колір фону кнопки",
|
||||
"Highlight": "Виділення",
|
||||
"Danger red": "Небезпечний червоний",
|
||||
"Custom request": "Власний запит",
|
||||
"Request settings": "Налаштування запиту",
|
||||
"Request URL": "URL запиту",
|
||||
"Request method": "Метод запиту",
|
||||
"Request query parameters": "Параметри запиту",
|
||||
"Request headers": "Заголовки запиту",
|
||||
"Request body": "Тіло запиту",
|
||||
"Request success": "Успішний запит",
|
||||
"Invalid JSON format": "Недійсний формат JSON",
|
||||
"After successful request": "Після успішного запиту",
|
||||
"Add exportable field": "Додати експортоване поле",
|
||||
"Audit logs": "Журнал аудиту",
|
||||
"Record ID": "ID запису",
|
||||
"User": "Користувач",
|
||||
"Field": "Поле",
|
||||
"Select": "Вибрати",
|
||||
"Select Field": "Вибрати поле",
|
||||
"Field value changes": "Зміни значення поля",
|
||||
"One to one (has one)": "Один до одного (має один)",
|
||||
"One to one (belongs to)": "Один до одного (належить до)",
|
||||
"Use the same time zone (GMT) for all users": "Використовувати одну і ту ж часову зону (GMT) для всіх користувачів",
|
||||
"Province/city/area name": "Назва провінції/міста/району",
|
||||
"Enabled languages": "Включені мови",
|
||||
"View all plugins": "Переглянути всі плагіни",
|
||||
"Print": "Друк",
|
||||
"Done": "Готово",
|
||||
"Sign up successfully, and automatically jump to the sign in page": "Успішна реєстрація, автоматичне перехід на сторінку входу",
|
||||
"File manager": "Менеджер файлів",
|
||||
"ACL": "ACL",
|
||||
"Collection manager": "Менеджер колекцій",
|
||||
"Plugin manager": "Менеджер плагінів",
|
||||
"Local": "Локальний",
|
||||
"Built-in": "Вбудований",
|
||||
"Marketplace": "Маркетплейс",
|
||||
"Coming soon...": "Скоро буде...",
|
||||
"All plugin settings": "Всі налаштування плагінів",
|
||||
"Bookmark": "Закладка",
|
||||
"Manage all settings": "Керування всіма налаштуваннями",
|
||||
"Create inverse field in the target collection": "Створити зворотнє поле у цільовій колекції",
|
||||
"Inverse field name": "Назва зворотнього поля",
|
||||
"Inverse field display name": "Назва відображення зворотнього поля",
|
||||
"Bulk update": "Масове оновлення",
|
||||
"After successful bulk update": "Після успішного масового оновлення",
|
||||
"Bulk edit": "Масове редагування",
|
||||
"Data will be updated": "Дані будуть оновлені",
|
||||
"Selected": "Вибрані",
|
||||
"All": "Всі",
|
||||
"Update selected data?": "Оновити вибрані дані?",
|
||||
"Update all data?": "Оновити всі дані?",
|
||||
"Remains the same": "Залишається незмінним",
|
||||
"Changed to": "Змінено на",
|
||||
"Clear": "Очистити",
|
||||
"Add attach": "Додати вкладення",
|
||||
"Please select the records to be updated": "Будь ласка, виберіть записи, які потрібно оновити",
|
||||
"Selector": "Селектор",
|
||||
"Inner": "Внутрішній",
|
||||
"Search and select collection": "Пошук та вибір колекції",
|
||||
"Please fill in the iframe URL": "Будь ласка, заповніть URL-адресу iframe",
|
||||
"Fix block": "Виправити блок",
|
||||
"Plugin name": "Назва плагіна",
|
||||
"Plugin tab name": "Назва вкладки плагіна",
|
||||
"AutoGenId": "Автоматично створюване поле ID",
|
||||
"CreatedBy": "Запис користувача, що створив рядок",
|
||||
"UpdatedBy": "Запис користувача, що відредагував останній рядок",
|
||||
"CreatedAt": "Запис часу створення рядка",
|
||||
"UpdatedAt": "Запис часу останнього оновлення рядка",
|
||||
"Column width": "Ширина стовпця",
|
||||
"Sortable": "Сортований",
|
||||
"Enable link": "Включити посилання",
|
||||
"This is likely a NocoBase internals bug. Please open an issue at <1>here</1>": "Це, ймовірно, помилка внутрішніх компонентів NocoBase. Будь ласка, створіть проблему <1>тут</1>",
|
||||
"Render Failed": "Помилка відображення",
|
||||
"Feedback": "Зворотній зв'язок",
|
||||
"Try again": "Спробуйте ще раз",
|
||||
"Data template": "Шаблон даних",
|
||||
"Template fields have been removed and need to be reconfigured": "Поля шаблону були видалені і потребують повторної конфігурації"
|
||||
};
|
@ -2,13 +2,14 @@ import DownloadOutlined from '@ant-design/icons/DownloadOutlined';
|
||||
import { Field } from '@formily/core';
|
||||
import { useField } from '@formily/react';
|
||||
import { isString } from '@nocobase/utils/client';
|
||||
import { Button, Space } from 'antd';
|
||||
import { Button, Space, Modal } from 'antd';
|
||||
import cls from 'classnames';
|
||||
import { saveAs } from 'file-saver';
|
||||
import React, { useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import Lightbox from 'react-image-lightbox';
|
||||
import { useRecord } from '../../../record-provider';
|
||||
import { isImage, toArr, toImages } from './shared';
|
||||
import { isImage, isPdf, toArr, toImages } from './shared';
|
||||
import type { UploadProps } from './type';
|
||||
|
||||
type Composed = React.FC<UploadProps> & {
|
||||
@ -19,13 +20,20 @@ type Composed = React.FC<UploadProps> & {
|
||||
export const ReadPretty: Composed = () => null;
|
||||
|
||||
ReadPretty.File = function File(props: UploadProps) {
|
||||
const { t } = useTranslation();
|
||||
const record = useRecord();
|
||||
const field = useField<Field>();
|
||||
const value = isString(field.value) ? record : field.value;
|
||||
const images = toImages(toArr(value));
|
||||
const [photoIndex, setPhotoIndex] = useState(0);
|
||||
const [fileIndex, setFileIndex] = useState(0);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [fileType, setFileType] = useState<'image' | 'pdf'>();
|
||||
const { size } = props;
|
||||
|
||||
function closeIFrameModal() {
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={cls('ant-upload-picture-card-wrapper nb-upload', size ? `nb-upload-${size}` : null)}>
|
||||
@ -37,7 +45,14 @@ ReadPretty.File = function File(props: UploadProps) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
setVisible(true);
|
||||
setPhotoIndex(index);
|
||||
setFileIndex(index);
|
||||
setFileType('image');
|
||||
} else if(isPdf(file.extname)) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
setVisible(true);
|
||||
setFileIndex(index);
|
||||
setFileType('pdf');
|
||||
}
|
||||
// else {
|
||||
// saveAs(file.url, `${file.title}${file.extname}`);
|
||||
@ -97,21 +112,21 @@ ReadPretty.File = function File(props: UploadProps) {
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
{visible && (
|
||||
{visible && fileType === 'image' && (
|
||||
<Lightbox
|
||||
// discourageDownloads={true}
|
||||
mainSrc={images[photoIndex]?.imageUrl}
|
||||
nextSrc={images[(photoIndex + 1) % images.length]?.imageUrl}
|
||||
prevSrc={images[(photoIndex + images.length - 1) % images.length]?.imageUrl}
|
||||
mainSrc={images[fileIndex]?.imageUrl}
|
||||
nextSrc={images[(fileIndex + 1) % images.length]?.imageUrl}
|
||||
prevSrc={images[(fileIndex + images.length - 1) % images.length]?.imageUrl}
|
||||
// @ts-ignore
|
||||
onCloseRequest={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
setVisible(false);
|
||||
}}
|
||||
onMovePrevRequest={() => setPhotoIndex((photoIndex + images.length - 1) % images.length)}
|
||||
onMoveNextRequest={() => setPhotoIndex((photoIndex + 1) % images.length)}
|
||||
imageTitle={images[photoIndex]?.title}
|
||||
onMovePrevRequest={() => setFileIndex((fileIndex + images.length - 1) % images.length)}
|
||||
onMoveNextRequest={() => setFileIndex((fileIndex + 1) % images.length)}
|
||||
imageTitle={images[fileIndex]?.title}
|
||||
toolbarButtons={[
|
||||
<button
|
||||
key={'download'}
|
||||
@ -123,7 +138,7 @@ ReadPretty.File = function File(props: UploadProps) {
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const file = images[photoIndex];
|
||||
const file = images[fileIndex];
|
||||
saveAs(file.url, `${file.title}${file.extname}`);
|
||||
}}
|
||||
>
|
||||
@ -132,6 +147,55 @@ ReadPretty.File = function File(props: UploadProps) {
|
||||
]}
|
||||
/>
|
||||
)}
|
||||
|
||||
{visible && fileType === 'pdf' && (
|
||||
<Modal
|
||||
open={visible}
|
||||
title={'PDF - ' + images[fileIndex].title}
|
||||
onCancel={closeIFrameModal}
|
||||
footer={[
|
||||
<Button
|
||||
style={{
|
||||
textTransform: 'capitalize'
|
||||
}}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const file = images[fileIndex];
|
||||
saveAs(file.url, `${file.title}${file.extname}`);
|
||||
}}
|
||||
>
|
||||
{t('download')}
|
||||
</Button>,
|
||||
<Button onClick={closeIFrameModal} style={{textTransform: 'capitalize'}}>
|
||||
{t('close')}
|
||||
</Button>
|
||||
]}
|
||||
width={'85vw'}
|
||||
centered={true}
|
||||
>
|
||||
<div style={{
|
||||
padding: '8px',
|
||||
maxWidth: '100%',
|
||||
maxHeight: 'calc(100vh - 256px)',
|
||||
height: '90vh',
|
||||
width: '100%',
|
||||
background: 'white',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
overflowY: 'auto'
|
||||
}} >
|
||||
<iframe src={images[fileIndex].url} style={{
|
||||
width: '100%',
|
||||
maxHeight: '90vh',
|
||||
flex: '1 1 auto'
|
||||
}}>
|
||||
</iframe>
|
||||
</div>
|
||||
</Modal>
|
||||
)}
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { DeleteOutlined, DownloadOutlined, InboxOutlined, LoadingOutlined, PlusOutlined } from '@ant-design/icons';
|
||||
import { usePrefixCls } from '@formily/antd/esm/__builtins__';
|
||||
import { connect, mapProps, mapReadPretty } from '@formily/react';
|
||||
import { Upload as AntdUpload, Button, Progress, Space } from 'antd';
|
||||
import { Upload as AntdUpload, Button, Progress, Space, Modal } from 'antd';
|
||||
import cls from 'classnames';
|
||||
import { css } from '@emotion/css';
|
||||
import { saveAs } from 'file-saver';
|
||||
@ -10,7 +10,7 @@ import { useTranslation } from 'react-i18next';
|
||||
import Lightbox from 'react-image-lightbox';
|
||||
import 'react-image-lightbox/style.css'; // This only needs to be imported once in your app
|
||||
import { ReadPretty } from './ReadPretty';
|
||||
import { isImage, toArr, toFileList, toItem, toValue, useUploadProps } from './shared';
|
||||
import { isImage, isPdf, toArr, toFileList, toItem, toValue, useUploadProps } from './shared';
|
||||
import './style.less';
|
||||
import type { ComposedUpload, DraggerProps, DraggerV2Props, UploadProps } from './type';
|
||||
|
||||
@ -29,9 +29,13 @@ Upload.Attachment = connect((props: UploadProps) => {
|
||||
const [fileList, setFileList] = useState([]);
|
||||
const [sync, setSync] = useState(true);
|
||||
const images = fileList;
|
||||
const [photoIndex, setPhotoIndex] = useState(0);
|
||||
const [fileIndex, setFileIndex] = useState(0);
|
||||
const [visible, setVisible] = useState(false);
|
||||
const [fileType, setFileType] = useState<'image' | 'pdf'>();
|
||||
const { t } = useTranslation();
|
||||
function closeIFrameModal() {
|
||||
setVisible(false);
|
||||
}
|
||||
useEffect(() => {
|
||||
if (sync) {
|
||||
setFileList(toFileList(value));
|
||||
@ -48,8 +52,13 @@ Upload.Attachment = connect((props: UploadProps) => {
|
||||
e.stopPropagation();
|
||||
const index = fileList.indexOf(file);
|
||||
if (isImage(file.extname)) {
|
||||
setFileType('image');
|
||||
setVisible(true);
|
||||
setPhotoIndex(index);
|
||||
setFileIndex(index);
|
||||
} else if(isPdf(file.extname)) {
|
||||
setVisible(true);
|
||||
setFileIndex(index);
|
||||
setFileType('pdf');
|
||||
} else {
|
||||
saveAs(file.url, `${file.title}${file.extname}`);
|
||||
}
|
||||
@ -161,16 +170,16 @@ Upload.Attachment = connect((props: UploadProps) => {
|
||||
</div>
|
||||
</div>
|
||||
{/* 预览图片的弹框 */}
|
||||
{visible && (
|
||||
{visible && fileType === 'image' && (
|
||||
<Lightbox
|
||||
// discourageDownloads={true}
|
||||
mainSrc={images[photoIndex]?.imageUrl}
|
||||
nextSrc={images[(photoIndex + 1) % images.length]?.imageUrl}
|
||||
prevSrc={images[(photoIndex + images.length - 1) % images.length]?.imageUrl}
|
||||
mainSrc={images[fileIndex]?.imageUrl}
|
||||
nextSrc={images[(fileIndex + 1) % images.length]?.imageUrl}
|
||||
prevSrc={images[(fileIndex + images.length - 1) % images.length]?.imageUrl}
|
||||
onCloseRequest={() => setVisible(false)}
|
||||
onMovePrevRequest={() => setPhotoIndex((photoIndex + images.length - 1) % images.length)}
|
||||
onMoveNextRequest={() => setPhotoIndex((photoIndex + 1) % images.length)}
|
||||
imageTitle={images[photoIndex]?.title}
|
||||
onMovePrevRequest={() => setFileIndex((fileIndex + images.length - 1) % images.length)}
|
||||
onMoveNextRequest={() => setFileIndex((fileIndex + 1) % images.length)}
|
||||
imageTitle={images[fileIndex]?.title}
|
||||
toolbarButtons={[
|
||||
<button
|
||||
style={{ fontSize: 22, background: 'none', lineHeight: 1 }}
|
||||
@ -180,7 +189,7 @@ Upload.Attachment = connect((props: UploadProps) => {
|
||||
className="ril-zoom-in ril__toolbarItemChild ril__builtinButton"
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
const file = images[photoIndex];
|
||||
const file = images[fileIndex];
|
||||
saveAs(file.url, `${file.title}${file.extname}`);
|
||||
}}
|
||||
>
|
||||
@ -189,6 +198,54 @@ Upload.Attachment = connect((props: UploadProps) => {
|
||||
]}
|
||||
/>
|
||||
)}
|
||||
|
||||
{visible && fileType === 'pdf' && (
|
||||
<Modal
|
||||
open={visible}
|
||||
title={'PDF - ' + images[fileIndex].title}
|
||||
onCancel={closeIFrameModal}
|
||||
footer={[
|
||||
<Button
|
||||
style={{
|
||||
textTransform: 'capitalize'
|
||||
}}
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const file = images[fileIndex];
|
||||
saveAs(file.url, `${file.title}${file.extname}`);
|
||||
}}
|
||||
>
|
||||
{t('download')}
|
||||
</Button>,
|
||||
<Button onClick={closeIFrameModal} style={{textTransform: 'capitalize'}}>
|
||||
{t('close')}
|
||||
</Button>
|
||||
]}
|
||||
width={'85vw'}
|
||||
centered={true}
|
||||
>
|
||||
<div style={{
|
||||
padding: '8px',
|
||||
maxWidth: '100%',
|
||||
maxHeight: 'calc(100vh - 256px)',
|
||||
height: '90vh',
|
||||
width: '100%',
|
||||
background: 'white',
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
overflowY: 'auto'
|
||||
}} >
|
||||
<iframe src={images[fileIndex].url} style={{
|
||||
width: '100%',
|
||||
maxHeight: '90vh',
|
||||
flex: '1 1 auto'
|
||||
}}>
|
||||
</iframe>
|
||||
</div>
|
||||
</Modal>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}, mapReadPretty(ReadPretty.File));
|
||||
|
@ -14,6 +14,10 @@ export const isImage = (extName: string) => {
|
||||
return reg.test(extName);
|
||||
};
|
||||
|
||||
export const isPdf = (extName: string) => {
|
||||
return extName.toLowerCase().endsWith('.pdf');
|
||||
};
|
||||
|
||||
export const toMap = (fileList: any) => {
|
||||
if (!fileList) {
|
||||
return [];
|
||||
|
1289
packages/plugins/client/src/locale/uk-UA.json
Normal file
1289
packages/plugins/client/src/locale/uk-UA.json
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user