Глобальные 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))
})();
Скрипт позволяет встроить виджет стороннего мессенджера.