...

Реализация функции предфильтрации для переменной типа Приложение (Несколько)

Тема в разделе "Примеры сценариев", создана пользователем alekc_bpm87, 14 апр 2023.

  1. alekc_bpm87

    alekc_bpm87 Эксперт

    Задача: Реализовать предфильтрацию для переменной типа Приложение (Несколько) - чтобы при выборе в данной переменной - не отображались ранее выбранные в этой переменной элементы.
    Реализация: Реализуем функцию предфильтрации переменной типа Приложение, используя метод setFilter()
    Код:
    
    async function apps_on_change(): Promise<void> {
        if(
    ViewContext.data.apps)
        {
            
    let apps_all await ViewContext.fields.apps.app.search()
                .
    where((fg) => g.and (
                
    f.__deletedAt.eq(null)
                ))
                .
    size(1000)
                .
    all();
            
    let apps_select await Promise.all(ViewContext.data.apps.map(=> 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((appFieldscontextglobalFilters) => 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();
    }
  2. victor.alekhin

    victor.alekhin Новичок

    А зачем вот эта строчка?

    Код:
    
    let apps_select await Promise.all(ViewContext.data.apps.map(=> x.fetch()));
    
    
    id объекта есть не только в data, но и в самом ссылочном объекте
    Код:
    
           let apps_filter apps_all.filter(app => Context.data.apps!.every(app_select => app_select.id != app.id));
            if (
    apps_filter) {
                
    Context.fields.apps.data.setFilter((appFieldscontextglobalFilters) => globalFilters.and(
                    
    appFields.__id.in(apps_filter.map(=> x.id))
                ));
            }