Files
Superalgos/Dashboard.js
T

269 lines
8.7 KiB
JavaScript


let canvas
let markets
let ecosystem = newEcosystem()
let cloudVM = newCloudVM()
let INITIAL_ZOOM_LEVEL = -26 // This is the zoom level at the view port in which the APP starts.
let INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL) // This value will be overwritten at the viewPort.initialize if the user had a prevous session with this same browser.
let viewPort = newViewPort()
function newDashboard () {
const MODULE_NAME = 'Dashboard'
const INFO_LOG = false
const ERROR_LOG = true
const INTENSIVE_LOG = false
const logger = newWebDebugLog()
logger.fileName = MODULE_NAME
let thisObject = {
start: start
}
const DEBUG_START_UP_DELAY = 0 // 3000; // This is a waiting time in case there is a need to debug the very first steps of initialization, to be able to hit F12 on time.
return thisObject
function start () {
try {
if (INFO_LOG === true) { logger.write('[INFO] start -> Entering function.') }
/* Here we will setup the global eventHandler that will enable the Canvas App to react to events happening outside its execution scope. */
window.canvasApp.eventHandler = newEventHandler()
window.canvasApp.eventHandler.listenToEvent('User Profile Changed', userProfileChanged)
window.canvasApp.eventHandler.listenToEvent('Browser Resized', browserResized)
loadImages(onImagesLoaded)
function onImagesLoaded () {
if (INFO_LOG === true) { logger.write('[INFO] start -> onImagesLoaded -> Entering function.') }
/* Next we start the App */
setTimeout(delayedStart, DEBUG_START_UP_DELAY)
}
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] start -> err = ' + err) }
}
}
function delayedStart () {
try {
if (INFO_LOG === true) { logger.write('[INFO] delayedStart -> Entering function.') }
/* For now, we are supporting only one market. */
let market = {
id: 2,
assetA: 'USDT',
assetB: 'BTC'
}
markets = new Map()
markets.set(market.id, market)
canvas = newCanvas()
canvas.initialize()
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] delayedStart -> err = ' + err) }
}
}
function userProfileChanged () {
try {
if (INFO_LOG === true) { logger.write('[INFO] userProfileChanged -> Entering function.') }
canvas.topSpace.initialize()
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] userProfileChanged -> err = ' + err) }
}
}
function browserResized () {
try {
if (INFO_LOG === true) { logger.write('[INFO] browserResized -> Entering function.') }
browserCanvas = document.getElementById('canvas')
browserCanvas.width = window.innerWidth
browserCanvas.height = window.innerHeight - window.canvasApp.topMargin
viewPort.initialize()
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] browserResized -> err = ' + err) }
}
}
function loadImages (callBack) {
try {
if (INFO_LOG === true) { logger.write('[INFO] loadImages -> Entering function.') }
const accessToken = ''
/*
Soon, we will need to get images from the Financial Beings Module. I live this core here as a sample for that:
const apolloClient = new Apollo.lib.ApolloClient({
networkInterface: Apollo.lib.createNetworkInterface({
uri: window.canvasApp.graphQL.masterAppApiUrl,
transportBatching: true,
}),
connectToDevTools: true,
})
const 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: 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)
});
});
}
*/
const networkInterfaceTeams = Apollo.lib.createNetworkInterface({
uri: window.canvasApp.graphQL.masterAppApiUrl
})
networkInterfaceTeams.use([{
applyMiddleware (req, next) {
req.options.headers = {
authorization: `Bearer ${accessToken}`
}
next()
}
}])
const apolloClientTeams = new Apollo.lib.ApolloClient({
networkInterface: networkInterfaceTeams,
connectToDevTools: true
})
const ALL_TEAMS_QUERY = Apollo.gql`
{
teams_Teams{
edges{
node{
id
name
slug
profile {
avatar
banner
description
motto
updatedAt
}
fb {
id
name
slug
avatar
kind
status {
status
reason
createdAt
}
}
}
}
}
}
`
let teams
const getTeams = () => {
return new Promise((resolve, reject) => {
apolloClientTeams.query({
query: ALL_TEAMS_QUERY
})
.then(response => {
teams = response.data.teams_Teams
window.localStorage.setItem('Teams', JSON.stringify(response.data.teams_Teams))
resolve({ teams: response.data.teams_Teams })
})
.catch(err => {
if (ERROR_LOG === true) { logger.write('[ERROR] loadImages -> getTeams -> Error fetching data from Teams Module.') }
if (ERROR_LOG === true) { logger.write('[ERROR] loadImages -> getTeams -> err = ' + err) }
reject(err)
})
})
}
// To avoid race conditions, add asynchronous fetches to array
let fetchDataPromises = []
fetchDataPromises.push(/* getUser(), */ getTeams()) // <-- Here we must add the function calll to the Financial Beings module.
// When all asynchronous fetches resolve, authenticate user or throw error.
Promise.all(fetchDataPromises).then(result => {
/* All good, we will go through the results creating a map with all the Images URLs */
let teamProfileImages = new Map()
let fbProfileImages = new Map()
for (let i = 0; i < teams.edges.length; i++) {
let team = teams.edges[i].node
teamProfileImages.set(team.slug, team.profile.avatar)
if (team.fb.length > 0) {
fbProfileImages.set(team.slug + '-' + team.fb[0].slug, team.fb[0].avatar)
}
}
window.canvasApp.context.teamProfileImages = teamProfileImages
window.canvasApp.context.fbProfileImages = fbProfileImages
callBack()
}, err => {
if (ERROR_LOG === true) { logger.write('[ERROR] loadImages -> Error fetching data from Teams Module.') }
if (ERROR_LOG === true) { logger.write('[ERROR] loadImages -> err = ' + err) }
})
} catch (err) {
if (ERROR_LOG === true) { logger.write('[ERROR] loadImages -> err = ' + err) }
}
}
}