File
Компонент для загрузки файлов. Позволяет загружать файлы в контент нод. Для дочерних ассоциаций поддерживается задание type/kind
.
При добавлении нового компонента Файл на форме достаточно указать правильный Имя свойства/Property Name (или оставить по умолчанию _content
, если подразумевается редактирование основного контента у документа). Все остальные настройки работают “из коробки”.
Выбор способа загрузки файлов осуществляется во вкладке Файл - поле Хранилище/Storage с значениями URL или Base64.
Настройка компонента
Для настройки компонента необходимо перейти во вкладку Файл, в поле Хранилище выбрать Url, в поле url прописать endpoint для загрузки файлов - /share/proxy/alfresco/eform/file
.
Привязка компонента к конкретному атрибуту выполняется стандартно, аналогично другим компонентам.
Для привязки type/kind
необходимо перейти на вкладку Файл, и заполнить Типы файлов. Название поля - заголовок для отображения, Значение - ключ type/kind
, который должен быть сформирован по следующему паттерну - node-uuid_type/node-uuid_kind
, при этом, возможно указание только type
- node-uuid_type
. Обратите внимание, что нужно использовать именно node_uuid, а не nodeRef полностью. Например - category-document-type/kind-d-scan-documents
.
Настройка отображения названия файла
На вкладке Файл добавлена возможность настраивать отображение названий файлов в списке - настройка Отображаемое имя значения. Поле принимает javascript-выражение, в котором необходимо присвоить переменной disp
строку, либо Promise.
Помимо стандартных переменных formio, доступных при написании javascript-выражений (data, instance, _ и т.д.) добавлены дополнительные:
originalFileName - содержит название файла по-умолчанию
file - объект, содержащий различную информацию о файле
record - Promise, полученный путём вызова
Records.get(file.data.recordRef)
. Если файл не связан ни с каким recordRef, значение record будет равно null.
Примеры использования настройки Value display name:
// Пример 1. Статическое название
disp = 'staticName.txt';
// Пример 2. Название, вычисленное асинхронно
disp = new Promise(resolve => {
// какие-то асинхронные действия
// ...
resolve('Асинхронное название файла')
});
// Пример 3. Использование record
disp = record ? record.load('.disp').then(result => `${result}.pdf`) : originalFileName;
Настройка отображения отдельных элементов компонента
На вкладку Отображение добавлена дополнительная настройка Элементы отображения, которая позволяет задавать условия отображения отдельных элементов (например, кнопка удаления файла, upload-зона с кнопкой для добавления нового файла).
Поле принимает javascript-выражение, в котором необходимо присвоить переменной value объект с необязательными свойствами upload, delete. Если какое-то из свойств не указано, то компонент сам будет решать, отображать элемент или скрывать, в зависимости от ситуации.
value = {
upload: false,
delete: false
}
Бэкенд
Для корректной работы контрола в режиме редактирования у значения “контент” должен быть реализован метод getAs
с аргументом “content-data”, который вернет структуру следующего содержания:
[
{
“url“: “ссылка_которая откроется при клике на файл.“
“name“: “Имя файла“
“size“: размер_файла_в_байтах
}
]
Синхронизация с виджетом документов
Для синхронизации с виджетом документов на форму нужно добавить поле docs:documents
с контролом file
:
На вкладке Файл указать тип(ы), с которыми следует загружать новые файлы (если файл загрузить без типа, то в виджете он не появится):