From 5bac00777e3c4a93bee8cf8e061ed8fd873aee03 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 16 Jun 2021 20:10:57 +0200 Subject: [PATCH] Referral Program half way reimplemented --- .../UI/Spaces/Floating-Space/UiObject.js | 30 +++-- .../Governance/Plugins/Pools/Superalgos.json | 2 +- .../Plugins/User-Profiles/Julian-Molina.json | 12 +- .../User-Profiles/Luis-Fernando-Molina.json | 91 ++++++++++----- .../UI/Function-Libraries/TokenPower.js | 2 + .../UI/Function-Libraries/UserReferrals.js | 108 +++++++++++------- .../Governance/UI/Function-Libraries/Votes.js | 15 ++- 7 files changed, 175 insertions(+), 85 deletions(-) diff --git a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js index 4c5bf3321..9edb76d67 100644 --- a/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js +++ b/Projects/Foundations/UI/Spaces/Floating-Space/UiObject.js @@ -30,6 +30,10 @@ function newUiObject() { hasInfo: undefined, valueAtAngle: true, valueAngleOffset: 0, + percentageAtAngle: true, + percentageAngleOffset: 0, + statusAtAngle: true, + statusAngleOffset: 0, run: run, stop: stop, heartBeat: heartBeat, @@ -1887,13 +1891,13 @@ function newUiObject() { label = label.substring(0, MAX_LABEL_LENGTH) + '...' } - if (thisObject.valueAtAngle === true && thisObject.payload.angle !== undefined) { + if (thisObject.percentageAtAngle === true && thisObject.payload.angle !== undefined) { labelPoint = { x: position.x - getTextWidth(label) / 2, y: position.y } - labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.valueAngleOffset)) - labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.valueAngleOffset)) + lineSeparator * 1 + labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.percentageAngleOffset)) + labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.percentageAngleOffset)) + lineSeparator * 1 } else { if (thisObject.isOnFocus === true) { labelPoint = { @@ -1948,15 +1952,25 @@ function newUiObject() { label = label.substring(0, MAX_LABEL_LENGTH) + '...' } - if (thisObject.isOnFocus === true) { + if (thisObject.statusAtAngle === true && thisObject.payload.angle !== undefined) { labelPoint = { x: position.x - getTextWidth(label) / 2, - y: position.y + radius * 2 / 3 + lineSeparator * 4 + 30 + y: position.y } + labelPoint.x = labelPoint.x + radius * 7 / 3 * Math.cos(toRadians(thisObject.payload.angle + thisObject.statusAngleOffset)) + labelPoint.y = labelPoint.y + radius * 7 / 3 * Math.sin(toRadians(thisObject.payload.angle + thisObject.statusAngleOffset)) + lineSeparator * 2 } else { - labelPoint = { - x: position.x - getTextWidth(label) / 2, - y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 4 + + if (thisObject.isOnFocus === true) { + labelPoint = { + x: position.x - getTextWidth(label) / 2, + y: position.y + radius * 2 / 3 + lineSeparator * 4 + 30 + } + } else { + labelPoint = { + x: position.x - getTextWidth(label) / 2, + y: position.y + thisObject.payload.floatingObject.currentImageSize / 2 + lineSeparator * 4 + } } } diff --git a/Projects/Governance/Plugins/Pools/Superalgos.json b/Projects/Governance/Plugins/Pools/Superalgos.json index 45da273e9..c8001cec2 100644 --- a/Projects/Governance/Plugins/Pools/Superalgos.json +++ b/Projects/Governance/Plugins/Pools/Superalgos.json @@ -424,7 +424,7 @@ { "type": "Pool", "name": "User Referrals", - "config": "{\n \"codeName\": \"User-Referrals\"\n}", + "config": "{\n \"codeName\": \"Referral-Program\"\n}", "project": "Governance", "poolClasses": [], "pools": [], diff --git a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json index 234fbeb37..0772a9bab 100644 --- a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json @@ -15,10 +15,10 @@ "project": "Governance", "userReferrer": { "type": "User Referrer", - "name": "Luis-Fernando-Molina", - "config": "{\n \"description\": \"\"\n}", + "name": "Jeremy", + "config": "{}", "project": "Governance", - "id": "edf7bcda-23f6-49bb-b9b2-9a34edcb4a40", + "id": "0d0b04ff-034b-4b02-8351-67d621d514c0", "savedPayload": { "position": { "x": 25503.74798740812, @@ -32,15 +32,15 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 1, + "angleToParent": 2, "distanceToParent": 3, "arrangementStyle": 0 }, "uiObject": {}, "referenceParent": { "type": "User Profile", - "name": "Luis-Fernando-Molina", - "id": "148911b3-b2f3-44fb-8cb4-017991789132" + "name": "Jeremy", + "id": "759e9012-c995-47ed-92f1-7d204bf2b58e" } } }, diff --git a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json index e15103c2c..5f259a419 100644 --- a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json @@ -13,11 +13,42 @@ "name": "New Referral Program", "config": "{}", "project": "Governance", + "userReferrer": { + "type": "User Referrer", + "name": "Julian-Molina", + "config": "{}", + "project": "Governance", + "id": "c96ae419-54ad-4d70-94fe-38833288d471", + "savedPayload": { + "position": { + "x": 30785.098889480818, + "y": 23025.90611888476 + }, + "targetPosition": { + "x": 30550.54944474041, + "y": 23212.953059442378 + }, + "floatingObject": { + "isPinned": false, + "isFrozen": false, + "isCollapsed": false, + "angleToParent": 2, + "distanceToParent": 3, + "arrangementStyle": 0 + }, + "uiObject": {}, + "referenceParent": { + "type": "User Profile", + "name": "Julian-Molina", + "id": "1fd95e41-4b22-48d5-be3a-904c37afcb11" + } + } + }, "id": "43a24543-03cf-4511-b670-63566159dbd7", "savedPayload": { "position": { - "x": 30586.290660370727, - "y": 23530.165121735263 + "x": 30550.54944474041, + "y": 23212.953059442378 }, "targetPosition": { "x": 30316, @@ -27,7 +58,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -45,8 +76,8 @@ "id": "8af4af68-62bf-4ad2-bf84-f1124cba0abf", "savedPayload": { "position": { - "x": 30503.04694055762, - "y": 23634.549444740405 + "x": 30608.478373654547, + "y": 23466.75628018689 }, "targetPosition": { "x": 30316, @@ -56,7 +87,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -74,8 +105,8 @@ "id": "91d82012-4362-4fe0-b02b-0eb3b394ace5", "savedPayload": { "position": { - "x": 30382.756280186895, - "y": 23692.478373654543 + "x": 30446.165121735266, + "y": 23670.290660370723 }, "targetPosition": { "x": 30316, @@ -85,7 +116,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -1286,12 +1317,12 @@ "id": "e059f5c4-9132-4d76-9f3e-1060658fa704", "savedPayload": { "position": { - "x": 30048.97487925242, - "y": 24569.913494618184 + "x": 29795.339513058934, + "y": 24481.162641482904 }, "targetPosition": { - "x": 30115.731159439314, - "y": 24277.435120963637 + "x": 29925.5046347942, + "y": 24210.871981112177 }, "floatingObject": { "isPinned": false, @@ -1319,12 +1350,12 @@ "id": "1d398124-3f36-40a1-8b3b-6c77ad489b92", "savedPayload": { "position": { - "x": 30115.731159439314, - "y": 24277.435120963637 + "x": 29925.5046347942, + "y": 24210.871981112177 }, "targetPosition": { - "x": 30182.48743962621, - "y": 23984.95674730909 + "x": 30055.669756529467, + "y": 23940.58132074145 }, "floatingObject": { "isPinned": false, @@ -1344,12 +1375,12 @@ "id": "2b8d3ce7-515c-44ad-8d80-3c2be6d7736f", "savedPayload": { "position": { - "x": 30182.48743962621, - "y": 23984.95674730909 + "x": 30055.669756529467, + "y": 23940.58132074145 }, "targetPosition": { - "x": 30249.243719813105, - "y": 23692.478373654543 + "x": 30185.834878264734, + "y": 23670.290660370723 }, "floatingObject": { "isPinned": false, @@ -1368,8 +1399,8 @@ "id": "d5ed432e-78bf-432e-be3b-8649932f7a65", "savedPayload": { "position": { - "x": 30249.243719813105, - "y": 23692.478373654543 + "x": 30185.834878264734, + "y": 23670.290660370723 }, "targetPosition": { "x": 30316, @@ -1379,7 +1410,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -1399,8 +1430,8 @@ "id": "796dd30f-c90d-4b8d-a63d-89867347407b", "savedPayload": { "position": { - "x": 30128.95305944238, - "y": 23634.549444740405 + "x": 30023.521626345453, + "y": 23466.75628018689 }, "targetPosition": { "x": 30316, @@ -1410,7 +1441,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, @@ -1427,8 +1458,8 @@ "id": "b046f4e4-40b1-4e47-8fed-75a6a5c6029d", "savedPayload": { "position": { - "x": 30045.709339629273, - "y": 23530.165121735263 + "x": 30081.45055525959, + "y": 23212.953059442378 }, "targetPosition": { "x": 30316, @@ -1438,7 +1469,7 @@ "isPinned": false, "isFrozen": false, "isCollapsed": false, - "angleToParent": 2, + "angleToParent": 1, "distanceToParent": 3, "arrangementStyle": 0 }, diff --git a/Projects/Governance/UI/Function-Libraries/TokenPower.js b/Projects/Governance/UI/Function-Libraries/TokenPower.js index ea196c329..e2508f7dc 100644 --- a/Projects/Governance/UI/Function-Libraries/TokenPower.js +++ b/Projects/Governance/UI/Function-Libraries/TokenPower.js @@ -240,6 +240,8 @@ function newGovernanceFunctionLibraryTokenPower() { node.payload.uiObject.setValue(tokenPower) if (percentage !== undefined) { + node.payload.uiObject.percentageAngleOffset = 180 + node.payload.uiObject.percentageAtAngle = true node.payload.uiObject.setPercentage(percentage.toFixed(2)) } } diff --git a/Projects/Governance/UI/Function-Libraries/UserReferrals.js b/Projects/Governance/UI/Function-Libraries/UserReferrals.js index 289f56a35..dc207c456 100644 --- a/Projects/Governance/UI/Function-Libraries/UserReferrals.js +++ b/Projects/Governance/UI/Function-Libraries/UserReferrals.js @@ -23,15 +23,30 @@ function newGovernanceFunctionLibraryUserReferrals() { */ for (let i = 0; i < userProfiles.length; i++) { let userProfile = userProfiles[i] - resetUserReferrals(userProfile) + + if (userProfile.tokenSwitch === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue } + + resetUserReferrals(userProfile.tokenSwitch.referralProgram) } for (let i = 0; i < userProfiles.length; i++) { let userProfile = userProfiles[i] - distributeForProfile(userProfile) + + if (userProfile.tokenSwitch === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue } + + distributeForReferralProgram(userProfile.tokenSwitch.referralProgram) } for (let i = 0; i < userProfiles.length; i++) { let userProfile = userProfiles[i] - calculateAwardedForProfile(userProfile) + + if (userProfile.tokenSwitch === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram === undefined) { continue } + if (userProfile.tokenSwitch.referralProgram.payload === undefined) { continue } + + calculateForReferralProgram(userProfile.tokenSwitch.referralProgram) } function findPool(node) { @@ -46,7 +61,7 @@ function newGovernanceFunctionLibraryUserReferrals() { node.type === 'Pool' ) { let codeName = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(node.payload, 'codeName') - if (codeName === "User-Referrals") { + if (codeName === "Referral-Program") { tokensReward = node.payload.tokens return } @@ -96,8 +111,19 @@ function newGovernanceFunctionLibraryUserReferrals() { 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' + node.type === 'User Profile' && + node.tokenSwitch !== undefined && + node.tokenSwitch.referralProgram !== undefined + ) { + resetUserReferrals(node.tokenSwitch.referralProgram) + return + } + /* + If the node is a Referral Program, we will check if it has a User Referrer child defined. + */ + if ( + node.type === 'Referral Program' && + node.userReferrer !== undefined ) { resetUserReferrals(node.userReferrer) return @@ -107,26 +133,20 @@ function newGovernanceFunctionLibraryUserReferrals() { transfered to it. */ if ( - node.payload.referenceParent !== undefined && - node.type === 'User Referrer' + node.type === 'User Referrer' && + node.payload.referenceParent !== undefined ) { resetUserReferrals(node.payload.referenceParent) return } } - function distributeForProfile(userProfile) { - if (userProfile === undefined || userProfile.payload === undefined) { return } - let referringPower - if (userProfile.payload.blockchainTokens === undefined) { - return - } else { - referringPower = userProfile.payload.blockchainTokens - } - + function distributeForReferralProgram(referralProgram) { + if (referralProgram === undefined || referralProgram.payload === undefined) { return } + let referringPower = referralProgram.payload.tokenPower let referringCount = 0 - userProfile.payload.referring.ownPower = referringPower - distributeUserReferrals(userProfile, referringPower, referringCount) + referralProgram.payload.referring.ownPower = referringPower + distributeUserReferrals(referralProgram, referringPower, referringCount) } function distributeUserReferrals(node, referringPower, referringCount) { @@ -142,10 +162,10 @@ function newGovernanceFunctionLibraryUserReferrals() { node.payload.referring.referralsPower = node.payload.referring.combinedPower - node.payload.referring.ownPower totalReferralsPower = totalReferralsPower + node.payload.referring.referralsPower if ( - node.userReferrer !== undefined && - node.type === 'User Profile' + node.type === 'Referral Program' && + node.userReferrer !== undefined ) { - distributeUserReferrals(node.userReferrer, referringPower, 1, 0) + distributeUserReferrals(node.userReferrer, referringPower / 10, 1, 0) return } /* @@ -153,45 +173,55 @@ function newGovernanceFunctionLibraryUserReferrals() { transfered to it. */ if ( - node.payload.referenceParent !== undefined && - node.type === 'User Referrer' + node.type === 'User Referrer' && + node.payload.referenceParent !== undefined ) { drawUserReferrals(node) - distributeUserReferrals(node.payload.referenceParent, referringPower / 10, 1) + distributeUserReferrals(node.payload.referenceParent, referringPower, 1) return } } - function calculateAwardedForProfile(userProfile) { - if (userProfile.payload === undefined) { return } + function calculateForReferralProgram(referralProgram) { + if (referralProgram.payload === undefined) { return } - let totalPowerRewardRation = tokensReward / totalReferralsPower - if (totalPowerRewardRation < 1) { totalPowerRewardRation = 1 } + let totalPowerRewardRatio = tokensReward / totalReferralsPower + if (totalPowerRewardRatio < 1) { totalPowerRewardRatio = 1 } - userProfile.payload.referring.awarded.tokens = userProfile.payload.referring.referralsPower * totalPowerRewardRation - drawUserProfiles(userProfile) + referralProgram.payload.referring.awarded.tokens = referralProgram.payload.referring.referralsPower * totalPowerRewardRatio + drawReferralProgram(referralProgram) } function drawUserReferrals(node) { if (node.payload !== undefined) { - const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) + const ownPowerText = new Intl.NumberFormat().format(node.payload.referring.ownPower) + const referralsPowerText = new Intl.NumberFormat().format(node.payload.referring.referralsPower) + const combinedPowerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) - node.payload.uiObject.valueAngleOffset = 0 - node.payload.uiObject.valueAtAngle = false + node.payload.uiObject.valueAngleOffset = 180 + node.payload.uiObject.valueAtAngle = true - node.payload.uiObject.setStatus(powerText + ' ' + 'Combined Referring Power') - return + node.payload.uiObject.setValue( combinedPowerText + ' ' + 'Referring Power') + + node.payload.uiObject.statusAngleOffset = 0 + node.payload.uiObject.statusAtAngle = false + + node.payload.uiObject.setStatus(ownPowerText + ' own RP + ' + referralsPowerText + ' inherited RP = ' + combinedPowerText + ' ' + ' Total RP') } } - function drawUserProfiles(node) { + function drawReferralProgram(node) { if (node.payload !== undefined) { const powerText = new Intl.NumberFormat().format(node.payload.referring.combinedPower) const awardedTokens = new Intl.NumberFormat().format(node.payload.referring.awarded.tokens) const referralPower = new Intl.NumberFormat().format(node.payload.referring.referralsPower) - node.payload.uiObject.valueAngleOffset = 0 - node.payload.uiObject.valueAtAngle = false + node.payload.uiObject.statusAngleOffset = 0 + node.payload.uiObject.statusAtAngle = false + + node.payload.uiObject.setStatus("Referring Power = Token Power / 10") + + return if ( ( diff --git a/Projects/Governance/UI/Function-Libraries/Votes.js b/Projects/Governance/UI/Function-Libraries/Votes.js index c00ea96df..70afdc0c5 100644 --- a/Projects/Governance/UI/Function-Libraries/Votes.js +++ b/Projects/Governance/UI/Function-Libraries/Votes.js @@ -268,7 +268,16 @@ function newGovernanceFunctionLibraryVotes() { function drawVotes(node, votes, percentage) { votes = new Intl.NumberFormat().format(votes) + ' ' + 'Votes' if (node.payload !== undefined) { - if (node.type === 'User Profile') { + + if (node.type === 'Voting Program') { + node.payload.uiObject.statusAngleOffset = 0 + node.payload.uiObject.statusAtAngle = false + + node.payload.uiObject.setStatus("Votes = Tokens Power") + + if (percentage !== undefined) { + node.payload.uiObject.setPercentage(percentage.toFixed(2)) + } return } if ( @@ -286,9 +295,13 @@ function newGovernanceFunctionLibraryVotes() { ) { node.payload.uiObject.valueAngleOffset = 0 node.payload.uiObject.valueAtAngle = false + node.payload.uiObject.percentageAngleOffset = 0 + node.payload.uiObject.percentageAtAngle = false } else { node.payload.uiObject.valueAngleOffset = 180 node.payload.uiObject.valueAtAngle = true + node.payload.uiObject.percentageAngleOffset = 180 + node.payload.uiObject.percentageAtAngle = true } node.payload.uiObject.setValue(votes)