Files
Superalgos/Projects/Governance/UI/Function-Libraries/UserReferrals.js
T

119 lines
4.2 KiB
JavaScript

function newGovernanceFunctionLibraryUserReferrals() {
let thisObject = {
calculate: calculate
}
return thisObject
function calculate(
userProfiles
) {
/*
We will first reset all the referral power, and then distribute it.
*/
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
resetUserReferrals(userProfile)
}
for (let i = 0; i < userProfiles.length; i++) {
let userProfile = userProfiles[i]
distributeForProfile(userProfile)
}
function resetUserReferrals(node) {
if (node === undefined) { return }
if (node.payload === undefined) { return }
node.payload.referring = {
count: 0,
power: 0
}
/*
If the node is a User Profile, we will check if it has a User Referrer child defined.
*/
if (
node.userReferrer !== undefined &&
node.type === 'User Profile'
) {
resetUserReferrals(node.userReferrer)
return
}
/*
If there is a reference parent defined, this means that the referral power is
transfered to it.
*/
if (
node.payload.referenceParent !== undefined &&
node.type === 'User Referrer'
) {
resetUserReferrals(node.payload.referenceParent)
return
}
}
function distributeForProfile(userProfile) {
let referringPower = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(userProfile.payload, 'tokens')
let referringCount = 0
distributeUserReferrals(userProfile, referringPower, referringCount)
}
function distributeUserReferrals(node, referringPower, referringCount) {
if (node === undefined) { return }
if (node.payload === undefined) { return }
node.payload.referring = {
count: node.payload.referring.count + referringCount,
power: node.payload.referring.power + referringPower
}
drawUserReferrals(node, node.payload.referring.count, node.payload.referring.power)
/*
If the node is a User Profile, we will check if it has a User Referrer child defined.
*/
if (
node.userReferrer !== undefined &&
node.type === 'User Profile'
) {
distributeUserReferrals(node.userReferrer, referringPower, 1, 0)
return
}
/*
If there is a reference parent defined, this means that the referral power is
transfered to it.
*/
if (
node.payload.referenceParent !== undefined &&
node.type === 'User Referrer'
) {
distributeUserReferrals(node.payload.referenceParent, referringPower / 10, 1)
return
}
}
function drawUserReferrals(node, count, power) {
const powerText = new Intl.NumberFormat().format(power) + ' ' + 'Referring Power'
if (node.payload !== undefined) {
node.payload.uiObject.valueAngleOffset = 0
node.payload.uiObject.valueAtAngle = false
if (node.type === 'User Referrer') {
node.payload.uiObject.setStatus(powerText)
return
}
if (
(node.type === 'User Profile' &&
node.userReferrer !== undefined &&
node.userReferrer.payload !== undefined &&
node.userReferrer.payload.referenceParent !== undefined)
||
power >= 10000000
) {
node.payload.uiObject.setStatus(powerText + ' - ' + count + ' Referrals')
return
} else {
node.payload.uiObject.setStatus('Define your referrer to collect tokens from your referrals.')
}
}
}
}
}