...

Универсальный виджет для просмотра истории изменения статусов (использование Imports)

Тема в разделе "Компоненты и интерфейс", создана пользователем ksannikov, 8 дек 2025.

  1. ksannikov

    ksannikov Активный участник

    Всем привет!

    В этом видео я покажу пример реализации универсального виджета для просмотра истории изменения статусов у элемента приложения.

    Дотягиваться до истории изменения статусов будем при помощи глобальной константы Imports, о которой рассказал ранее.

    Все подробности в ролике, а ниже код, который был использован для получения истории:

    Код:
    
    declare const console: any

    /** Функция инициализации */
    async function onInit(): Promise<void> {
        try {
            const 
    app = await Context.data.application?.fetch() as BaseApplicationItem<any, any>
            if (!
    app) return
            const 
    statuses = (app.fields.__status as any)?.all
            
    if (!statuses) return
            const 
    ns = (Imports as any)[app.namespace]
            if (!
    ns) return
            const 
    application = ns.app[app.code] as Application<any, any, any>
            if (!
    application) return
            const 
    status_changes = await application.statusHistory().where((f, g) => g.and(
                
    f.item.link(app)
            )).
    size(10000).all()

            if (!
    status_changes?.length) return
          
            
    let last_change = status_changes[status_changes.length - 1];
            
    Context.data.change_date = last_change.data.__createdAt
            Context
    .data.change_author = last_change.data.__createdBy
            status_changes
    .forEach(f => {
                
    let row = Context.data.history!.insert()
                
    row.old_status = statuses.find((item:any) => item.id === f.data.source)?.name ?? ''
                
    row.new_status = statuses.find((item:any) => item.id === f.data.target)?.name ?? ''
                
    row.change_date = f.data.__createdAt
                row
    .author = f.data.__createdBy
            
    })
            
    Context.data.history = Context.data.history

        
    } catch (e) {
            
    console.log(e)
        }

    }
    /** Функция открытия модального окна */
    async function openModalWindow(): Promise<void> {
        
    Context.data.show_modal_window = true
    }
    Еще больше полезной информации в ТГ канале WhatDaELMA365