/* eslint-disable */ module.exports = (function () { var dependentApps = { about: { appDefinitionId: '14dbef06-cc42-5583-32a7-3abd44da4908', pageId: 'about' }, followers: { appDefinitionId: '14ebe801-d78a-daa9-c9e5-0286a891e46f', pageId: 'following_followers' }, notifications: { appDefinitionId: '14f25924-5664-31b2-9568-f9c5ed98c9b1', pageId: 'notifications_app' }, settings: { appDefinitionId: '14f25dc5-6af3-5420-9568-f9c5ed98c9b1', pageId: 'settings' }, }; var membersAppDefId = '14cc59bc-f0b7-15b8-e1c7-89ce41d0e0c9'; var forumAppDefId = '14724f35-6794-cd1a-0244-25fd138f9242'; // This value is replaced with real while serving the script. var allMembersAppDefId = '14dbefd2-01b4-fb61-32a7-3abd44da4908'; var groups = { appDefinitionId: '14724f35-6794-cd1a-0244-25fd138f9242', pageId: 'groups_forum' }; let appToken; let sdk; function addPage(args) { return Promise.resolve(sdk.application.getPublicAPI(appToken, { appDefinitionId: membersAppDefId })) .then(membersAPI => { var options = Object.assign({ numbers: {}, showInLoginMenu: false, showInMemberMenu: true, social: true, socialHome: false, urlOverride: null }, args); return membersAPI[options.method]({ appDefinitionId: options.appDefinitionId, pageId: options.pageId, loginMenuTitle: options.loginMenuTitle, social: options.social, showInLoginMenu: options.showInLoginMenu, numbers: options.numbers, menuOrder: options.menuOrder, showInMemberMenu: options.showInMemberMenu, socialHome: options.socialHome, urlOverride: options.urlOverride }); }); } function addGroupsPage(args, groupsAppDefinitionId) { return Promise.resolve(sdk.application.getPublicAPI(appToken, { appDefinitionId: groupsAppDefinitionId })) .then(groupsApi => { var options = Object.assign({ urlOverride: null, }, args); return groupsApi[options.method]({ appDefinitionId: options.appDefinitionId, pageId: options.pageId, menuOrder: options.menuOrder, showInMemberMenu: options.showInMemberMenu, urlOverride: options.urlOverride, titleOverride: options.titleOverride, }); }); } function addAboutPage() { return addPage({ appDefinitionId: dependentApps.about.appDefinitionId, pageId: dependentApps.about.pageId, method: 'addApplication', loginMenuTitle: 'Profile', showInLoginMenu: true, menuOrder: 1, socialHome: true, urlOverride: 'profile' }); } function addFollowersPage() { return addPage({ appDefinitionId: dependentApps.followers.appDefinitionId, pageId: dependentApps.followers.pageId, method: 'addApplication', showInMemberMenu: false, menuOrder: 2, urlOverride: 'followers' }); } function addNotificationsPage() { var numbers = { key: 'notificationsCount', default: 0 }; return addPage({ appDefinitionId: dependentApps.notifications.appDefinitionId, pageId: dependentApps.notifications.pageId, numbers: numbers, method: 'addApplication', menuOrder: 4, social: false, urlOverride: 'notifications' }); } function addSettingsPage() { return addPage({ appDefinitionId: dependentApps.settings.appDefinitionId, pageId: dependentApps.settings.pageId, method: 'addApplication', menuOrder: 4, social: false, urlOverride: 'settings' }); } function addAllMembersPage() { return addPage({ method: 'addApplicationToSite', appDefinitionId: allMembersAppDefId }); } function addPostsPage() { var numbers = { key: 'postsCount', default: 0 }; return addPage({ numbers: numbers, method: 'addSection', appDefinitionId: forumAppDefId, pageId: 'member-posts-page', urlOverride: 'forum-posts', menuOrder: 2 }); } function addCommentsPage() { return addPage({ method: 'addSection', appDefinitionId: forumAppDefId, pageId: 'member-comments-page', urlOverride: 'forum-comments', menuOrder: 2 }); } function addLikesPage() { return addPage({ method: 'addSection', appDefinitionId: forumAppDefId, pageId: 'member-likes-page', urlOverride: 'forum-likes', menuOrder: 2 }); } function addGroupsForumPage(groupsAppDefinitionId) { return addGroupsPage({ method: 'addSection', appDefinitionId: groups.appDefinitionId, pageId: groups.pageId, urlOverride: 'forum', titleOverride: 'Discussions', menuOrder: 1 }, groupsAppDefinitionId); } function setDependantApps() { return Promise.resolve(sdk.application.getPublicAPI(appToken, { appDefinitionId: membersAppDefId })) .then(membersAPI => { var dependencies = Object.keys(dependentApps).map(function (app) { return dependentApps[app].appDefinitionId; }); return membersAPI && membersAPI.setDependantApps({ appId: forumAppDefId, dependencies: dependencies }); }); } function installMembersAreaSections() { return Promise.resolve() .then(addAboutPage) .then(addFollowersPage) .then(addAllMembersPage) .then(addPostsPage) .then(addNotificationsPage) .then(addSettingsPage) .then(setDependantApps); // .then(addCommentsPage) // .then(addLikesPage) } function installGroupsSections(appDefinitionId) { console.log('[forum]', 'installGroupsSections()', appDefinitionId); return Promise.resolve() .then(function () { return addGroupsForumPage(appDefinitionId) }); } function upgradeForum() { return sdk.info.getAppInstance({ appDefinitionId: forumAppDefId }).then(function (instance) { return new Promise(function (resolve) { fetch('https://forums.wix.com/_api/forums/this/upgrade?instance=' + instance, { method: 'POST', headers: { 'content-type': 'application/json' } }) .then(resolve) .catch(function (error) { console.error('upgradeForum()', error); resolve(); }); }); }); } return { editorReady: function (_editorSDK, _appToken) { return new Promise(function (resolve) { console.log('forum platform app is up'); appToken = _appToken; sdk = _editorSDK; return resolve(); }) .then(setDependantApps) }, getAppManifest: function () { return ({}); }, handleAction: function (args) { var type = args.type, payload = args.payload; try { switch (type) { case 'appInstalled': switch (payload.appDefinitionId) { case forumAppDefId: { return Promise.resolve() .then(() => { return Promise.all([ sdk.tpa.app.getDataByAppDefId(appToken, forumAppDefId), sdk.pages.data.getAll(appToken) ]); }) .then(res => { var forumAppData = res[0] || {}; var allPages = res[1] || []; var forumPage = allPages.find(page => page.tpaPageId === 'forum' && page.tpaApplicationId === forumAppData.applicationId); if (false) { return Promise.resolve(); } return forumPage && sdk.document.pages.navigateTo(appToken, {pageLink: {type: 'PageLink', pageId: forumPage.id}}); }) .then(() => sdk.document.save()) .then(() => { return sdk.application.install(appToken, { appDefinitionId: membersAppDefId, initiatorAppDefinitionId: forumAppDefId }); }); } case membersAppDefId: { return sdk.tpa.isApplicationInstalled(appToken, { appDefinitionId: forumAppDefId }) .then(function (isInstalled) { return isInstalled ? installMembersAreaSections().then(upgradeForum) : Promise.resolve(); }); } default: return Promise.resolve() } default: console.log(type, payload); return Promise.resolve(); } } catch (e) { Promise.reject(); throw e; } }, getControllerPresets: function () { return Promise.resolve([]); }, exports: { installGroupsSections: installGroupsSections, } }; })();