В зависимости от типа, Store может обладать определённым набором свойств из списка:
- access;
- actions;
- baseStore;
- config;
- disableAutoSelect;
- display;
- filters;
- formGroups;
- formTabs;
- headerProperty;
- headerTemplate;
- html;
- httpApi;
- httpHooks;
- i18n;
- indexes;
- label;
- labels;
- navGroup;
- navLabel;
- objectLifeCycle;
- orderBy;
- props;
- states;
- storeActions;
- storeLifeCycle;
- tableColumns;
- tasks;
- type.
access
access: AccessRule[]
Устанавливает права доступа на объекты Store. Доступный набор разрешений: crud.
Для того, чтобы пользователь получил доступ к описанию Store и она отобразилась в интерфейсе сгенерированного веб-приложения, необходимо разрешение на чтение – r.
Если параметр не определён, доступ есть у всех пользователей, как если бы было указано:
access: [{ role: "all", permissions: "crud" }]
Если параметр указан, доступ есть только у тех групп пользователей, которым выданы разрешения.
Пример:
access" [
{ role: "devops", permissions: "cru" },
{ role: "supervisor", permissions: "r" },
]
Подробнее о настройках доступа в Blank в разделе Access control
actions
actions: Action[]
Описывает возможные действия над объектами, хранящимися в Store. Действия доступны через Websocket API и REST API.
Пример action для лайка фотографии:
actions: [
{
_id: "like",
icon: "fa fa-heart",
disabled: "($item.likes || []).indexOf($user._id) >= 0",
script: function ($db, $item, $user) {
let likes = $item.likes || [];
likes.push($user._id);
return $db.set({ _id: $item._id, likes: likes }, "photos");
},
},
],
baseStore
baseStore: "storeName"
Базовый Store. Если указан этот параметр, текущий Store будет работать с конфигурацией и объектами данных базового. Это требуется, если нужно отобразить одни и те же данные для одного пользователя в разных видах и разделах навигации в веб-приложении. Например, используется для того, чтобы у администратора был и свой профиль, и одновременно возможность просматривать список профилей других пользователей.
Все настройки Store с указанным baseStore переопредлеяют настройки базового Store, но не влияют на него.
config
config: WorkspaceStoreDesc {}
Переопредление конфигурации приложения для Store с типом workspace.
disableAutoSelect
Отключение автоматического выбора первого объекта в списке в интерфейсе веб-приложения (bool). Только для display:list
.
display
display: "list" | "single" | "table" | "grid" | "dashboard"
Тип отображения Store в интерфейсе веб-приложения. По-умолчанию равен list
.
Если вы не используете автогенерируемое приложение, обратите внимание на single, при использовании этого типа отображения будут изменения в работе через API.
dashboard
Описание отсутствует. Тип отображения еще дорабатывается, напишите нам, если хотите принять участие в тестировании.
entries [type:map]
entries: {}
Данные для Store с типом map.
Пример использования:
_commonSettings: {
type: "map",
entries: {
title: "My App",
locales: ["ru"],
defaultLocale: "ru",
signInLogo: "/logo.svg",
...
},
}
filters
filters: Filter[]
Массив заранее определенных запросов к БД, которые будут доступны в веб-приложении и при выполнении метода Find через API. Подробнее читайте в разделе Filters
formGroups
formGroups: ["formGroupName"]
Массив, указывающий порядок расположения групп на форме редактирования объекта. Названия групп должны совпадать с указанными группами в настройках props, например:
formGroups: ["{{$i18n.group2Label}}", "Group 1"],
props: {
prop1" {
...
formGroup: "Group 1",
...
},
prop2" {
...
formGroup: "{{$i18n.group2Label}}",
...
},
},
i18n: {
group2Label: "Group 2",
}
formTabs
formTabs: ["tabId" | { _id: "string", label: "Handlebars template", hidden: "JavaScript expression" }]
Определяет порядок и отображение табов в карточках объектов в веб-приложении.
headerProperty
headerProperty: "propName"
Определяет свойство для использования в заголовке карточек объектов Store в веб-приложении.
Значение по-умолчанию: name.
Пример:
headerProperty: "orderNumber",
headerTemplate
headerTemplate: "Handlebars template"
Определяет текст заголовка карточек объектов Store в веб-приложении.
Если параметр указан, значение headerProperty игнорируется и заголовок становится не редактируемым.
Пример:
headerTemplate: "{{$item.lastName}} {{$item.name}}"
html
html: "Handlebars-enabled template"
Шаблон на Handlebars для type:html
со следующей моделью данных:
{
$items: [] // Массив объектов Store
$user: {} // Объект пользователя, просматривающего Store
}
httpApi
httpApi: bool
Флаг формирования HTTP REST API для сторы. Значение по-умолчанию: false.
httpHooks
httpHooks: HTTPHook[]
Массив описаний методов Store, доступных через HTTP API. Подробнее читайте в разделе HTTPHooks
i18n
i18n: {}
Объект, содержащий специфичные для данной Store локализации.
Если локализации записаны прямо в корень объекта i18n, они будут относится к локали, установленное по-умолчанию для приложения. Для записи в другие локали, необходимо создать вложенные объекты, ключами для которых будут названия локалей:
i18n: {
storeLabel": "Название Store",
en": {
storeLabel: "Store name",
}
}
В значениях допускается указание плейсхолдеров %s
, которые будут заменены переданными аргументами
при вызове метода i18n.get();
Обратиться к записям в i18n можно через объект $i18n в шаблонах, или через модуль i18n в скриптах на JavaScript.
Работа с i18n из шаблонов
При доступе к i18n из шаблонов текущей Store, все локализации будут доступны напрямую:
label: "{{$i18n.storeLabel}}"
Для доступа к локализациям из других Store используется объект $stores:
label: "{{$i18n.$stores.otherStoreName.storeLabel}}"
Для доступа к общим локализациям из _commonSettings используется объект $settings:
label: "{{$i18n.$settings.phraseName}}"
Все обращения будут работать с текущей установленной локалью пользователя или локалью по-умолчанию.
indexes
indexes: []
Описание индексов хранилища.
Содержит массив аргументов для команды createIndex
в MongoDB. Каждый элемент может быть либо строковым названием индексируемого поля:
indexes: [
"lastName"
]
либо описание индекса в виде объекта:
indexes: [
{ "name": 1 }
]
либо массивом из двух объектов, где первый объект — это описание индекса, а второй — дополнительные параметры:
indexes: [
[{ login: 1 }, { unique: true }]
]
Конечно, можно сочетать все варианты описания индекса:
indexes: [
"lastName",
{ name: 1 },
[{ login: 1 }, { unique: true }]
]
При старте приложения, каждый элемент будет передан в команду createIndex
.
Подробнее об индексах в MongoDB можно почитать здесь: Indexes.
label
label: "Handlebars template"
Название Store, которое будет использоваться в навигации сгенерированного веб-приложения.
Пример:
label: "{{$i18n.storeLabel}}"
labels
labels: Label[]
Label {
icon: "className" //"fa fa-icon_name" или "material-icons text md-16 icon_name"
text: "Handlebars template", //Data model: { $item: {}, $user: {} }
color: "Handlebars template", //Data model: { $item: {}, $user: {} }
hidden: "JavaScript expression", //Variables: $item, $user
hideInForm: bool, // Скрывает лэйбл в форме редактирования объекта
showInList: int, // Определяет, на какой строке показывать лэйбл в элементе списка. Если 0 – не отображать
}
Массив аннотаций к объектам. Используется для добавления summary объектов в списке и на форме редактирования в сгенерированном веб-приложении.
Пример:
labels: [
{
icon: "fa fa-power-off",
color: "{{#if $item.disabled}}#ddd{{else}}#43A047{{/if}}",
hideInForm: true,
showInList: 1,
},
]
navGroup
navGroup: string,
Определяет расположения в навигации веб-приложения. Если группа не задана, ссылка на эти объекты будет выведена в первом уровне навигации
navOrder
navOrder: int,
Порядок размещения в навигации веб-приложения
navLabel
navLabel: "Handlebars template",
Название Store в навигации веб-приложения. Требуется, если нужно оставить опеределенный label в заголовке открытой в приложении Store, но в навигации она должна называться по-другому.
objectLifeCycle
objectLifeCycle: {
eventName: function () {}
},
Обработчики событий жизненного цикла объектов в Store на JavaScript.
Подробнее читайте в разделе ObjectLifeCycle
orderBy
orderBy: "propName",
Поле для сортировки данных по-умолчанию при запросах Find. Для сортировки в обратном порядке добавьте ‘-’ перед названием поля:
orderBy: "-propName",
props
props: {
propName: PropDesc {},
}
Структура данных для Store. Props – наиболее сложная и важная часть описания Store.
Простой пример объекта props:
props: {
name: {
type: "string",
display: "textInput",
label: "ФИО",
formOrder: 0,
required: true,
},
phone: {
type: "string",
display: "masked",
label: "Телефон",
mask: "+7 (|||) |||-||-||",
formOrder: 10,
required: "$item.name",
},
}
Подробнее читайте в разделе Props reference
states
states: {
stateName: StateDesc { label: "Handlebars template", navOrder: int }
}
Параметр для тех Store, объекты которых могут находится в детерминированном наборе состояний, переходя от одного состояния к другому. Подходит для различных процессов: документооборота, заказов, кампаний. Если параметр задан, у объектов появится специальное свойство _state и в веб-приложении будет отрисована дополнительная навигация по состояниям объектов.
storeActions
storeActions: Action[]
Действия, которые относятся ко всему Store, а не к его отдельным объектам. Также, как и Actions, доступны через Websocket API и REST API.
При вызове из веб-приложения в аргументы скрипта передаются текущие значения фильтров.
storeLifeCycle
storeLifeCycle: {
eventName: function () {},
},
Обработчики событий жизненного цикла объектов в Store на JavaScript.
Подробнее читайте в разделе StoreLifeCycle
tableColumns
tableColumns: ["propName" | ColumnDesc]
ColumnDesc {
prop: "propName",
display: "propDisplayType",
label: "columnHeader",
tableLink: true,
}
Определяет набор, порядок и тип отображения столбцов таблицы для display:html
.
В случае указания в виде объекта типа ColumnDesc
, имеется возможность переопределить некоторые свойства поля для отображения в таблице.
Так же объект может содержать дополнительное булевое свойство tableLink
, которое обозначает необходимость отобразить значение поля в виде
ссылки на объект в интерфейсе (только для полей с типом ref
).
tasks
tasks: [Task { schedule: "CRON-formatted string", script: function () {} }]
Задачи, требующие периодического запуска.
Подробнее читайте в разделе Tasks
type
type: "directory" | "single" | "map"
directory
Тип Store по-умолчанию. Предназначен для хранения коллекции данных.
single
В отличие от Directory, хранит единственный документ. Используется для хранения каких-либо настроек приложения.
map
Используется только для системных Store, в которых хранятся настройки самого приложения на Blank. Создавать новые Store с таким типом не имеет смысла, но при разработке, возможно, потребуется изменять настройки существующих Store с таким типом, таких как:
- _commonSettings
- _nav
Store с типом map не хранят данные в БД, вся информация записывается в поле entries описания Store.
workspace
Тип для частичного переопределения конфигурации. Если у пользователя указано свойство workspace с соответствующим значением, для него будет сформирована специальная конфигурация, объеденённая из базовой и конфигурации из свойства config workspace-а.