diff --git a/Container.js b/Container.js index 8d3ddbc61..7cdae58ad 100644 --- a/Container.js +++ b/Container.js @@ -65,7 +65,6 @@ function newContainer () { if (dimmensionsChanged) { thisObject.eventHandler.raiseEvent('Dimmensions Changed', event) - console.log(thisObject.name + ' new width = ' + thisObject.frame.width) } } } diff --git a/Scales/TimeScale.js b/Scales/TimeScale.js index 4cd15c3e2..6c2a54884 100644 --- a/Scales/TimeScale.js +++ b/Scales/TimeScale.js @@ -14,7 +14,7 @@ function newTimeScale () { thisObject.container = container thisObject.container.frame.width = viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x - thisObject.container.frame.height = 50 + thisObject.container.frame.height = 100 container.frame.position.x = viewPort.visibleArea.bottomRight.x container.frame.position.y = TOP_SPACE_HEIGHT diff --git a/TopSpace/Login.js b/TopSpace/Login.js index 748b40ea7..bca896575 100644 --- a/TopSpace/Login.js +++ b/TopSpace/Login.js @@ -1,5 +1,11 @@ function newLogin () { + const MODULE_NAME = 'Login' + const INFO_LOG = false + const INTENSIVE_LOG = false + const ERROR_LOG = true + const logger = newWebDebugLog() + let thisObject = { container: undefined, draw: draw, @@ -27,337 +33,341 @@ function newLogin () { return thisObject async function initialize (pSharedStatus) { - const accessToken = window.localStorage.getItem('access_token') - let user = window.localStorage.getItem('user') + try { + const accessToken = window.localStorage.getItem('access_token') + let user = window.localStorage.getItem('user') - sharedStatus = pSharedStatus + sharedStatus = pSharedStatus - if (user === null) { - // if there is no user that means that we are logged off, which means it is time to clean the local storage of things from the last log in. + if (user === null) { + // if there is no user that means that we are logged off, which means it is time to clean the local storage of things from the last log in. - window.localStorage.removeItem('loggedInUser') - window.localStorage.removeItem('sessionToken') - return - } + window.localStorage.removeItem('loggedInUser') + window.localStorage.removeItem('sessionToken') + return + } - user = JSON.parse(user) + user = JSON.parse(user) - const authId = user.authId + const authId = user.authId - let sessionToken + let sessionToken - const apolloClient = new Apollo.lib.ApolloClient({ - networkInterface: Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl, - transportBatching: true - }), - connectToDevTools: true - }) + const apolloClient = new Apollo.lib.ApolloClient({ + networkInterface: Apollo.lib.createNetworkInterface({ + uri: window.canvasApp.graphQL.masterAppApiUrl, + transportBatching: true + }), + connectToDevTools: true + }) - const USERS_QUERY = Apollo.gql` - query($authId: String){ - users_UserByAuthId (authId: $authId){ - id - referrerId - alias - firstName - middleName - lastName - bio - email - emailVerified - isDeveloper - isDataAnalyst - isTrader - avatarHandle - avatarChangeDate - sessionToken - role { - id - } - } + const USERS_QUERY = Apollo.gql` + query($authId: String){ + users_UserByAuthId (authId: $authId){ + id + referrerId + alias + firstName + middleName + lastName + bio + email + emailVerified + isDeveloper + isDataAnalyst + isTrader + avatarHandle + avatarChangeDate + sessionToken + role { + id + } + } + } + ` + const getUser = () => { + return new Promise((resolve, reject) => { + apolloClient.query({ + query: USERS_QUERY, + variables: { + authId: authId } - ` - const getUser = () => { - return new Promise((resolve, reject) => { - apolloClient.query({ - query: USERS_QUERY, - variables: { - authId: authId + }) + .then(response => { + sessionToken = response.data.users_UserByAuthId.sessionToken + + window.localStorage.setItem('loggedInUser', JSON.stringify(response.data.users_UserByAuthId)) + resolve({ user: response.data.users_UserByAuthId}) + }) + .catch(error => { + console.log('apolloClient error getting user query', error) + reject(error) + }) + }) + } + + /* Getting all Teams */ + + const networkInterfaceTeams = Apollo.lib.createNetworkInterface({ + uri: window.canvasApp.graphQL.masterAppApiUrl + }) + + networkInterfaceTeams.use([{ + applyMiddleware (req, next) { + req.options.headers = { + authorization: `Bearer ${accessToken}` } - }) - .then(response => { - sessionToken = response.data.users_UserByAuthId.sessionToken - - window.localStorage.setItem('loggedInUser', JSON.stringify(response.data.users_UserByAuthId)) - resolve({ user: response.data.users_UserByAuthId}) - }) - .catch(error => { - console.log('apolloClient error getting user query', error) - reject(error) - }) - }) - } - - /* Getting all Teams */ - - const networkInterfaceTeams = Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl - }) - - networkInterfaceTeams.use([{ - applyMiddleware (req, next) { - req.options.headers = { - authorization: `Bearer ${accessToken}` + next() } - next() - } - }]) + }]) - const apolloClientTeams = new Apollo.lib.ApolloClient({ - networkInterface: networkInterfaceTeams, - connectToDevTools: true - }) - - const TEAM_BY_OWNER_QUERY = Apollo.gql` - query teamsByOwnerQuery { - teams_TeamsByOwner { - id - name - slug - profile { - avatar - banner - description - motto - updatedAt - } - members { - member { - alias - } - } - fb { - id - name - slug - avatar - kind - status { - status - reason - createdAt - } - } - } - } - ` - - const getTeamByOwner = () => { - return new Promise((resolve, reject) => { - apolloClientTeams.query({ - query: TEAM_BY_OWNER_QUERY - }) - .then(response => { - window.localStorage.setItem('userTeams', JSON.stringify(response.data.teams_TeamsByOwner)) - resolve({ teams: response.data.teams_TeamsByOwner}) - }) - .catch(error => { - console.log('apolloClient error getting user teams', error) - reject(error) - }) + const apolloClientTeams = new Apollo.lib.ApolloClient({ + networkInterface: networkInterfaceTeams, + connectToDevTools: true }) - } - /* Gettings All Events */ - - const networkInterfaceEvents = Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl - }) - - const apolloClientEvents = new Apollo.lib.ApolloClient({ - networkInterface: networkInterfaceEvents, - connectToDevTools: true, - addTypename: false - }) - - const EVENTS_QUERY = Apollo.gql` - query events($maxStartDate: Int, $minEndDate: Int){ - events_Events(maxStartDate: $maxStartDate, minEndDate: $minEndDate){ - id - title - startDatetime - endDatetime - participants{ - clone{ - id - team{ - slug - } - bot{ - slug - } - } - } - } - } - ` - - const getCurrentEvents = () => { - var d = new Date() - var nowSeconds = Math.round(d.getTime() / 1000) - var twoWeeksAgoSeconds = nowSeconds - 1209600 - return new Promise((resolve, reject) => { - apolloClientEvents.query({ - query: EVENTS_QUERY, - variables: { maxStartDate: nowSeconds, minEndDate: twoWeeksAgoSeconds } - }) - .then(response => { - window.localStorage.setItem('currentEvents', JSON.stringify(response.data.events_Events)) - currentEvent = window.localStorage.getItem('currentEventObject') - if (currentEvent === null || currentEvent === '[]' || currentEvent === '') { - sharedStatus.currentEventIndex = -1 - } else { - currentEvent = JSON.parse(currentEvent) - sharedStatus.currentEventIndex = response.data.events_Events.findIndex(function (element) { - return element.id == currentEvent.id - }) + const TEAM_BY_OWNER_QUERY = Apollo.gql` + query teamsByOwnerQuery { + teams_TeamsByOwner { + id + name + slug + profile { + avatar + banner + description + motto + updatedAt + } + members { + member { + alias + } + } + fb { + id + name + slug + avatar + kind + status { + status + reason + createdAt + } + } + } } - resolve({ currentEvents: response.data.events_Events}) - }) - .catch(error => { - console.log('apolloClient error getting current events', error) - reject(error) - }) - }) - } + ` - /* Getting all Clones */ - - const networkInterfaceClones = Apollo.lib.createNetworkInterface({ - uri: window.canvasApp.graphQL.masterAppApiUrl - }) - - networkInterfaceClones.use([{ - applyMiddleware (req, next) { - req.options.headers = { - authorization: `Bearer ${accessToken}` - } - next() + const getTeamByOwner = () => { + return new Promise((resolve, reject) => { + apolloClientTeams.query({ + query: TEAM_BY_OWNER_QUERY + }) + .then(response => { + window.localStorage.setItem('userTeams', JSON.stringify(response.data.teams_TeamsByOwner)) + resolve({ teams: response.data.teams_TeamsByOwner}) + }) + .catch(error => { + console.log('apolloClient error getting user teams', error) + reject(error) + }) + }) } - }]) - const apolloClientClones = new Apollo.lib.ApolloClient({ - networkInterface: networkInterfaceClones, - connectToDevTools: true - }) + /* Gettings All Events */ - const CLONES_QUERY = Apollo.gql` - query Operations_Clones{ - operations_Clones { + const networkInterfaceEvents = Apollo.lib.createNetworkInterface({ + uri: window.canvasApp.graphQL.masterAppApiUrl + }) + + const apolloClientEvents = new Apollo.lib.ApolloClient({ + networkInterface: networkInterfaceEvents, + connectToDevTools: true, + addTypename: false + }) + + const EVENTS_QUERY = Apollo.gql` + query events($maxStartDate: Int, $minEndDate: Int){ + events_Events(maxStartDate: $maxStartDate, minEndDate: $minEndDate){ id - authId - teamId - botId - mode - resumeExecution - beginDatetime + title + startDatetime endDatetime - waitTime - state - stateDatetime - createDatetime - lastLogs - runAsTeam - summaryDate - buyAverage - sellAverage - marketRate - combinedProfitsA - combinedProfitsB - assetA - assetB - botType - teamName - botName - botAvatar - teamAvatar - processName - keyId - botSlug + participants{ + clone{ + id + team{ + slug + } + bot{ + slug + } + } } - } - ` - - const getClones = () => { - return new Promise((resolve, reject) => { - apolloClientClones.query({ - query: CLONES_QUERY - }) - .then(response => { - window.localStorage.setItem('userClones', JSON.stringify(response.data.operations_Clones)) - let clones = response.data.operations_Clones - for (let i = 0; i < clones.length; i++) { - let clone = clones[i] - if (clone.botType === 'Trading') { - let teamSlug = clone.teamName.toLowerCase() - teamSlug = teamSlug.replace(' ', '-') - let devTeam = ecosystem.getTeam(teamSlug) - let bot = ecosystem.getBot(devTeam, clone.botSlug) - if (bot !== undefined) { - bot.cloneId = clone.id - } - } } + } + ` - resolve({ clones: response.data.operations_Clones}) - }) - .catch(error => { - console.log('apolloClient error getting user clones', error) - reject(error) - }) - }) - } - - // To avoid race conditions, add asynchronous fetches to array - let fetchDataPromises = [] - - fetchDataPromises.push(getUser(), getTeamByOwner(), getCurrentEvents(), getClones(), authenticateUser()) - - // When all asynchronous fetches resolve, authenticate user or throw error. - await Promise.all(fetchDataPromises).then(result => { - - }, err => { - console.error('[ERROR] Login -> GraphQL Fetch Error -> err = ', err) - }) - - thisObject.container.eventHandler.listenToEvent('onMouseClick', onClick) - - async function authenticateUser () { - if (sessionToken === undefined) { sessionToken = '' } - - let path = window.canvasApp.urlPrefix + 'AABrowserAPI/authenticateUser/' + sessionToken - - return new Promise( - function (resolve, reject) { - callServer(undefined, path, (result) => { - let responseFromServer = JSON.parse(result) - - err = responseFromServer.err - - if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { - console.log('Please make sure you create a new team!') - reject(err) - } - - window.USER_PROFILE = responseFromServer.userProfile - window.localStorage.setItem('sessionToken', sessionToken) - - currentLabel = 'Logged In' - resolve() + const getCurrentEvents = () => { + var d = new Date() + var nowSeconds = Math.round(d.getTime() / 1000) + var twoWeeksAgoSeconds = nowSeconds - 1209600 + return new Promise((resolve, reject) => { + apolloClientEvents.query({ + query: EVENTS_QUERY, + variables: { maxStartDate: nowSeconds, minEndDate: twoWeeksAgoSeconds } + }) + .then(response => { + window.localStorage.setItem('currentEvents', JSON.stringify(response.data.events_Events)) + currentEvent = window.localStorage.getItem('currentEventObject') + if (currentEvent === null || currentEvent === '[]' || currentEvent === '') { + sharedStatus.currentEventIndex = -1 + } else { + currentEvent = JSON.parse(currentEvent) + sharedStatus.currentEventIndex = response.data.events_Events.findIndex(function (element) { + return element.id == currentEvent.id }) } - ) + resolve({ currentEvents: response.data.events_Events}) + }) + .catch(error => { + console.log('apolloClient error getting current events', error) + reject(error) + }) + }) + } + + /* Getting all Clones */ + + const networkInterfaceClones = Apollo.lib.createNetworkInterface({ + uri: window.canvasApp.graphQL.masterAppApiUrl + }) + + networkInterfaceClones.use([{ + applyMiddleware (req, next) { + req.options.headers = { + authorization: `Bearer ${accessToken}` + } + next() + } + }]) + + const apolloClientClones = new Apollo.lib.ApolloClient({ + networkInterface: networkInterfaceClones, + connectToDevTools: true + }) + + const CLONES_QUERY = Apollo.gql` + query Operations_Clones{ + operations_Clones { + id + authId + teamId + botId + mode + resumeExecution + beginDatetime + endDatetime + waitTime + state + stateDatetime + createDatetime + lastLogs + runAsTeam + summaryDate + buyAverage + sellAverage + marketRate + combinedProfitsA + combinedProfitsB + assetA + assetB + botType + teamName + botName + botAvatar + teamAvatar + processName + keyId + botSlug + } + } + ` + + const getClones = () => { + return new Promise((resolve, reject) => { + apolloClientClones.query({ + query: CLONES_QUERY + }) + .then(response => { + window.localStorage.setItem('userClones', JSON.stringify(response.data.operations_Clones)) + let clones = response.data.operations_Clones + for (let i = 0; i < clones.length; i++) { + let clone = clones[i] + if (clone.botType === 'Trading') { + let teamSlug = clone.teamName.toLowerCase() + teamSlug = teamSlug.replace(' ', '-') + let devTeam = ecosystem.getTeam(teamSlug) + let bot = ecosystem.getBot(devTeam, clone.botSlug) + if (bot !== undefined) { + bot.cloneId = clone.id + } + } + } + + resolve({ clones: response.data.operations_Clones}) + }) + .catch(error => { + console.log('apolloClient error getting user clones', error) + reject(error) + }) + }) + } + + // To avoid race conditions, add asynchronous fetches to array + let fetchDataPromises = [] + + fetchDataPromises.push(getUser(), getTeamByOwner(), getCurrentEvents(), getClones(), authenticateUser()) + + // When all asynchronous fetches resolve, authenticate user or throw error. + await Promise.all(fetchDataPromises).then(result => { + + }, err => { + console.error('[ERROR] Login -> GraphQL Fetch Error -> err = ', err) + }) + + thisObject.container.eventHandler.listenToEvent('onMouseClick', onClick) + + async function authenticateUser () { + if (sessionToken === undefined) { sessionToken = '' } + + let path = window.canvasApp.urlPrefix + 'AABrowserAPI/authenticateUser/' + sessionToken + + return new Promise( + function (resolve, reject) { + callServer(undefined, path, (result) => { + let responseFromServer = JSON.parse(result) + + err = responseFromServer.err + + if (err.result !== GLOBAL.DEFAULT_OK_RESPONSE.result) { + console.log('Please make sure you create a new team!') + reject(err) + } + + window.USER_PROFILE = responseFromServer.userProfile + window.localStorage.setItem('sessionToken', sessionToken) + + currentLabel = 'Logged In' + resolve() + }) + } + ) + } + } catch (err) { + if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } } } diff --git a/Utilities.js b/Utilities.js index ecf946f0b..d6083eda9 100644 --- a/Utilities.js +++ b/Utilities.js @@ -75,7 +75,7 @@ function saveUserPosition (container, timeLineCoordinateSystem) { window.localStorage.setItem('userPosition', JSON.stringify(userPosition)) } -function moveToUserPosition (container, timeLineCoordinateSystem) { +function getUserPosition () { let savedPosition = window.localStorage.getItem('userPosition') let userPosition @@ -90,11 +90,17 @@ function moveToUserPosition (container, timeLineCoordinateSystem) { userPosition = JSON.parse(savedPosition) } - let centerPoint = { - x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2, - y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2 + userPosition.point = { + x: (new Date(userPosition.date)).valueOf(), + y: userPosition.rate } + return userPosition +} + +function moveToUserPosition (container, timeLineCoordinateSystem) { + let userPosition = getUserPosition() + viewPort.newZoomLevel(userPosition.zoom) INITIAL_TIME_PERIOD = recalculatePeriod(userPosition.zoom) INITIAL_DATE = new Date(userPosition.date) @@ -104,11 +110,16 @@ function moveToUserPosition (container, timeLineCoordinateSystem) { y: userPosition.rate } - /* Put this point in the coordinate system of the viewPort */ + /* Put this po int in the coordinate system of the viewPort */ targetPoint = timeLineCoordinateSystem.transformThisPoint(targetPoint) targetPoint = transformThisPoint(targetPoint, container) + let centerPoint = { + x: (viewPort.visibleArea.bottomRight.x - viewPort.visibleArea.topLeft.x) / 2, + y: (viewPort.visibleArea.bottomRight.y - viewPort.visibleArea.topLeft.y) / 2 + } + /* Lets calculate the displace vector, from the point we want at the center, to the current center. */ let displaceVector = {