Представление свойств
<sf-property-view> — карточка одного объекта: поля сгруппированы в области,
области — в разделы, а каждое поле рисуется отрисовщиком своего типа. Берите
его для записи, настроек сайта или профиля; множество записей показывает
представление данных.
Компонент поставляется пакетом larena из репозитория simai/larena-ui
(папка components/, лицензия Apache-2.0), а не выпуском Framework.
Пример
Применение
Подключение пакета
Элемент загружается, только если пакет larena объявлен до подключения Core:
window.SF_BOOT_CONFIG = {packages: {larena: {base: '/assets/larena/<коммит пакета>/smart'}}}.
Сборка пакета публикуется выпуском репозитория simai/larena-ui
(см. Пакет larena для проекта без Larena). Подробнее — в разделе
Подключение Smart-компонентов.
Запись и порт свойств
Компонент не владеет данными. Разметка называет только объект: record-id —
какой объект читать, collection — его тип в словаре приложения. Значения,
ревизию, права и адреса отдаёт приложение через порт
simai.property-view-port. Смена record-id перечитывает объект и ничего не
сохраняет от предыдущего.
Порт — объект с полями version, capabilities и методом
raise(intent, payload, {signal}), который возвращает ответ приложения.
Компонент принимает версии порта от 1.0.0 до 1.13.0. Передайте порт
методом setHostPort или в ответ на событие sf-host-port-request, которое
компонент отправляет при подключении, пока порта у него нет.
Пример выше сам играет роль приложения: record.load отдаёт запись,
group.save принимает изменённые поля и возвращает следующую ревизию.
Нажмите карандаш у области, измените значение и сохраните — панель выходит из
правки только после ответа.
Возможности и намерения
capabilities перечисляет, что приложение умеет. Управление, за которым нет
возможности, компонент не рисует; приложение без возможности не сломано —
поле просто показывает значение только для чтения.
| Намерение | Возможность | Когда поднимается | Ответ applied |
|---|---|---|---|
record.load |
— | при подключении и при смене record-id |
{answer, record} |
group.save |
— | по кнопке сохранения области | запись следующей ревизии |
record.save |
— | сохранение всего объекта в режиме edit |
запись следующей ревизии |
record.create |
— | создание объекта в режиме create |
созданная запись |
record.delete |
— | по удалению, если в record.actions есть record.delete |
подтверждение удаления |
field.options |
field-options |
поле-ссылка открывает список кандидатов | страница вариантов |
field.upload |
field-upload |
человек выбрал файл, по намерению на файл | сохранённый файл |
record.open |
record-open |
активировано значение-ссылка | {answer} |
view.save, view.reset |
view-settings |
человек меняет раскладку или сбрасывает слой | раскладка новой ревизии |
view.profile, view.create, view.rename, view.delete |
view-settings |
работа с именованными видами | запись через выбранный вид |
Ответ — объект с полем answer: applied, conflict, refused или
unavailable. При сохранении conflict оставляет введённое и показывает
сообщение приложения (или conflict-text), refused с картой errors
ставит ошибки у конкретных полей, unavailable переводит карточку в состояние
ошибки.
Режимы: просмотр, правка, создание
Одна поверхность служит для любого объекта; что она предлагает, решают режим
mode и права из записи:
view— только показать объект: без правки, подвала, удаления и расстановки, какие бы права ни были у человека;auto(по умолчанию) — показать и предложить то, что этому человеку можно: правку, если вrecord.actionsестьrecord.edit, действия жизненного цикла и слои вида, доступные для записи;edit— все области открыты сразу, весь объект сохраняется одним намерениемrecord.saveодной ревизией;create—record.loadс режимомcreateотдаёт пустой объект коллекции, разложенный по её раскладке, все поля открыты, объект создаёт одно намерениеrecord.create. После создания компонент показывает новый объект в режимеauto, а приложение может перейти к его собственной странице.
Отмена в режимах edit и create отбрасывает введённое и отправляет
sf-property-view-cancel; панель при этом закрывается. Эти режимы требуют
порта версии 1.12.0.
Сохранение области
Область правится и сохраняется целиком: одно нажатие кнопки — одно намерение
group.save и одна ревизия. Ничего не отправляется при уходе фокуса и по
одному полю. Намерение несёт только изменённые поля и ревизию, прочитанную при
загрузке; сравнивает ревизии приложение.
{
record_id: 'record-00829e9f',
collection: 'docs.demo_solutions',
section: 'main',
group: 'main',
values: { title: 'Новое название' },
revision: 4
}
Структура записи
{
record_id: 'record-00829e9f',
collection: 'docs.demo_solutions',
revision: 4,
sections: [
{ key: 'main', label: 'Общее', groups: [
{ key: 'main', label: 'Основное', columns: 2, fields: [
{ key: 'title', label: 'Название', propertyType: 'string', value: '…', width: 'half', required: true },
] },
] },
],
}
sections обязателен даже для одного раздела; один раздел рисуется без
списка разделов. Поле занимает половину или всю ширину области (width),
область раскладывается в одну или две колонки (columns). Отрисовщик поля
выбирается по propertyType, а не по имени компонента. Типы свойств, их
значения и элементы правки описывает глава
Поля по типу свойства. Поле
с несколькими значениями (choices) в просмотре переносит метки на новые
строки, и каждая метка остаётся шириной в свой текст, а в правке при 13
вариантах и больше становится списком флажков.
Раздел, область или поле с rare: true скрыты, пока не задан show-rare;
приложение присылает их всегда, поэтому показ редких полей ничего не
перечитывает и не меняет значений. Поля с hidden: true не рисуются.
Разделы и раскладка
sections-as="list" ставит список разделов колонкой рядом с полями — для
экрана настроек с большим числом разделов; sections-as="tabs" — рядом
вкладок над полями — для записи с несколькими разделами. На узком экране
раздел открывается отдельным экраном с кнопкой возврата к списку
(back-label).
Шапка и подвал закреплены: прокручиваются только колонки разделов и полей.
Панель рядом со списком
panel показывает карточку немодальной панелью рядом со списком, из которого
открыт объект: список остаётся видимым и доступным. panel-label — название
записи в шапке панели и её доступное имя; ширину задают panel-size (1/2,
1, 2, full) или точная длина в panel-width.
Шапка панели предлагает то, что разрешило приложение:
- закрытие — событие
sf-property-view-closeс{reason, record_id, unsaved_fields}; закрывает панель приложение; - звезду избранного —
sf-property-view-favouriteс{record_id, collection, favourite}; звезда меняется, когда приложение задаётfavourite; - копирование ссылки, если в записи есть
address, —sf-property-view-address-copyс{address, url, copied, record_id}; - открытие на отдельной странице, если есть
addressи возможностьrecord-open, —sf-property-view-open-fullс{address, record_id}; - удаление, если в
record.actionsестьrecord.delete, — после ответа приходитsf-property-view-delete-recordс{record_id, collection, revision, answer}; спрашивать ли подтверждение, решает приложение.
Значение-ссылка поднимает record.open и затем отправляет
sf-property-view-open-record с {field, value, answer}. Смена состояния
карточки (загрузка, готово, правка, ошибка) отправляет
sf-property-view-state с {state, message}.
Именованные виды
Вид — целая раскладка с постоянным именем, а не фильтр поверх текущей. Человек выбирает из плоского списка: «Обычный», «Экспертный», «Для продаж», «Персональный». Слои — общий и личный — разрешаются внутри выбранного вида. Список видов приходит в записи:
view: {
profiles: [
{id: 'default', label: 'Обычный', shared: true},
{id: 'expert', label: 'Экспертный', shared: true},
{id: 'mine', label: 'Персональный', shared: false}
],
profile: 'default',
layers: { … },
editable: ['personal']
}
- Идентификатор вида постоянен: переименование меняет только подпись, и всё, что ссылается на вид, продолжает на него ссылаться.
sharedговорит, чей вид: общий видят все, личный — только его хозяин. Кто вправе писать общий слой, сказано вeditable.- Выбранный вид — собственный выбор человека (порт 1.13.0). Приложение
хранит его для человека и коллекции и отвечает на
record.loadиrecord.openчерез него, пока человек не выберет другой или этот вид не удалят; после перезагрузки человек видит тот вид, который выбрал. - Если вид один, выбора нет и компонент его не рисует.
- Последний общий вид удалить нельзя: компонент не предлагает это действие, а приложение отказывает, если его всё же попросили.
Каких решений здесь нет:
- Вида по умолчанию в компоненте: какой вид человек получает до первого выбора — или когда выбранный вид удалён, — решает приложение, например по группе человека.
- Хранения выбора в компоненте: выбор, сохранённый в браузере, исчез бы в другом браузере, поэтому выбор хранит приложение.
- Наследования видов: каждый вид — полная раскладка.
| Намерение | Когда | Что возвращает приложение |
|---|---|---|
view.profile |
выбран другой вид | запись, прочитанную через него; приложение запоминает выбор для человека и коллекции |
view.create |
заведён новый вид | запись через новый вид; идентификатор даёт приложение |
view.rename |
изменена подпись | запись; идентификатор не меняется |
view.delete |
вид удалён | запись через вид, который стал текущим |
Расстановка вида
Если приложение заявило возможность view-settings и человек вправе менять
хотя бы один слой, в шапке появляется кнопка «Настроить вид»
(configure-text). В режиме расстановки:
- поля перетаскивают между группами и на раздел в списке слева; на узкой панели, где список разделов — отдельный экран, поля переносят только между группами;
- группы переставляют перетаскиванием или кнопками «Выше» и «Ниже» для тех, кому удобнее нажимать;
- кнопки рядом с группой и полем добавляют область, переименовывают и удаляют её, убирают поле из области; разделу меняют название и значок или удаляют его — его области переходят в оставшийся раздел;
- поля, которых вид не показывает, лежат в области «Не размещённые»; убранное поле попадает туда же и ничего не теряет;
- «Настройки поля» ставят поле на всю ширину строки или в половину, его название в этом виде, шаблон и подсказку.
Каждое изменение сохраняется сразу намерением view.save с целевым слоем
(общий или личный) и его ревизией, поэтому «Готово» только закрывает режим.
«Отменить» возвращает раскладку, с которой режим был открыт. «Сбросить»
спрашивает подтверждение и намерением view.reset убирает весь слой, открывая
то, что лежит под ним. Если слой тем временем изменил кто-то другой, компонент
перечитывает раскладку и говорит об этом (view-conflict-text). Слой, который
человеку писать нельзя, показан недоступным с причиной от приложения.
Подписи
Подписи кнопок, подсказок и состояний компонент берёт на языке страницы
(русском или английском). Атрибуты *-text и *-label — edit-text,
save-text, empty-text, close-label и другие из справочника ниже —
заменяют их своими, например словами предметной области.
Доступность
- Карточка — область
region. Задайте ей имя черезaria-label, а у панели — черезpanel-label, который также виден в шапке: в стопке панелей человеку важно знать, какая запись открыта. - Поля и кнопки — нативные элементы управления и дочерние Smart-компоненты в
обычном порядке
Tab; у каждого поля есть видимая подпись изlabel. - Перечитывание записи не перемещает фокус.
- Ошибки, с которыми приложение отклонило сохранение, показываются у самих
полей, а их число — на панели действий (
errors-text). - Кнопки без текста — закрытие, копирование ссылки, звезда, меню «…» — берут
доступное имя на языке страницы; заменить его можно атрибутами
close-label,copy-link-label,favourite-labelиmenu-label.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-property-view> |
| Назначение | Поля одного объекта по разделам, группам и полям; каждое поле рисует набор рендереров своего типа, данные идут через отдельный порт хоста. Группа редактируется и сохраняется одной ревизией по кнопке, а значение ссылочного поля выбирается из кандидатов элемента постранично. Парный компонент к представлению данных: то показывает набор записей, этот — один объект. |
| Контракт | smart.property-view, версия 1.4.0 |
| Поставка | пакет larena (SF_BOOT_CONFIG.packages.larena) |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | host-required |
| Заготовка до прихода кода | сервер пишет data-sf-skeleton="record"; пока ждёт данные, рисует свой скелетон (Заготовка до прихода кода) |
Атрибуты
add-field-text—string, по умолчаниюAdd a field. Открывает список полей, которые может принять эта группа: тех, что представление никуда не помещает, и тех, что находятся в другой группе.add-group-text—string, по умолчаниюAdd an area. Называет кнопку, создающую новую область в конце компоновки.add-section-text—string, по умолчаниюAdd a section. Называет кнопку, создающую новый раздел.back-label—string, по умолчаниюBack. Элемент управления, который возвращает с экрана раздела к списку разделов; существует только ниже контрольной точки drawer. Выше неё разделы стоят рядом с группами, и возвращаться неоткуда.cancel-configuring-text—string, по умолчаниюCancel. Называет элемент управления, выходящий из режима компоновки с той компоновкой, с которой в него вошли. Это не сброс: сброс убирает слой, а этот элемент возвращает то, что было.cancel-name-text—string, по умолчаниюLeave the name. Называет крестик, оставляющий имя без изменений.cancel-text—string, по умолчаниюCancel. Подпись действия, которое отбрасывает введённое. Ничего не записано, поэтому отменять нечего.changed-text—string, по умолчаниюFields changed. Подпись перед количеством изменённых полей на панели действий.close-label—string, по умолчаниюClose. Доступное имя элемента закрытия панели. По умолчанию — слово на языке страницы; атрибут его переопределяет.collection—string, по умолчанию пусто. Тип объекта в словаре самого хоста. Передаётся обратно хосту и здесь не интерпретируется.collection-icon—string, по умолчанию пусто. Значок рядом с названием коллекции из иконочного шрифта Framework.collection-label—string, по умолчанию пусто. Название коллекции, показанное отдельной строкой над названием записи. Порт передаёт ключ коллекции; читаемое название принадлежит хосту и приходит сюда.configure-hint-narrow-text—string, по умолчаниюDrag fields between groups. Applied at once.. Выводится на полосе, пока представление настраивается в узкой панели, где список разделов — отдельный экран и поле нельзя перетащить на него.configure-hint-text—string, по умолчаниюDrag fields between groups and onto a section on the left. Applied at once.. Выводится на полосе, пока представление настраивается: что делает перетаскивание и что изменение применяется сразу.configure-text—string, по умолчаниюArrange the view. Элемент управления, который включает режим настройки. Показывается, только если хост объявляет view-settings и пользователь может записывать хотя бы один слой.conflict-text—string, по умолчаниюThe record changed; read it again. Текст конфликта, когда хост не передаёт своё сообщение.copy-link-label—string, по умолчаниюCopy link. Доступное имя элемента управления копированием; он появляется, только если хост передал адрес.delete-text—string, по умолчаниюDelete. Элемент управления, который просит хост удалить запись. Предлагается, только если среди действий записи естьrecord.delete.done-configuring-text—string, по умолчаниюDone. Выходит из режима настройки. Изменения уже сохранены, поэтому действие закрывает режим, а не подтверждает что-либо.edit-text—string, по умолчаниюedit. Подпись, открывающая группу для редактирования. По умолчанию — слово на языке страницы; атрибут его переопределяет.empty-record-text—string, по умолчаниюThis record has nothing to show. Выводится вместо полей, когда хост ответил записью без видимого содержимого. Без этой подписи панель выглядит пустой рамкой, которая читается как незавершённая загрузка.empty-text—string, по умолчаниюnot filled in. Как читается пустое значение. По умолчанию — слово на языке страницы; атрибут его переопределяет.errors-text—string, по умолчаниюErrors. Подпись перед количеством ошибок полей, с которыми хост отклонил сохранение.favourite—boolean, по умолчаниюfalse. Входит ли запись в избранное пользователя. Звезда сообщает о нажатии и перерисовывается, когда хост устанавливает это значение обратно: хранить признак избранного — задача хоста.favourite-label—string, по умолчаниюFavourite. Доступное имя звезды рядом с названием записи.field-label-text—string, по умолчаниюName. Называет поле в собственных настройках поля, где вводится имя поля в этом представлении. Коллекция хранит своё имя; сброс слоя возвращает его.field-settings-text—string, по умолчаниюField settings. Называет поверхность с шириной, шаблоном и подсказкой поля во время компоновки представления.hidden-text—string, по умолчаниюHide. Скрывает запись в этом слое. Отключено, если её скрыл слой выше; хост указывает это для каждой записи.hide-rare-text—string, по умолчаниюHide rare fields. Предлагает снова перестать показывать редкие записи.hint-text—string, по умолчаниюHint. Подсказка, сохранённая для поля в этом слое.in-this-group-text—string, по умолчаниюIn this area. Называет часть списка добавления полей, которую эта область уже содержит. Список один раз указывает, где поле находится сейчас, над полями, которые там находятся.inherited-text—string, по умолчаниюby default. Отметка значения, которое запись не задала и которое унаследовано от пакета или темы. Увидев её, пользователь понимает, что изменение источника изменит и это значение.link-copied-label—string, по умолчаниюLink copied. Название элемента управления копированием, пока на нём отображается галочка. Копирование не оставляет видимого следа, поэтому элемент сообщает о нём столько, сколько это делает буфер обмена Framework, а затем возвращается в исходное состояние.menu-label—string, по умолчаниюMore. Доступное имя меню «…» в шапке.move-down-text—string, по умолчаниюMove down. Перемещает группу на одну позицию вниз.move-up-text—string, по умолчаниюMove up. Перемещает группу на одну позицию вверх среди групп своего раздела — для тех, кто предпочитает нажимать, а не перетаскивать.new-group-title—string, по умолчаниюNew area. Имя, с которым создаётся новая область, пока пользователь не ввёл своё.new-section-title—string, по умолчаниюNew section. Имя, с которым создаётся новый раздел, пока пользователь не ввёл своё.no-match-text—string, по умолчаниюNothing matches. Выводится вместо списка, когда поиск не нашёл ни одного поля.open-full-label—string, по умолчаниюOpen as a page. Доступное имя элемента управления открытием на полной странице; он появляется, только если хост передал адрес.panel—boolean, по умолчаниюfalse. Отображается в немодальной панели рядом со списком, из которого открыт объект, а не в рабочей области. Панель немодальная намеренно: список остаётся видимым и доступным.panel-label—string, по умолчанию пусто. Название записи в шапке панели и доступное имя панели. Одного доступного имени недостаточно: панель без видимого заголовка не сообщает, какая запись открыта, а в стеке панелей это пользователю нужнее всего. Полная шапка с коллекцией и звездой — отдельный шаг.panel-size—string, по умолчанию1, значения:1/2,1,2,full. Ширина панели по собственной шкале панели.size—string, по умолчанию1, значения:1,1/2. Размер представления: текст, подписи полей, заголовки и элементы управления. 1/2 совпадает с таблицей размера 1/2.mode—string, по умолчаниюauto, значения:view,auto,edit,create. Для чего поставлена поверхность. view: показать объект без правки, подвала, удаления и расстановки, что бы человеку ни было разрешено. auto: показать и предложить то, что этому человеку можно (record.edit, действия жизненного цикла, слои, доступные для записи). edit: все группы открыты сразу, одно record.save. create: пустой объект коллекции, прочитанный через record.load в режиме create, все поля открыты, одно record.create.panel-width—string, по умолчанию пусто. Точная ширина панели — для потребителя, макету которого не подходит шаг шкалы. Пустое значение оставляет управлениеpanel-size; заданная здесь длина имеет приоритет. Панель в стопке сужается от этой ширины, а не от шкалы.personal-layer-text—string, по умолчаниюPersonal. Слой, который видит только этот пользователь. Он стоит в списке именованных представлений рядом с «Обычный» и «Экспертный», поэтому его название отвечает на тот же вопрос, что и остальные.rare-text—string, по умолчаниюrare. Отмечает рядом с именем запись, которую коллекция объявляет редкой.record-id—string, по умолчанию пусто. Какой объект читать. При изменении значения данные перечитываются через порт; от предыдущего объекта компонент ничего не сохраняет.remove-field-text—string, по умолчаниюRemove from this area. Называет элемент управления, убирающий поле из его области. Поле переходит в неразмещённые, откуда список области может вернуть его, и ничего не теряется.remove-group-text—string, по умолчаниюRemove this area. Называет элемент управления, убирающий область из представления. Её поля переходят в неразмещённые, а не удаляются вместе с ней.remove-section-text—string, по умолчаниюRemove this section. Называет элемент управления, убирающий раздел из представления. Его области переходят в оставшийся раздел.rename-text—string, по умолчаниюRename. Называет карандаш рядом с именем области или раздела во время компоновки представления, а также открываемое им поле.reset-view-ask-text—string, по умолчаниюReset the whole view?. Вопрос, который задаёт сброс перед удалением слоя. Сброс отменяет всё, что пользователь настроил в этом слое, а это больше, чем должно происходить от одного нажатия кнопки рядом с «готово».reset-view-text—string, по умолчаниюReset. Возвращает выбранный слой к тому, что лежит под ним.save-name-text—string, по умолчаниюSave the name. Называет галочку, записывающую вводимое имя в слой.save-text—string, по умолчаниюSave. Подпись действия, которое сохраняет открытую группу. Одно нажатие — одна ревизия.section-icon-text—string, по умолчаниюSection glyph. Называет выбор символа раздела во время компоновки представления.section-icons—string, по умолчанию пусто. Значки, которыми можно пометить раздел, — имена из набора иконок Framework через пробел или запятую. Пустое значение означает собственные сто двадцать иконок компонента, наиболее востребованные в продуктах; хост со своим словарём заменяет их, а не дополняет.sections-as—string, по умолчаниюlist, значения:list,tabs. Как отображаются разделы: списком рядом с группами — для экрана настроек с большим числом разделов, или рядом вкладок над ними — для записи с несколькими разделами. Сами разделы одинаковы в обоих вариантах.sections-label—string, по умолчаниюSections. Доступное имя списка разделов. По умолчанию — слово на языке страницы; атрибут его переопределяет.shared-layer-text—string, по умолчаниюEveryone's. Слой, который видят все. Если этот пользователь не может его записывать, слой отображается отключённым с причиной от хоста, а не скрывается — отсутствующий элемент управления воспринимается как отсутствующая функция.show-rare—boolean, по умолчаниюfalse. Показывает разделы, группы и поля, которые хост пометил как редкие. Это решение представления: оно ничего не записывает и не меняет значений.show-rare-text—string, по умолчаниюShow rare fields. Предлагает показать записи, которые коллекция объявляет редкими. Предлагается, только если запись содержит такую.shown-text—string, по умолчаниюShown. Называет элемент управления, показывающий или скрывающий запись в этом слое.template—string, по умолчаниюdefault, значения:default. Шаблон, которым рисуется представление.unplaced-hint-text—string, по умолчаниюFields this view does not show. Drag one into a group to place it, or drag a field here to take it out.. Устаревший атрибут: значение разбирается и игнорируется. Неразмещённые поля показывает аккордеон Framework, строки подсказки в нём нет.unplaced-title—string, по умолчаниюNot placed. Называет область с полями, которые это представление не помещает ни в одну группу. Отображается только во время компоновки представления.variant-text—string, по умолчаниюTemplate. Выбирает вариант шаблона из предлагаемых хостом для этого поля.view-conflict-text—string, по умолчаниюThe view changed and was read again. Выводится, когда слой изменился без участия этого пользователя и расположение было прочитано заново.view-denied-text—string, по умолчаниюYou may not change this layer. Причина по умолчанию для слоя, который этот пользователь не может записывать; используется, когда хост не передаёт свою.width-text—string, по умолчаниюFull width. Называет переключатель, при котором поле занимает всю строку, а не половину.view-profile-label—string, по умолчаниюView. Доступное имя элемента выбора, который определяет, какое именованное представление показано. Если не задано, компонент использует язык страницы.add-view-text—string, по умолчаниюAdd a view. Текст элемента управления, который создаёт новое именованное представление из расположения на экране. Если не задан, компонент использует язык страницы.new-view-text—string, по умолчаниюNew view. Название представления в момент создания, пока пользователь его не заменил. Представление «Новое представление» среди четырёх настоящих невозможно отличить от остальных, поэтому имя сразу открывается для ввода.delete-view-text—string, по умолчаниюRemove the view. Доступное имя элемента управления, который удаляет именованное представление.last-shared-view-text—string, по умолчаниюThe only view everyone has. Почему удаление не предлагается для последнего общего представления: область без представлений ничего не даёт пользователю, у которого нет своих. Показывается на недоступном элементе управления, а не как отказ после нажатия.
Свойства в документе макета
Узел типа smart.property-view в документе макета (simai.composition.document.v1) принимает:
- свойства:
cancel-text,changed-text,close-label,collection,conflict-text,copy-link-label,edit-text,empty-text,errors-text,mode,open-full-label,panel,panel-label,panel-size,record-id,save-text,sections-label,show-rare,size,template.
Значения свойств те же, что у одноимённых атрибутов, и того же типа, что в списке атрибутов: строковое значение пишется строкой ("size": "1", а не 1 — число отклоняется с диагностикой schema_enum или schema_type), логическое — true или false.
Методы
setHostPort(host: object)— возвращаетobject. Подключает адаптер хоста, предоставляющийraise(intent, payload, {signal}),versionиcapabilities.load(reason?: string)— возвращаетobject. Повторно читает объект через порт.editGroup(section: string, group: string)— возвращаетobject. Открывает одну группу для редактирования.cancelEdit()— возвращаетobject. Закрывает открытую группу, отбрасывая введённое. Ничего не записывает.saveGroup()— возвращаетobject. Сохраняет изменённые поля открытой группы одной ревизией.selectSection(key: string)— возвращаетobject. Открывает один раздел.changeField(field: object, value: any)— возвращаетobject. Фиксирует изменение поля;undefinedотменяет изменение, и сохранение ничего не передаёт для этого поля. Вызывается шаблоном редактирования; хосту он не нужен.getFieldOptionsPage(field: object)— возвращаетobject|null. Страница кандидатов, которую хост последней вернул для одного поля.getFieldOptionSearch(field: object)— возвращаетstring. Текст, введённый пользователем в элемент выбора одного поля.setFieldOptionSearch(field: object, text: string)— возвращаетobject. Записывает введённый текст, не обращаясь к хосту.loadFieldOptions(field: object, options?: object)— возвращаетobject. Запрашивает у хоста страницу вариантов для одного поля.closePanel(reason?: string)— возвращаетobject. Сообщает, что панель следует закрыть. Решение о закрытии принимает хост.copyAddress()— возвращаетobject. Копирует адрес, переданный хостом, и сообщает, разрешил ли это браузер.openFullPage()— возвращаетobject. Сообщает, что этот объект следует открыть на отдельной странице.getFieldUploads(field: object)— возвращаетarray. Файлы одного поля в процессе загрузки, в форме, которую читает sf-file-upload.startFieldUpload(field: object, items: array)— возвращаетobject. Передаёт хосту выбранные человеком файлы, по одному намерению на файл.retryFieldUpload(field: object, index: number)— возвращаетobject. Повторно отправляет один файл, загрузка которого не удалась.openReference(field: object, value: any)— возвращаетobject. Просит хост открыть ссылку, которую активировал человек.
События
Все события приходят на сам элемент и всплывают. Общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
sf-property-view-state—detailне описан.sf-property-view-close—detailне описан. Панель просит закрыть её и передаёт количество изменённых, но не сохранённых полей.sf-property-view-address-copy—detailне описан. Адрес окна скопирован, или браузер отказал в доступе к буферу обмена.sf-property-view-open-full—detailне описан. Пользователь запросил этот объект на полной странице по адресу, который передал хост.sf-property-view-delete-record—detailне описан. Пользователь запросил удаление записи; хост решает, спрашивать ли подтверждение и удалять ли вообще.sf-property-view-open-record—detailне описан. Активировано значение-ссылка; что открыть и где, решает хост.sf-host-port-request—detail:{ component?: object, context?: object }. Запрашивает у страницы порт хоста — один раз за подключение и только пока у элемента его нет. Общее соглашение для всех компонентов, принимающихsetHostPort. Ответ — вызовsetHostPortна цели события, сразу или позже.sf-property-view-favourite—detail:{ record_id?: string|null, collection?: string|null, favourite?: boolean }. Нажата звезда. Передаёт запись, коллекцию и запрошенное состояние; компонент ничего не меняет, пока хост не установит favourite обратно.sf-property-view-menu—detail:{ items?: array, open?: boolean }. Открыто меню «…» в шапке с пунктами, которые компонент предлагает для представления. Хост добавляет свои пункты через слот menu.sf-property-view-created—detail:{ record_id?: string|integer|null, collection?: string|null }. Форма создания создала объект; хост может перейти к его собственному месту. Компонент показывает новый объект в режиме auto.sf-property-view-cancel—detail:{ mode?: any }. Поверхность, открытая целиком (edit, create), отменена: введённое отбрасывается, а куда перейти, решает хост. Панель закрывается.
Доступность
- Роль: область (
region). - Доступное имя: обязательно.
- Клавиши: Нативные элементы управления и дочерние Smart-компоненты.
- Фокус: Фокус не перемещается при повторном чтении
Минимальная разметка
<sf-property-view collection="storage" record-id="42" aria-label="Запись"></sf-property-view>
Источник
simai/larena-ui@5f33ba576aebde377d5195ec71836eb4430aa84d:components/src/smart/property-viewsimai/larena-ui@5f33ba576aebde377d5195ec71836eb4430aa84d:components/src/smart/property-view/rule.js#name=cl-property-view
См. также
- Представление данных — множество записей, из которого открывается карточка.
- Admin Menu — навигация из того же пакета
larena.