119 lines
4.2 KiB
JavaScript
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.')
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |