Задача: Реализовать предфильтрацию для переменной типа Приложение (Несколько) - чтобы при выборе в данной переменной - не отображались ранее выбранные в этой переменной элементы.
Реализация: Реализуем функцию предфильтрации переменной типа Приложение, используя метод setFilter()
Код:
async function apps_on_change(): Promise<void> {
if(ViewContext.data.apps)
{
let apps_all = await ViewContext.fields.apps.app.search()
.where((f, g) => g.and (
f.__deletedAt.eq(null)
))
.size(1000)
.all();
let apps_select = await Promise.all(ViewContext.data.apps.map(x => x.fetch()));
let apps_filter = apps_all.filter(app => apps_select.every(app_select=> app_select.data.__id != app.data.__id));
if(apps_filter)
{
ViewContext.fields.apps.data.setFilter((appFields, context, globalFilters) => globalFilters.and(
appFields.__id.in(apps_filter.map(x=>x.data.__id))
));
}
}
else
{
ViewContext.fields.apps.data.clearFilter();
}
}
где:
ViewContext.data.apps - переменная типа Приложение (Несколько);
Подключим данную функцию на событие изменения значения переменной ViewContext.data.apps.
Так же данную функцию, можно вызвать в onInit, чтобы при загрузке формы применилась предфильтрация для переменной:
Код:
async function onInit(): Promise<void> {
await apps_on_change();
}