Перейти к содержанию

Глобальные JS вставки

В системе есть возможность использовать JS при инициализации и авторизации в приложении.

Для этого в custom-app-settings необходимо добавить ключ spaResources, в котором необходимо указать JS-ресурсы, которые будут загружаться при инициализации или успешном входе в приложение на странице авторизации.

Формат ключа:

"spaResources": [{ "type": "js","src": "https://Адрес_ссылки.js"}]

События:

Событие Описание Пример
init Событие после инициализации приложения spaEvent('init', e => console.log('init', e))
auth Событие после авторизации в приложении spaEvent('auth', e => console.log('init', e))

Команды:

Команда Описание Пример
closeActiveModal Закрыть открытое в текущий момент модальное окно. spaCommand('closeActiveModal');
openPortal Открыть портал. В portalId указывается идентификатор портала. spaCommand('openPortal', { portalId: 123 });
open-file-preview Открыть превью файла spaCommand('open-file-preview', { previewLink: '...link...' });
spaCommand('open-file-preview', { file: { id: 1234, versionId: 1, name: 'test' } });
openTask Открыть задачу. В taskId указывается номер задачи, в параметре modal задается будет открыта задача в модальном окне (true) или нет (false) spaCommand('openTask', { taskId: 123, modal: true/false });
navigate Переход по ссылке. Ссылка указывается в параметре url в формате адресной строки после 'https://адрес_1Формы/spa' spaCommand('navigate', { url: '/user/profile/1234' });

Для получения информации о текущем пользователе при событии используйте: await spaApi.getSessionUser().data

Пример

Для начала необходимо разместить скрипт, к примеру, в папку на сервере. Точный адрес прописывается в параметр "src" в теле ключа:

"spaResources": [{ "type": "js","src": "https://Адрес_ссылки.js"}]

Пример JS-скрипта

;(() => { 
 const scriptJquerySrc = 'https://Адрес_ссылки.js' 
 const scriptHelpdeskSrc = 'https://Адрес_ссылки.js' 
 const additionalCss = '.atlwdg-trigger.atlwdg-SUBTLE {z-index: 999 !important;}' 
 const JQ_DATA = { 
         'components': '12104', 
         'customfield_10300': '11' 
 } 
 const addCSS = css => document.head.appendChild(document.createElement("style")).innerHTML=css; 
 const loadScript = (src, async = true, type = "text/javascript") => { 
         return new Promise((resolve, reject) => { 
                 try { 
                         const tag = document.createElement("script"); 
                         const container = document.head || document.body; 
                         tag.type = type; 
                         tag.async = async; 
                         tag.src = src; 
                         tag.addEventListener("load", () => { 
                                 resolve({ loaded: true, error: false }); 
                         }); 
                         tag.addEventListener("error", () => { 
                                 reject({ 
                                   loaded: false, 
                                   error: true, 
                                   message: `Failed to load script with src ${src}`, 
                                 }); 
                         }); 
                         container.appendChild(tag); 
                 } catch (error) { 
                         reject(error); 
                 } 
         }); 
 }; 
 let isInitialized = false; 
 const initialize = async function() { 
         if (isInitialized) { 
                 return 
         } 
         addCSS(additionalCss) 
         await loadScript(scriptJquerySrc); 
         await loadScript(scriptHelpdeskSrc); 
         isInitialized = true 
 }; 

 const extendJqPageProps = props => window.ATL_JQ_PAGE_PROPS = $.extend(window.ATL_JQ_PAGE_PROPS, props); 
 const guestAuthEvent = async () => { 
         extendJqPageProps({ 
                 fieldValues: JQ_DATA                 
         }) 
 } 

 const userAuthEvent = async () => { 
         const userInfo = await spaApi.getSessionUser().data; 
         extendJqPageProps({ 
                 fieldValues: { 
                         ...JQ_DATA, 
                         'fullname' : userInfo.name, 
                         'email' : userInfo.email 
                 }               
         }) 
 } 
 const authEventHandler = async e => { 
         await initialize(); 
         if (e.payload?.auth) { 
                 return await userAuthEvent() 
         } 
         return await guestAuthEvent() 
 } 
 spaEvent('auth', e => authEventHandler(e)) 
})(); 

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