UNPKG

activator-oce-exporter

Version:

Extract Activator binder and convert it to valid OCE mono pacakge

113 lines (95 loc) 3.54 kB
import { veevaData } from './veeva-data.js'; import { FusionStore } from './services/fusion-store'; import { FusionLogger } from './services/fusion-logger'; const PATH_SEPARATOR = '::'; const FILE_TYPE = '.zip'; class FusionNavigation { static get veevaGoToConfig() { return { next: 'veevaGoToNext', previous: 'veevaGoToPrev', target: 'veevaGoToTarget', }; } static isValidInput(slide, direction) { return direction !== 'target' || !!slide; } static isActivatorGoTo(isActivator, isEditMode) { return isActivator && !isEditMode; } static navigate(slide, presentation, direction, isDocId) { if (FusionNavigation.isActivatorGoTo(FusionStore.isActivator, FusionStore.isEditMode)) { return FusionNavigation.activatorGoTo(slide, presentation, direction, isDocId); } if (FusionStore.isVeeva) { FusionNavigation.veevaGoTo(slide, presentation, direction, isDocId); } return null; } /** * @description Navigation to another slide/binder in Activator and Veeva. * @param {(string|number)} slide - slideName|slideDocId - target navigation slide. * @param {(string|number)} presentation - presentationId|presentationDocId - target navigation presentation. * @param {string} direction - target navigation direction (see FusionNavigation.veevaGoToConfig.keys). * @param {Boolean} isDocId - is navigation by document ids. */ static goTo(slide, presentation, direction = 'target', isDocId = false) { if (FusionNavigation.isValidInput(slide, direction)) { return FusionNavigation.navigate(slide, presentation, direction, isDocId); } return FusionLogger.error(`Invalid target slide: ${slide}`, 'FusionNavigation'); } static activatorGoTo(slide, presentation, direction, isDocId) { return { name: 'actions/activatorGoTo', data: { slide, presentation, direction, isDocId, }, }; } static getExtId(path, docId) { return path + PATH_SEPARATOR + docId; } static veevaGoTo(slide, presentation, direction, isDocId) { const gotoFunc = FusionNavigation.veevaGoToConfig[direction]; if (gotoFunc) { FusionNavigation[gotoFunc](slide, presentation, isDocId); } else { FusionLogger.error(`wrong veevaGoTo direction: ${direction}`, 'FusionNavigation'); } } static getMediaFileName(slideName) { return slideName + FILE_TYPE; } static docIdNavigation(slide, presentation) { FusionNavigation.getVaultPath() .then((path) => { const slideExtId = FusionNavigation.getExtId(path, slide); const presentationExtId = presentation ? FusionNavigation.getExtId(path, presentation) : ''; com.veeva.clm.gotoSlideV2(slideExtId, presentationExtId); }) .catch((err) => { FusionLogger.error(`Veeva error: ${err}`, 'FusionNavigation'); }); } static veevaGoToTarget(slide, presentation = '', isDocId) { if (isDocId) { FusionNavigation.docIdNavigation(slide, presentation); } else { const mediaFileName = FusionNavigation.getMediaFileName(slide); com.veeva.clm.gotoSlide(mediaFileName, presentation); } } static veevaGoToNext() { return com.veeva.clm.nextSlide(); } static veevaGoToPrev() { return com.veeva.clm.prevSlide(); } static getVaultPath() { return veevaData.getCurrentPresentationExternalId() .then(obj => obj.split(PATH_SEPARATOR).shift()) .catch(err => FusionLogger.error(err, 'navigation')); } } export { FusionNavigation };