From 10514755b0d41af3d23a483f481ab853eba12ce5 Mon Sep 17 00:00:00 2001 From: Gilberto Ribeiro Date: Wed, 2 Sep 2020 16:45:20 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9E=20carregar=20usu=C3=A1rio=20antes?= =?UTF-8?q?=20do=20carregamento=20da=20p=C3=A1gina=20para=20evitar=20user?= =?UTF-8?q?=20undefined?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Gilberto Ribeiro --- legacy/spec/components/wrap.spec.tsx | 71 +++++++++++++ legacy/src/app.js | 126 +++++++++++------------ legacy/src/vms/user-vm.js | 1 + legacy/src/wrap.js | 115 --------------------- legacy/src/wrap.tsx | 144 +++++++++++++++++++++++++++ 5 files changed, 279 insertions(+), 178 deletions(-) create mode 100644 legacy/spec/components/wrap.spec.tsx delete mode 100644 legacy/src/wrap.js create mode 100644 legacy/src/wrap.tsx diff --git a/legacy/spec/components/wrap.spec.tsx b/legacy/spec/components/wrap.spec.tsx new file mode 100644 index 00000000..1fe02273 --- /dev/null +++ b/legacy/spec/components/wrap.spec.tsx @@ -0,0 +1,71 @@ +import m from 'mithril' +import mq from 'mithril-query' +import { Wrap } from '../../src/wrap' +import userVM from '../../src/vms/user-vm' +import '../lib/mocks/user-details.mock' + +describe('Wrap', () => { + describe('view', () => { + + beforeAll(() => { + window.optimizeObserver = { + addListener() { } + } + }) + + it('should display component after user is loaded', async () => { + // 1. arrange + const userMocked = UserDetailMockery()[0] + const user_id = userMocked.id + jasmine.Ajax + .stubRequest(`${apiPrefix}/user_details`) + .andReturn({ + responseText: `[{"id":${user_id},"name":"User Name"}]`, + }) + + const component = mq(Wrap(TestComponent, { user_id })) + + // this is a hack to wait inner promises to resolve + await sleep(0) + component.redraw() + // this is a hack to wait redraw execute after promises be resolved + await sleep(0) + + // 2. act + + // 3. assert + component.should.contain('INNER COMPONENT CONTENT') + }) + + it('should not display component before user is loaded', async () => { + // 1. arrange + const userMocked = UserDetailMockery()[0] + const user_id = userMocked.id + jasmine.Ajax + .stubRequest(`${apiPrefix}/user_details`) + .andReturn({ + responseText: `[{"id":${user_id},"name":"User Name"}]`, + }) + + const component = mq(Wrap(TestComponent, { user_id })) + + // 2. act + + // 3. assert + component.should.not.contain('INNER COMPONENT CONTENT') + }) + + function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + + }) +}) + +class TestComponent implements m.Component<{}> { + view() { + return ( +
INNER COMPONENT CONTENT
+ ) + } +} \ No newline at end of file diff --git a/legacy/src/app.js b/legacy/src/app.js index ed18edb9..96450673 100644 --- a/legacy/src/app.js +++ b/legacy/src/app.js @@ -3,7 +3,7 @@ import h from './h'; import _ from 'underscore'; import c from './c'; import Chart from 'chart.js'; -import { wrap } from './wrap'; +import { Wrap } from './wrap'; m.originalTrust = m.trust; m.trust = (text) => h.trust(text); @@ -93,81 +93,81 @@ m.trust = (text) => h.trust(text); */ m.route(rootEl, '/', { - '/': wrap(isUserProfile ? c.root.UsersShow : c.root.ProjectsHome, { menuTransparency: true, footerBig: true, absoluteHome: isUserProfile }), - '/explore': wrap(c.root.ProjectsExplore, { menuTransparency: true, footerBig: true }), - '/start': wrap(c.root.Start, { menuTransparency: true, footerBig: true }), - '/start-sub': wrap(c.root.SubProjectNew, { menuTransparency: false }), - '/projects/:project_id/contributions/new': wrap(c.root.ProjectsContribution), - '/projects/:project_id/contributions/fallback_create': wrap(c.root.ProjectsContribution), - '/projects/:project_id/contributions/:contribution_id/edit': wrap(c.root.ProjectsPayment, { menuShort: true }), - '/projects/:project_id/subscriptions/start': wrap(c.root.ProjectsSubscriptionContribution, { menuShort: true, footerBig: false }), - '/projects/:project_id/subscriptions/checkout': wrap(c.root.ProjectsSubscriptionCheckout, { menuShort: true, footerBig: false }), - '/projects/:project_id/subscriptions/thank_you': wrap(c.root.ProjectsSubscriptionThankYou, { menuShort: true, footerBig: false }), - [urlWithLocale('/projects/:project_id/contributions/new')]: wrap(c.root.ProjectsContribution), - [urlWithLocale('/projects/:project_id/contributions/:contribution_id/edit')]: wrap(c.root.ProjectsPayment, { menuShort: true }), - [urlWithLocale('/projects/:project_id/subscriptions/start')]: wrap(c.root.ProjectsSubscriptionContribution, { menuShort: true, footerBig: false }), - [urlWithLocale('/projects/:project_id/subscriptions/checkout')]: wrap(c.root.ProjectsSubscriptionCheckout, { menuShort: true, footerBig: false }), - [urlWithLocale('/projects/subscriptions/thank_you')]: wrap(c.root.ProjectsSubscriptionThankYou, { menuShort: true, footerBig: false }), - '/en': wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), - '/pt': wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/flexible_projects')]: wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/projects')]: wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), - '/projects': wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/explore')]: wrap(c.root.ProjectsExplore, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/start')]: wrap(c.root.Start, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/projects/:project_id/contributions/:contribution_id')]: wrap(c.root.ThankYou, { menuTransparency: false, footerBig: false }), - '/projects/:project_id/contributions/:contribution_id': wrap(c.root.ThankYou, { menuTransparency: false, footerBig: false }), - '/projects/:project_id/insights': wrap(c.root.Insights, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/projects/:project_id/insights')]: wrap(c.root.Insights, { menuTransparency: false, footerBig: false }), - '/projects/:project_id/contributions_report': wrap(c.root.ProjectsContributionReport, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/projects/:project_id/contributions_report')]: wrap(c.root.ProjectsContributionReport, { + '/': Wrap(isUserProfile ? c.root.UsersShow : c.root.ProjectsHome, { menuTransparency: true, footerBig: true, absoluteHome: isUserProfile }), + '/explore': Wrap(c.root.ProjectsExplore, { menuTransparency: true, footerBig: true }), + '/start': Wrap(c.root.Start, { menuTransparency: true, footerBig: true }), + '/start-sub': Wrap(c.root.SubProjectNew, { menuTransparency: false }), + '/projects/:project_id/contributions/new': Wrap(c.root.ProjectsContribution), + '/projects/:project_id/contributions/fallback_create': Wrap(c.root.ProjectsContribution), + '/projects/:project_id/contributions/:contribution_id/edit': Wrap(c.root.ProjectsPayment, { menuShort: true }), + '/projects/:project_id/subscriptions/start': Wrap(c.root.ProjectsSubscriptionContribution, { menuShort: true, footerBig: false }), + '/projects/:project_id/subscriptions/checkout': Wrap(c.root.ProjectsSubscriptionCheckout, { menuShort: true, footerBig: false }), + '/projects/:project_id/subscriptions/thank_you': Wrap(c.root.ProjectsSubscriptionThankYou, { menuShort: true, footerBig: false }), + [urlWithLocale('/projects/:project_id/contributions/new')]: Wrap(c.root.ProjectsContribution), + [urlWithLocale('/projects/:project_id/contributions/:contribution_id/edit')]: Wrap(c.root.ProjectsPayment, { menuShort: true }), + [urlWithLocale('/projects/:project_id/subscriptions/start')]: Wrap(c.root.ProjectsSubscriptionContribution, { menuShort: true, footerBig: false }), + [urlWithLocale('/projects/:project_id/subscriptions/checkout')]: Wrap(c.root.ProjectsSubscriptionCheckout, { menuShort: true, footerBig: false }), + [urlWithLocale('/projects/subscriptions/thank_you')]: Wrap(c.root.ProjectsSubscriptionThankYou, { menuShort: true, footerBig: false }), + '/en': Wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), + '/pt': Wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/flexible_projects')]: Wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/projects')]: Wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), + '/projects': Wrap(c.root.ProjectsHome, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/explore')]: Wrap(c.root.ProjectsExplore, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/start')]: Wrap(c.root.Start, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/projects/:project_id/contributions/:contribution_id')]: Wrap(c.root.ThankYou, { menuTransparency: false, footerBig: false }), + '/projects/:project_id/contributions/:contribution_id': Wrap(c.root.ThankYou, { menuTransparency: false, footerBig: false }), + '/projects/:project_id/insights': Wrap(c.root.Insights, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/projects/:project_id/insights')]: Wrap(c.root.Insights, { menuTransparency: false, footerBig: false }), + '/projects/:project_id/contributions_report': Wrap(c.root.ProjectsContributionReport, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/projects/:project_id/contributions_report')]: Wrap(c.root.ProjectsContributionReport, { menuTransparency: false, footerBig: false, }), - '/projects/:project_id/subscriptions_report': wrap(c.root.ProjectsSubscriptionReport, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/projects/:project_id/subscriptions_report')]: wrap(c.root.ProjectsSubscriptionReport, { + '/projects/:project_id/subscriptions_report': Wrap(c.root.ProjectsSubscriptionReport, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/projects/:project_id/subscriptions_report')]: Wrap(c.root.ProjectsSubscriptionReport, { menuTransparency: false, footerBig: false, }), - '/projects/:project_id/subscriptions_report_download': wrap(c.root.ProjectsSubscriptionReportDownload, { + '/projects/:project_id/subscriptions_report_download': Wrap(c.root.ProjectsSubscriptionReportDownload, { menuTransparency: false, footerBig: false, }), - [urlWithLocale('/projects/:project_id/subscriptions_report_download')]: wrap(c.root.ProjectsSubscriptionReportDownload, { + [urlWithLocale('/projects/:project_id/subscriptions_report_download')]: Wrap(c.root.ProjectsSubscriptionReportDownload, { menuTransparency: false, footerBig: false, }), - '/projects/:project_id/surveys': wrap(c.root.Surveys, { menuTransparency: false, footerBig: false, menuShort: true }), - '/projects/:project_id/fiscal': wrap(c.root.ProjectsFiscal, { menuTransparency: false, footerBig: false, menuShort: true }), - '/projects/:project_id/posts': wrap(c.root.Posts, { menuTransparency: false, footerBig: false }), - '/projects/:project_id/posts/:post_id': wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: true }), - [urlWithLocale('/projects/:project_id/posts')]: wrap(c.root.Posts, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/projects/:project_id/posts/:post_id')]: wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: true }), - '/projects/:project_id': wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), - '/users/:user_id': wrap(c.root.UsersShow, { menuTransparency: true, footerBig: false }), - [urlWithLocale('/users/:user_id')]: wrap(c.root.UsersShow, { menuTransparency: true, footerBig: false }), - '/contributions/:contribution_id/surveys/:survey_id': wrap(c.root.SurveysShow, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/contributions/:contribution_id/surveys/:survey_id')]: wrap(c.root.SurveysShow, { menuTransparency: false, footerBig: false }), - '/users/:user_id/edit': wrap(c.root.UsersEdit, { menuTransparency: true, footerBig: false }), - [urlWithLocale('/users/:user_id/edit')]: wrap(c.root.UsersEdit, { menuTransparency: true, footerBig: false }), - '/projects/:project_id/edit': wrap(c.root.ProjectEdit, { menuTransparency: false, hideFooter: true, menuShort: true }), - [urlWithLocale('/projects/:project_id/edit')]: wrap(c.root.ProjectEdit, { menuTransparency: false, hideFooter: true, menuShort: true }), - '/projects/:project_id/rewards/:reward_id/surveys/new': wrap(c.root.SurveyCreate, { menuTransparency: false, hideFooter: true, menuShort: true }), - [urlWithLocale('/follow-fb-friends')]: wrap(c.root.FollowFoundFriends, { menuTransparency: false, footerBig: false }), - '/follow-fb-friends': wrap(c.root.FollowFoundFriends, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/:project')]: wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), - '/:project': wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), - [urlWithLocale('/team')]: wrap(c.root.Team, { menuTransparency: true, footerBig: true }), - '/team': wrap(c.root.Team, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/jobs')]: wrap(c.root.Jobs, { menuTransparency: true, footerBig: true }), - '/jobs': wrap(c.root.Jobs, { menuTransparency: true, footerBig: true }), - '/press': wrap(c.root.Press, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/press')]: wrap(c.root.Press, { menuTransparency: true, footerBig: true }), + '/projects/:project_id/surveys': Wrap(c.root.Surveys, { menuTransparency: false, footerBig: false, menuShort: true }), + '/projects/:project_id/fiscal': Wrap(c.root.ProjectsFiscal, { menuTransparency: false, footerBig: false, menuShort: true }), + '/projects/:project_id/posts': Wrap(c.root.Posts, { menuTransparency: false, footerBig: false }), + '/projects/:project_id/posts/:post_id': Wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: true }), + [urlWithLocale('/projects/:project_id/posts')]: Wrap(c.root.Posts, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/projects/:project_id/posts/:post_id')]: Wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: true }), + '/projects/:project_id': Wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), + '/users/:user_id': Wrap(c.root.UsersShow, { menuTransparency: true, footerBig: false }), + [urlWithLocale('/users/:user_id')]: Wrap(c.root.UsersShow, { menuTransparency: true, footerBig: false }), + '/contributions/:contribution_id/surveys/:survey_id': Wrap(c.root.SurveysShow, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/contributions/:contribution_id/surveys/:survey_id')]: Wrap(c.root.SurveysShow, { menuTransparency: false, footerBig: false }), + '/users/:user_id/edit': Wrap(c.root.UsersEdit, { menuTransparency: true, footerBig: false }), + [urlWithLocale('/users/:user_id/edit')]: Wrap(c.root.UsersEdit, { menuTransparency: true, footerBig: false }), + '/projects/:project_id/edit': Wrap(c.root.ProjectEdit, { menuTransparency: false, hideFooter: true, menuShort: true }), + [urlWithLocale('/projects/:project_id/edit')]: Wrap(c.root.ProjectEdit, { menuTransparency: false, hideFooter: true, menuShort: true }), + '/projects/:project_id/rewards/:reward_id/surveys/new': Wrap(c.root.SurveyCreate, { menuTransparency: false, hideFooter: true, menuShort: true }), + [urlWithLocale('/follow-fb-friends')]: Wrap(c.root.FollowFoundFriends, { menuTransparency: false, footerBig: false }), + '/follow-fb-friends': Wrap(c.root.FollowFoundFriends, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/:project')]: Wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), + '/:project': Wrap(c.root.ProjectsShow, { menuTransparency: false, footerBig: false }), + [urlWithLocale('/team')]: Wrap(c.root.Team, { menuTransparency: true, footerBig: true }), + '/team': Wrap(c.root.Team, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/jobs')]: Wrap(c.root.Jobs, { menuTransparency: true, footerBig: true }), + '/jobs': Wrap(c.root.Jobs, { menuTransparency: true, footerBig: true }), + '/press': Wrap(c.root.Press, { menuTransparency: true, footerBig: true }), + [urlWithLocale('/press')]: Wrap(c.root.Press, { menuTransparency: true, footerBig: true }), - [urlWithLocale('/projects/:project_id/publish')]: wrap(c.root.Publish, { menuTransparency: false, hideFooter: true, menuShort: true }), - ['/projects/:project_id/publish']: wrap(c.root.Publish, { menuTransparency: false, hideFooter: true, menuShort: true }), - [urlWithLocale('/projects/:project_id/publish-by-steps')]: wrap(c.root.ProjectsPublishBySteps, { menuTransparency: false, hideFooter: true, menuShort: true }), - ['/projects/:project_id/publish-by-steps']: wrap(c.root.ProjectsPublishBySteps, { menuTransparency: false, hideFooter: true, menuShort: true }), + [urlWithLocale('/projects/:project_id/publish')]: Wrap(c.root.Publish, { menuTransparency: false, hideFooter: true, menuShort: true }), + ['/projects/:project_id/publish']: Wrap(c.root.Publish, { menuTransparency: false, hideFooter: true, menuShort: true }), + [urlWithLocale('/projects/:project_id/publish-by-steps')]: Wrap(c.root.ProjectsPublishBySteps, { menuTransparency: false, hideFooter: true, menuShort: true }), + ['/projects/:project_id/publish-by-steps']: Wrap(c.root.ProjectsPublishBySteps, { menuTransparency: false, hideFooter: true, menuShort: true }), }); } })(); diff --git a/legacy/src/vms/user-vm.js b/legacy/src/vms/user-vm.js index 262d951b..84115dc1 100644 --- a/legacy/src/vms/user-vm.js +++ b/legacy/src/vms/user-vm.js @@ -166,6 +166,7 @@ const fetchUser = (user_id, handlePromise = true, customProp = currentUser) => { if (!handlePromise) { return lUser.load(); } else { + customProp(currentUser()); // first load user from cache lUser .load() .then( diff --git a/legacy/src/wrap.js b/legacy/src/wrap.js deleted file mode 100644 index 0adb6b40..00000000 --- a/legacy/src/wrap.js +++ /dev/null @@ -1,115 +0,0 @@ -/** global CatarseAnalytics */ -import m from 'mithril'; -import _ from 'underscore'; -import h from './h'; -import c from './c'; - -let app = document.getElementById('application'); -let body = document.body; - -export function wrap(component, customAttr) { - if (!app) { - app = document.getElementById('application'); - } - - let firstRun = true; // Indica se é a primeira vez q executa um controller. - return { - oninit: function (vnode) { - - try { - if (firstRun) { - firstRun = false; - } else { - // só roda se nao for firstRun - try { - CatarseAnalytics.pageView(false); - CatarseAnalytics.origin(); //force update of origin's cookie - } catch (e) { - console.error(e); - } - } - const parameters = app.getAttribute('data-parameters') ? JSON.parse(app.getAttribute('data-parameters')) : {}; - let attr = customAttr, - postParam = m.route.param('post_id') || parameters.post_id, - projectParam = m.route.param('project_id') || parameters.project_id, - projectUserIdParam = m.route.param('project_user_id') || parameters.user_id || parameters.project_user_id, - userParam = m.route.param('user_id') || app.getAttribute('data-userid') || parameters.user_id, - rewardIdParam = m.route.param('reward_id'), - surveyIdParam = m.route.param('survey_id'), - thankYouParam = app && JSON.parse(app.getAttribute('data-contribution')); - - const addToAttr = function (newAttr) { - attr = _.extend({}, newAttr, attr); - }; - - if (postParam) { - addToAttr({ post_id: postParam }); - } - - if (projectParam) { - addToAttr({ project_id: projectParam }); - } - - if (userParam) { - addToAttr({ user_id: userParam }); - } - - if (projectUserIdParam) { - addToAttr({ project_user_id: projectUserIdParam }); - } - - if (surveyIdParam) { - addToAttr({ survey_id: surveyIdParam }); - } - - if (rewardIdParam) { - addToAttr({ reward_id: rewardIdParam }); - } - - if (thankYouParam) { - addToAttr({ contribution: thankYouParam }); - } - - if (window.localStorage && window.localStorage.getItem('globalVideoLanding') !== 'true') { - addToAttr({ withAlert: false }); - } - - if (document.getElementById('fixed-alert')) { - addToAttr({ withFixedAlert: true }); - } - - body.className = 'body-project closed'; - - vnode.state.attr = attr; - } catch(e) { - console.log('Error on wrap.oninit:', e); - } - }, - oncreate: function(vnode) { - const hasUnmanagedRootComponent = app && - app.children.app && - app.children.length > 1; - - const removeUnmanagedRootComponentFromDom = () => { - app.removeChild(app.children.app); - }; - - if (hasUnmanagedRootComponent) { - removeUnmanagedRootComponentFromDom(); - } - }, - view: function ({ state }) { - const key = 0; - try { - return m('div#app', {key}, [ - m(c.root.Menu, state.attr), - m(component, state.attr), - state.attr.hideFooter ? '' : m(c.root.Footer, state.attr), - ]); - } catch(e) { - console.log('Error on wrap.view:', e); - return m('div#app', {key}); - } - } - }; -} \ No newline at end of file diff --git a/legacy/src/wrap.tsx b/legacy/src/wrap.tsx new file mode 100644 index 00000000..7476b788 --- /dev/null +++ b/legacy/src/wrap.tsx @@ -0,0 +1,144 @@ +/** global CatarseAnalytics */ +import m from 'mithril' +import _ from 'underscore' +import h from './h' +import c from './c' +import userVM from './vms/user-vm' + +let app = document.getElementById('application') +let body = document.body + +export function Wrap(Component, customAttr) { + if (!app) { + app = document.getElementById('application') + } + + let firstRun = true + let loadingUserDetails = false + + function loadUserDetails(userId) { + loadingUserDetails = true + userVM + .fetchUser(userId, false) + .then(() => loadingUserDetails = false) + .catch(error => { + loadingUserDetails = false + h.captureMessage(`Could not load the user: ${error.message}`) + }) + } + + return { + oninit(vnode) { + + try { + vnode.state.attr = {} + if (firstRun) { + firstRun = false + } else { + try { + CatarseAnalytics.pageView(false) + CatarseAnalytics.origin() + } catch (e) { + console.error(e) + } + } + + const parameters = app.getAttribute('data-parameters') ? JSON.parse(app.getAttribute('data-parameters')) : {}; + let attr = customAttr + let postParam = m.route.param('post_id') || parameters.post_id + let projectParam = m.route.param('project_id') || parameters.project_id + let projectUserIdParam = m.route.param('project_user_id') || parameters.user_id || parameters.project_user_id + let userParam = m.route.param('user_id') || app.getAttribute('data-userid') || parameters.user_id || customAttr?.user_id + let rewardIdParam = m.route.param('reward_id') + let surveyIdParam = m.route.param('survey_id') + let thankYouParam = app && JSON.parse(app.getAttribute('data-contribution')) + + const addToAttr = function (newAttr) { + attr = _.extend({}, newAttr, attr) + } + + if (postParam) { + addToAttr({ post_id: postParam }) + } + + if (projectParam) { + addToAttr({ project_id: projectParam }) + } + + if (userParam) { + addToAttr({ user_id: userParam }) + loadUserDetails(userParam) + } + + if (projectUserIdParam) { + addToAttr({ project_user_id: projectUserIdParam }) + } + + if (surveyIdParam) { + addToAttr({ survey_id: surveyIdParam }) + } + + if (rewardIdParam) { + addToAttr({ reward_id: rewardIdParam }) + } + + if (thankYouParam) { + addToAttr({ contribution: thankYouParam }) + } + + if (window.localStorage && window.localStorage.getItem('globalVideoLanding') !== 'true') { + addToAttr({ withAlert: false }) + } + + if (document.getElementById('fixed-alert')) { + addToAttr({ withFixedAlert: true }) + } + + body.className = 'body-project closed' + + vnode.state.attr = attr + } catch(e) { + console.log('Error on wrap.oninit:', e) + } + }, + oncreate(vnode) { + const hasUnmanagedRootComponent = app && + app.children.app && + app.children.length > 1 + + const removeUnmanagedRootComponentFromDom = () => { + app.removeChild(app.children.app) + } + + if (hasUnmanagedRootComponent) { + removeUnmanagedRootComponentFromDom() + } + }, + view({ state: { attr } }) { + + try { + + const Menu = c.root.Menu + const Footer = c.root.Footer + const notHideFooter = !attr?.hideFooter + return ( +
+ + { + loadingUserDetails ? + h.loader() + : + + } + {notHideFooter &&
} +
+ ) + } catch(e) { + console.log('Error on wrap.view:', e.stack); + return ( +
+ ) + } + } + } +} \ No newline at end of file