From 66b9843466b1ddf5e7dd80ce4d96c827de21462b Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 12 Jun 2021 03:18:44 +0200 Subject: [PATCH] Governance: Install Votes Implemented --- .../Icons/Votes/claim-votes-switch.png | Bin 0 -> 19266 bytes .../Icons/Votes/user-profile-votes-switch.png | Bin 0 -> 12978 bytes .../Icons/Votes/weight-votes-switch.png | Bin 0 -> 8896 bytes Projects/Governance/Icons/xxx.png | Bin 0 -> 13369 bytes .../Pools/Foundations-Project-Assets.json | 1 + .../Plugins/Pools/Foundations-Project.json | 1 + .../Plugins/Pools/Superalgos-Pool.json | 1 - .../Governance/Plugins/Pools/Superalgos.json | 1 + .../Plugins/Workspaces/Governance-Demo.json | 2 +- .../App-Schema/claim-votes-switch.json | 100 ++++ ...e-transfer.json => user-profile-vote.json} | 4 +- .../App-Schema/user-profile-votes-switch.json | 74 +++ .../Schemas/App-Schema/votes-switch.json | 98 +--- .../App-Schema/weight-votes-switch.json | 113 ++++ .../user-vote-transfer.json | 2 +- .../UI/Function-Libraries/ActionSwitch.js | 8 +- .../Governance/UI/Function-Libraries/Votes.js | 491 +++++++++++------- 17 files changed, 626 insertions(+), 270 deletions(-) create mode 100644 Projects/Governance/Icons/Votes/claim-votes-switch.png create mode 100644 Projects/Governance/Icons/Votes/user-profile-votes-switch.png create mode 100644 Projects/Governance/Icons/Votes/weight-votes-switch.png create mode 100644 Projects/Governance/Icons/xxx.png create mode 100644 Projects/Governance/Plugins/Pools/Foundations-Project-Assets.json create mode 100644 Projects/Governance/Plugins/Pools/Foundations-Project.json delete mode 100644 Projects/Governance/Plugins/Pools/Superalgos-Pool.json create mode 100644 Projects/Governance/Plugins/Pools/Superalgos.json create mode 100644 Projects/Governance/Schemas/App-Schema/claim-votes-switch.json rename Projects/Governance/Schemas/App-Schema/{user-vote-transfer.json => user-profile-vote.json} (92%) create mode 100644 Projects/Governance/Schemas/App-Schema/user-profile-votes-switch.json create mode 100644 Projects/Governance/Schemas/App-Schema/weight-votes-switch.json diff --git a/Projects/Governance/Icons/Votes/claim-votes-switch.png b/Projects/Governance/Icons/Votes/claim-votes-switch.png new file mode 100644 index 0000000000000000000000000000000000000000..bb5d9dc0d7906aba6df29ca7b354d0236ac88601 GIT binary patch literal 19266 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 P2Y}&`6NjH4a)|gpn!Lfv literal 0 HcmV?d00001 diff --git a/Projects/Governance/Icons/Votes/weight-votes-switch.png b/Projects/Governance/Icons/Votes/weight-votes-switch.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b56d39863b0625ffcfd78f94afea7f615d5e12 GIT binary patch literal 8896 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


%xyJt<&nE8~(T<$FTcBK1 z_E`J%%!Ye!+$}BFeR-%%l0ZmmTv3Lw=?noYCDn~Ierh3tx4}cEFM2KZLBsa!u|bcn ze?WX?vpux0OX0!x%w5^4KLjBA?Q_;HQwr)l@8m;A|jRals|9YAZ(O; zbyS=#LT@=>IsOv*5H32g3nscw6k~=H$iigheSof@88pCgLR$7W)H7s2W%)L=$Il6+ z0SW^ib(6+fDU})nOLg5la~?!O4uZY%@SI~HilJhx??$?5_MhmOV@1!pR-Dawz|f1K zB05=IN$IDnvMB>uc{#939~N45agT{ z8>ZRSj1z5|2GQ;q67pdCX-DXJlAWrIo90CbL4r*Y5(&Ag2s&@>tgk100K;G*uPj~30jan@KaoQEU~7)}Cpf!^2cB8Gt+^6E zY_N%7Z~mx7RxhqaxBVnb;|(EbnzdV#761Hnsa@zaV%qF~V%I7uBy@FNJOI|s?LeRH z?t)}DtoPAl_6iXrXZ83o$XKaq1hRNr2SYsn*@=KGl0(Z11_`1;ODQ>Ww}FtcnS6n8 z>XWFU1On~a+W0e>6(+#;*}R6Z*<%_xKu;LxTn{{PSabfOVYq*1&vbzT6YgT8 zW^xEUPWy<27vFt^i{zcwEGqE`G_)hlR$unr%j()(E4yHDuf&OU zWek3Kyb)q}U7}7$S|>IwVz@63e);4t*iITjs&@CTa||n`3Xt!~(a$do#xhYuW}|A6 zcvzBk2p<|Q7~NaitzV?*yd7s>o!!JAP`$t$tk4l@7eb4bb2GG6!9VfIqO=oeHB*Nu zyE~ud{sN6szTK`Y$38td*2yCZ!>3eE(co}x2Mru~%&gJTV@}xm+E4nX`f4lWZ-;YM zAc&70Y6o*ewXyT};UQ|U7@Lo9J5s;v<$Kk}e}N)N=mxR=NZViROeuratA_y)-R`(%J$+zW@`>^7YDQL1xT^i67W zlqPZ}fWchGW#bae7e_N=N_n{v+yXBBCGueMv8F_=ai} z#E^=)LfNu;D^O>4Z>YI46#POSim1T0#$f7#*%}lcW6=sDO z>pNZ?9Y&;mj%aw@j*xaY-dG8z52%PSzdfwX<#TX|&J%sQLT$%L{F>AeXGormZ5uIUQs+dkHh=iGt%TQ3~whAP8FksDtw6K+)cR)$y`&1$29jC zt7(CKRsAs{2H?V{%uEHeIVI2bBYZ)@2{uXSc1K!P}DjkkKo~le(LXR9u=rgc761?hg`Ncfc2T)3d z!;dvoBzv<1SqzE+EptWV3mDA(7h{-9`@F{0P_*o7G>DhPK2WPr210TS6WZxd-W!GX+@hiiXbv;yC*y!T{fqold)=JK(HM~<&Q#*2hD&x|Q2AgmO7cwRD7LHDwO zy=EIHx_{i$Uts$lwp7(I{|+Z~>nCw;mvk<%V)zXwd+T6a?mENfyRqVtuA2~s|Lq1r z6Hzf*LrS7i$lHfA$%pityG&Z2p1oR9 zq@iQ=)9Stw<%fUgWyW|;Go!>zOl6=PYF%pe0#k6xcTYN$BZptlQIv7*>aT$0^7;LV7?Indr^`RFKais`q&^preQPFYo=jEp0l8USYkWySIt1jhG8z+ExPh>YgcfLG zx{d|+pSjQoPC^>sTFrK!%+qye(lMl4i90qmLFWM1#G9kMz>iN*J!We0I3W3M<4s_y zE2~vw!OA{)J{NN!^sM$aU~P`iSC zZm@y3a(K0IaPools->Pool Class->Assets->Asset Class->Features->Feature Class->Positions->Position Class->" + }, + "attachingRules": { + "compatibleTypes": "->Claim Votes Switch->Votes Switch->" + }, + "propertyNameAtParent": "claimVsotesSwitch", + "childrenNodesProperties": [ + { + "name": "claimVotesSwitch", + "type": "array", + "childType": "Claim Votes Switch", + "autoAdd": false + }, + { + "name": "positionClaimVotes", + "type": "array", + "childType": "Position Claim Vote", + "autoAdd": false + }, + { + "name": "assetClaimVotes", + "type": "array", + "childType": "Asset Claim Vote", + "autoAdd": false + }, + { + "name": "featureClaimVotes", + "type": "array", + "childType": "Feature Claim Vote", + "autoAdd": false + } + ] +} \ No newline at end of file diff --git a/Projects/Governance/Schemas/App-Schema/user-vote-transfer.json b/Projects/Governance/Schemas/App-Schema/user-profile-vote.json similarity index 92% rename from Projects/Governance/Schemas/App-Schema/user-vote-transfer.json rename to Projects/Governance/Schemas/App-Schema/user-profile-vote.json index 2c9253aa1..b5a2d135e 100644 --- a/Projects/Governance/Schemas/App-Schema/user-vote-transfer.json +++ b/Projects/Governance/Schemas/App-Schema/user-profile-vote.json @@ -1,5 +1,5 @@ { - "type": "User Vote Transfer", + "type": "User Profile Vote", "menuItems": [ { "action": "Configure", @@ -36,5 +36,5 @@ "referencingRules": { "compatibleTypes": "->User Profile->" }, - "propertyNameAtParent": "userVoteTransfers" + "propertyNameAtParent": "userProfileVote" } \ No newline at end of file diff --git a/Projects/Governance/Schemas/App-Schema/user-profile-votes-switch.json b/Projects/Governance/Schemas/App-Schema/user-profile-votes-switch.json new file mode 100644 index 000000000..d131fe830 --- /dev/null +++ b/Projects/Governance/Schemas/App-Schema/user-profile-votes-switch.json @@ -0,0 +1,74 @@ +{ + "type": "User Profile Votes Switch", + "menuItems": [ + { + "action": "Configure", + "actionFunction": "uiObject.configEditor.activate", + "label": "Configure", + "iconPathOn": "configuration", + "iconPathOff": "configuration" + }, + { + "action": "Install Votes", + "actionProject": "Governance", + "actionFunction": "payload.executeAction", + "label": "Install Votes", + "relatedUiObject": "Weight Votes Switch", + "askConfirmation": true, + "confirmationLabel": "Confirm to Install" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add User Profile Votes Switch", + "relatedUiObject": "User Profile Votes Switch" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add User Profile Vote", + "relatedUiObject": "User Profile Vote" + }, + { + "action": "Delete UI Object", + "actionProject": "Foundations", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionFunction": "payload.executeAction" + } + ], + "editors": { + "config": true + }, + "initialValues": { + "config": "{}" + }, + "addLeftIcons": true, + "level": 2, + "referencingRules": { + "compatibleTypes": "->Pools->Pool Class->Assets->Asset Class->Features->Feature Class->Positions->Position Class->" + }, + "attachingRules": { + "compatibleTypes": "->User Profile Votes Switch->Votes Switch->" + }, + "propertyNameAtParent": "userProfileVotesSwitch", + "childrenNodesProperties": [ + { + "name": "userProfileotesSwitch", + "type": "array", + "childType": "User Profile Votes Switch", + "autoAdd": false + }, + { + "name": "userProfileVote", + "type": "array", + "childType": "User Profile Vote", + "autoAdd": false + } + ] +} \ No newline at end of file diff --git a/Projects/Governance/Schemas/App-Schema/votes-switch.json b/Projects/Governance/Schemas/App-Schema/votes-switch.json index 57552f96e..462cc6ca0 100644 --- a/Projects/Governance/Schemas/App-Schema/votes-switch.json +++ b/Projects/Governance/Schemas/App-Schema/votes-switch.json @@ -8,6 +8,15 @@ "iconPathOn": "configuration", "iconPathOff": "configuration" }, + { + "action": "Install Votes", + "actionProject": "Governance", + "actionFunction": "payload.executeAction", + "label": "Install Votes", + "relatedUiObject": "Weight Votes Switch", + "askConfirmation": true, + "confirmationLabel": "Confirm to Install" + }, { "action": "Add UI Object", "actionProject": "Foundations", @@ -19,57 +28,22 @@ "action": "Add UI Object", "actionProject": "Foundations", "actionFunction": "payload.executeAction", - "label": "Add Pool Weight Vote", - "relatedUiObject": "Pool Weight Vote" + "label": "Add Claim Votes Switch", + "relatedUiObject": "Claim Votes Switch" }, { "action": "Add UI Object", "actionProject": "Foundations", "actionFunction": "payload.executeAction", - "label": "Add Position Weight Vote", - "relatedUiObject": "Position Weight Vote" + "label": "Add Weight Votes Switch", + "relatedUiObject": "Weight Votes Switch" }, { "action": "Add UI Object", "actionProject": "Foundations", "actionFunction": "payload.executeAction", - "label": "Add Asset Weight Vote", - "relatedUiObject": "Asset Weight Vote" - }, - { - "action": "Add UI Object", - "actionProject": "Foundations", - "actionFunction": "payload.executeAction", - "label": "Add Feature Weight Vote", - "relatedUiObject": "Feature Weight Vote" - }, - { - "action": "Add UI Object", - "actionProject": "Foundations", - "actionFunction": "payload.executeAction", - "label": "Add Position Claim Vote", - "relatedUiObject": "Position Claim Vote" - }, - { - "action": "Add UI Object", - "actionProject": "Foundations", - "actionFunction": "payload.executeAction", - "label": "Add Asset Claim Vote", - "relatedUiObject": "Asset Claim Vote" - }, - { - "action": "Add UI Object", - "actionProject": "Foundations", - "actionFunction": "payload.executeAction", - "label": "Add Feature Claim Vote", - "relatedUiObject": "Feature Claim Vote" - }, - { - "action": "Add UI Object", - "actionProject": "Foundations", - "actionFunction": "payload.executeAction", - "label": "Add User Vote Transfer", - "relatedUiObject": "User Vote Transfer" + "label": "Add User Profile Votes Switch", + "relatedUiObject": "User Profile Votes Switch" }, { "action": "Delete UI Object", @@ -102,51 +76,21 @@ "autoAdd": false }, { - "name": "poolWeightVotes", + "name": "claimVotesSwitch", "type": "array", - "childType": "Pool Weight Vote", + "childType": "Claim Votes Switch", "autoAdd": false }, { - "name": "assetWeightVotes", + "name": "weightVotesSwitch", "type": "array", - "childType": "Asset Weight Vote", + "childType": "Weight Votes Switch", "autoAdd": false }, { - "name": "featureWeightVotes", + "name": "userProfileotesSwitch", "type": "array", - "childType": "Feature Weight Vote", - "autoAdd": false - }, - { - "name": "positionClaimVotes", - "type": "array", - "childType": "Position Claim Vote", - "autoAdd": false - }, - { - "name": "assetClaimVotes", - "type": "array", - "childType": "Asset Claim Vote", - "autoAdd": false - }, - { - "name": "featureClaimVotes", - "type": "array", - "childType": "Feature Claim Vote", - "autoAdd": false - }, - { - "name": "positionWeightVotes", - "type": "array", - "childType": "Position Weight Vote", - "autoAdd": false - }, - { - "name": "userVoteTransfers", - "type": "array", - "childType": "User Vote Transfer", + "childType": "User Profile Votes Switch", "autoAdd": false } ] diff --git a/Projects/Governance/Schemas/App-Schema/weight-votes-switch.json b/Projects/Governance/Schemas/App-Schema/weight-votes-switch.json new file mode 100644 index 000000000..2bf3b50a3 --- /dev/null +++ b/Projects/Governance/Schemas/App-Schema/weight-votes-switch.json @@ -0,0 +1,113 @@ +{ + "type": "Weight Votes Switch", + "menuItems": [ + { + "action": "Configure", + "actionFunction": "uiObject.configEditor.activate", + "label": "Configure", + "iconPathOn": "configuration", + "iconPathOff": "configuration" + }, + { + "action": "Install Votes", + "actionProject": "Governance", + "actionFunction": "payload.executeAction", + "label": "Install Votes", + "relatedUiObject": "Weight Votes Switch", + "askConfirmation": true, + "confirmationLabel": "Confirm to Install" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add Weight Votes Switch", + "relatedUiObject": "Weight Votes Switch" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add Pool Weight Vote", + "relatedUiObject": "Pool Weight Vote" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add Position Weight Vote", + "relatedUiObject": "Position Weight Vote" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add Asset Weight Vote", + "relatedUiObject": "Asset Weight Vote" + }, + { + "action": "Add UI Object", + "actionProject": "Foundations", + "actionFunction": "payload.executeAction", + "label": "Add Feature Weight Vote", + "relatedUiObject": "Feature Weight Vote" + }, + { + "action": "Delete UI Object", + "actionProject": "Foundations", + "askConfirmation": true, + "confirmationLabel": "Confirm to Delete", + "label": "Delete", + "iconPathOn": "delete-entity", + "iconPathOff": "delete-entity", + "actionFunction": "payload.executeAction" + } + ], + "editors": { + "config": true + }, + "initialValues": { + "config": "{}" + }, + "addLeftIcons": true, + "level": 2, + "referencingRules": { + "compatibleTypes": "->Pools->Pool Class->Assets->Asset Class->Features->Feature Class->Positions->Position Class->" + }, + "attachingRules": { + "compatibleTypes": "->Weight Votes Switch->Votes Switch->" + }, + "propertyNameAtParent": "weightVotesSwitch", + "childrenNodesProperties": [ + { + "name": "weightVotesSwitch", + "type": "array", + "childType": "Weight Votes Switch", + "autoAdd": false + }, + { + "name": "poolWeightVotes", + "type": "array", + "childType": "Pool Weight Vote", + "autoAdd": false + }, + { + "name": "assetWeightVotes", + "type": "array", + "childType": "Asset Weight Vote", + "autoAdd": false + }, + { + "name": "featureWeightVotes", + "type": "array", + "childType": "Feature Weight Vote", + "autoAdd": false + }, + { + "name": "positionWeightVotes", + "type": "array", + "childType": "Position Weight Vote", + "autoAdd": false + } + ] +} \ No newline at end of file diff --git a/Projects/Governance/Schemas/Docs-Nodes/U/User/User-Vote-Transfer/user-vote-transfer.json b/Projects/Governance/Schemas/Docs-Nodes/U/User/User-Vote-Transfer/user-vote-transfer.json index 0a0e51662..f4c0b3929 100644 --- a/Projects/Governance/Schemas/Docs-Nodes/U/User/User-Vote-Transfer/user-vote-transfer.json +++ b/Projects/Governance/Schemas/Docs-Nodes/U/User/User-Vote-Transfer/user-vote-transfer.json @@ -1,5 +1,5 @@ { - "type": "User Vote Transfer", + "type": "User Profile Vote", "definition": { "text": "This node allows users to transfer some of their voting power to other users, effectively creating a Liquid Democracy. Votes received by users are then flowed through the recipient user's token streams, increasing their size.", "updated": 1622989097099 diff --git a/Projects/Governance/UI/Function-Libraries/ActionSwitch.js b/Projects/Governance/UI/Function-Libraries/ActionSwitch.js index 6b8003c68..378790fc2 100644 --- a/Projects/Governance/UI/Function-Libraries/ActionSwitch.js +++ b/Projects/Governance/UI/Function-Libraries/ActionSwitch.js @@ -18,12 +18,16 @@ function newGovernanceActionSwitch() { async function executeAction(action) { switch (action.name) { - case 'Install Assets': { + case 'Install Assets': { UI.projects.governance.functionLibraries.assets.installAssets(action.node, action.rootNodes) break } - } + case 'Install Votes': + { + UI.projects.governance.functionLibraries.votes.installVotes(action.node, action.rootNodes) + break + } case 'Add Missing Plugin User Profiles': { UI.projects.governance.functionLibraries.pluginsFunctions.addMissingPluginUserProfiles(action.node, action.rootNodes) diff --git a/Projects/Governance/UI/Function-Libraries/Votes.js b/Projects/Governance/UI/Function-Libraries/Votes.js index 4861566ce..61eeafbce 100644 --- a/Projects/Governance/UI/Function-Libraries/Votes.js +++ b/Projects/Governance/UI/Function-Libraries/Votes.js @@ -1,6 +1,7 @@ function newGovernanceFunctionLibraryVotes() { let thisObject = { - calculate: calculate + calculate: calculate, + installVotes: installVotes } return thisObject @@ -46,148 +47,134 @@ function newGovernanceFunctionLibraryVotes() { let userProfile = userProfiles[i] distributeForProfile(userProfile) } - } - function resetVotes(node) { - if (node === undefined) { return } - if (node.payload === undefined) { return } - node.payload.votes = 0 - /* - When we reach certain node types, we will halt the distribution, because thse are targets for - voting power. - */ - if ( - node.type === 'Position' || - node.type === 'Asset' || - node.type === 'Feature' || - node.type === 'Pool' || - node.type === 'Position Contribution Claim' || - node.type === 'Asset Contribution Claim' || - node.type === 'Feature Contribution Claim' - ) { return } - /* - If there is a reference parent defined, this means that the voting power is - transfered to it and not distributed among children. - */ - if ( - node.payload.referenceParent !== undefined && - node.type !== 'Asset Class' && - node.type !== 'Feature Class' && - node.type !== 'Position Class' - ) { - resetVotes(node.payload.referenceParent) - return - } - /* - If there is no reference parent we will redistribute voting power among children. - */ - let schemaDocument = getSchemaDocument(node) - if (schemaDocument === undefined) { return } + function resetVotes(node) { + if (node === undefined) { return } + if (node.payload === undefined) { return } + node.payload.votes = 0 + /* + When we reach certain node types, we will halt the distribution, because thse are targets for + voting power. + */ + if ( + node.type === 'Position' || + node.type === 'Asset' || + node.type === 'Feature' || + node.type === 'Pool' || + node.type === 'Position Contribution Claim' || + node.type === 'Asset Contribution Claim' || + node.type === 'Feature Contribution Claim' + ) { return } + /* + If there is a reference parent defined, this means that the voting power is + transfered to it and not distributed among children. + */ + if ( + node.payload.referenceParent !== undefined && + node.type !== 'Votes Switch' && + node.type !== 'Claim Votes Switch' && + node.type !== 'Weight Votes Switch' && + node.type !== 'User Profile Votes Switch' + ) { + resetVotes(node.payload.referenceParent) + return + } + /* + If there is no reference parent we will redistribute voting power among children. + */ + let schemaDocument = getSchemaDocument(node) + if (schemaDocument === undefined) { return } - if (schemaDocument.childrenNodesProperties !== undefined) { - for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { - let property = schemaDocument.childrenNodesProperties[i] + if (schemaDocument.childrenNodesProperties !== undefined) { + for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { + let property = schemaDocument.childrenNodesProperties[i] - if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } + if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } - switch (property.type) { - case 'node': { - if (node.type === 'User Profile' && property.name === "votesDistribution") { - let childNode = node[property.name] - resetVotes(childNode) - } - } - break - case 'array': { - let propertyArray = node[property.name] - if (propertyArray !== undefined) { - for (let m = 0; m < propertyArray.length; m++) { - let childNode = propertyArray[m] + switch (property.type) { + case 'node': { + if (node.type === 'User Profile' && property.name === "votesDistribution") { + let childNode = node[property.name] resetVotes(childNode) } } - break + break + case 'array': { + let propertyArray = node[property.name] + if (propertyArray !== undefined) { + for (let m = 0; m < propertyArray.length; m++) { + let childNode = propertyArray[m] + resetVotes(childNode) + } + } + break + } } } } } - } - function distributeForProfile(userProfile) { - let votes = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(userProfile.payload, 'tokens') - distributeVotes(userProfile, votes) - } - - function distributeVotes(node, votes, switchPercentage) { - if (node === undefined) { return } - if (node.payload === undefined) { return } - node.payload.votes = node.payload.votes + votes - drawVotes(node, node.payload.votes, switchPercentage) - /* - When we reach certain node types, we will halt the distribution, because thse are targets for - voting power. - */ - if ( - node.type === 'Position' || - node.type === 'Asset' || - node.type === 'Feature' || - node.type === 'Pool' || - node.type === 'Position Contribution Claim' || - node.type === 'Asset Contribution Claim' || - node.type === 'Feature Contribution Claim' - ) { return } - /* - If there is a reference parent defined, this means that the voting power is - transfered to it and not distributed among children. - */ - if ( - node.payload.referenceParent !== undefined && - node.type !== 'Asset Class' && - node.type !== 'Feature Class' && - node.type !== 'Position Class' - ) { - distributeVotes(node.payload.referenceParent, votes) - return + function distributeForProfile(userProfile) { + let votes = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(userProfile.payload, 'tokens') + distributeVotes(userProfile, votes) } - /* - If there is no reference parent we will redistribute voting power among children. - */ - let schemaDocument = getSchemaDocument(node) - if (schemaDocument === undefined) { return } - if (schemaDocument.childrenNodesProperties !== undefined) { + function distributeVotes(node, votes, switchPercentage) { + if (node === undefined) { return } + if (node.payload === undefined) { return } + node.payload.votes = node.payload.votes + votes + drawVotes(node, node.payload.votes, switchPercentage) /* - Before distributing the voting power, we will calculate how the power - is going to be switched between all nodes. The first pass is about - scanning all sibling nodes to see which ones have a percentage defined - at their config, and check that all percentages don't add more than 100. + When we reach certain node types, we will halt the distribution, because thse are targets for + voting power. */ - let totalPercentage = 0 - let totalNodesWithoutPercentage = 0 - for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { - let property = schemaDocument.childrenNodesProperties[i] + if ( + node.type === 'Position' || + node.type === 'Asset' || + node.type === 'Feature' || + node.type === 'Pool' || + node.type === 'Position Contribution Claim' || + node.type === 'Asset Contribution Claim' || + node.type === 'Feature Contribution Claim' + ) { return } + /* + If there is a reference parent defined, this means that the voting power is + transfered to it and not distributed among children. + */ + if ( + node.payload.referenceParent !== undefined && + node.type !== 'Votes Switch' && + node.type !== 'Claim Votes Switch' && + node.type !== 'Weight Votes Switch' && + node.type !== 'User Profile Votes Switch' + ) { + distributeVotes(node.payload.referenceParent, votes) + return + } + /* + If there is no reference parent we will redistribute voting power among children. + */ + let schemaDocument = getSchemaDocument(node) + if (schemaDocument === undefined) { return } - if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } + if (schemaDocument.childrenNodesProperties !== undefined) { + /* + Before distributing the voting power, we will calculate how the power + is going to be switched between all nodes. The first pass is about + scanning all sibling nodes to see which ones have a percentage defined + at their config, and check that all percentages don't add more than 100. + */ + let totalPercentage = 0 + let totalNodesWithoutPercentage = 0 + for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { + let property = schemaDocument.childrenNodesProperties[i] - switch (property.type) { - case 'node': { - if (node.type === 'User Profile' && property.name === "votesDistribution") { - let childNode = node[property.name] - if (childNode === undefined) { continue } - let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') - if (percentage !== undefined && isNaN(percentage) !== true) { - totalPercentage = totalPercentage + percentage - } else { - totalNodesWithoutPercentage++ - } - } - } - break - case 'array': { - let propertyArray = node[property.name] - if (propertyArray !== undefined) { - for (let m = 0; m < propertyArray.length; m++) { - let childNode = propertyArray[m] + if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } + + switch (property.type) { + case 'node': { + if (node.type === 'User Profile' && property.name === "votesDistribution") { + let childNode = node[property.name] if (childNode === undefined) { continue } let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') if (percentage !== undefined && isNaN(percentage) !== true) { @@ -197,44 +184,45 @@ function newGovernanceFunctionLibraryVotes() { } } } - break - } - } - } - if (totalPercentage > 100) { - node.payload.uiObject.setErrorMessage('Voting Power Switching Error. Total Percentage of children nodes is grater that 100.') - return - } - let defaultPercentage = 0 - if (totalNodesWithoutPercentage > 0) { - defaultPercentage = (100 - totalPercentage) / totalNodesWithoutPercentage - } - /* - Here we do the actual distribution. - */ - for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { - let property = schemaDocument.childrenNodesProperties[i] - - if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } - - switch (property.type) { - case 'node': { - if (node.type === 'User Profile' && property.name === "votesDistribution") { - let childNode = node[property.name] - if (childNode === undefined) { continue } - let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') - if (percentage === undefined || isNaN(percentage) === true) { - percentage = defaultPercentage + break + case 'array': { + let propertyArray = node[property.name] + if (propertyArray !== undefined) { + for (let m = 0; m < propertyArray.length; m++) { + let childNode = propertyArray[m] + if (childNode === undefined) { continue } + let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') + if (percentage !== undefined && isNaN(percentage) !== true) { + totalPercentage = totalPercentage + percentage + } else { + totalNodesWithoutPercentage++ + } + } } - distributeVotes(childNode, votes * percentage / 100, percentage) + break } } - break - case 'array': { - let propertyArray = node[property.name] - if (propertyArray !== undefined) { - for (let m = 0; m < propertyArray.length; m++) { - let childNode = propertyArray[m] + } + if (totalPercentage > 100) { + node.payload.uiObject.setErrorMessage('Voting Power Switching Error. Total Percentage of children nodes is grater that 100.') + return + } + let defaultPercentage = 0 + if (totalNodesWithoutPercentage > 0) { + defaultPercentage = (100 - totalPercentage) / totalNodesWithoutPercentage + } + /* + Here we do the actual distribution. + */ + for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { + let property = schemaDocument.childrenNodesProperties[i] + + if (node.type === 'User Profile' && property.name !== "votesDistribution") { continue } + + switch (property.type) { + case 'node': { + if (node.type === 'User Profile' && property.name === "votesDistribution") { + let childNode = node[property.name] if (childNode === undefined) { continue } let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') if (percentage === undefined || isNaN(percentage) === true) { @@ -243,45 +231,176 @@ function newGovernanceFunctionLibraryVotes() { distributeVotes(childNode, votes * percentage / 100, percentage) } } - break + break + case 'array': { + let propertyArray = node[property.name] + if (propertyArray !== undefined) { + for (let m = 0; m < propertyArray.length; m++) { + let childNode = propertyArray[m] + if (childNode === undefined) { continue } + let percentage = UI.projects.foundations.utilities.nodeConfig.loadConfigProperty(childNode.payload, 'percentage') + if (percentage === undefined || isNaN(percentage) === true) { + percentage = defaultPercentage + } + distributeVotes(childNode, votes * percentage / 100, percentage) + } + } + break + } } } } } + + function drawVotes(node, votes, percentage) { + votes = new Intl.NumberFormat().format(votes) + ' ' + 'Votes' + if (node.payload !== undefined) { + if (node.type === 'User Profile') { + return + } + if ( + node.type === 'Position' || + node.type === 'Position Class' || + node.type === 'Pool' || + node.type === 'Tokens Switch' || + node.type === 'Asset' || + node.type === 'Asset Class' || + node.type === 'Feature' || + node.type === 'Feature Class' || + node.type === 'Position Contribution Claim' || + node.type === 'Asset Contribution Claim' || + node.type === 'Feature Contribution Claim' + ) { + node.payload.uiObject.valueAngleOffset = 0 + node.payload.uiObject.valueAtAngle = false + } else { + node.payload.uiObject.valueAngleOffset = 180 + node.payload.uiObject.valueAtAngle = true + } + + node.payload.uiObject.setValue(votes) + + if (percentage !== undefined) { + node.payload.uiObject.setPercentage(percentage.toFixed(2)) + } + } + } } - function drawVotes(node, votes, percentage) { - votes = new Intl.NumberFormat().format(votes) + ' ' + 'Votes' - if (node.payload !== undefined) { - if (node.type === 'User Profile') { - return - } + function installVotes(node, rootNodes) { + if (node.payload === undefined) { return } + if (node.payload.referenceParent === undefined) { + node.payload.uiObject.setErrorMessage('To install votes you need a Reference Parent') + return + } + scanNodeBranch(node, node.payload.referenceParent) + + function scanNodeBranch(originNode, destinationNode) { if ( - node.type === 'Position' || - node.type === 'Position Class' || - node.type === 'Pool' || - node.type === 'Tokens Switch' || - node.type === 'Asset' || - node.type === 'Asset Class' || - node.type === 'Feature' || - node.type === 'Feature Class' || - node.type === 'Position Contribution Claim' || - node.type === 'Asset Contribution Claim' || - node.type === 'Feature Contribution Claim' + destinationNode.type === 'Pool' || + destinationNode.type === 'Asset' || + destinationNode.type === 'Feature' || + destinationNode.type === 'Position' ) { - node.payload.uiObject.valueAngleOffset = 0 - node.payload.uiObject.valueAtAngle = false + originNode.name = destinationNode.name + ' ' + destinationNode.type + ' ' + ' Vote' } else { - node.payload.uiObject.valueAngleOffset = 180 - node.payload.uiObject.valueAtAngle = true + originNode.name = destinationNode.name + ' ' + destinationNode.type } - node.payload.uiObject.setValue(votes) + let schemaDocument = getSchemaDocument(destinationNode) + if (schemaDocument === undefined) { return } - if (percentage !== undefined) { - node.payload.uiObject.setPercentage(percentage.toFixed(2)) + if (schemaDocument.childrenNodesProperties !== undefined) { + for (let i = 0; i < schemaDocument.childrenNodesProperties.length; i++) { + let property = schemaDocument.childrenNodesProperties[i] + + switch (property.type) { + case 'node': { + + let destinationNodeChild = destinationNode[property.name] + + let originNodeChildType = getOriginNodeChildType(destinationNodeChild) + let originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType) + + if ( + destinationNodeChild.type === 'Pool' || + destinationNodeChild.type === 'Asset' || + destinationNodeChild.type === 'Feature' || + destinationNodeChild.type === 'Position' + ) { + originNodeChild.payload.referenceParent = destinationNodeChild + } + + scanNodeBranch(originNodeChild, destinationNodeChild) + } + break + case 'array': { + let propertyArray = destinationNode[property.name] + if (propertyArray !== undefined) { + for (let m = 0; m < propertyArray.length; m++) { + + let destinationNodeChild = propertyArray[m] + + let originNodeChildType = getOriginNodeChildType(destinationNodeChild) + let originNodeChild = UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(originNode, originNodeChildType) + + if ( + destinationNodeChild.type === 'Pool' || + destinationNodeChild.type === 'Asset' || + destinationNodeChild.type === 'Feature' || + destinationNodeChild.type === 'Position' + ) { + originNodeChild.payload.referenceParent = destinationNodeChild + } + + scanNodeBranch(originNodeChild, destinationNodeChild) + } + } + break + } + } + } } } - } + function getOriginNodeChildType(destinationNode) { + let originNodeType + + switch (destinationNode.type) { + case 'Pool Class': { + originNodeType = 'Weight Votes Switch' + break + } + case 'Asset Class': { + originNodeType = 'Weight Votes Switch' + break + } + case 'Feature Class': { + originNodeType = 'Weight Votes Switch' + break + } + case 'Position Class': { + originNodeType = 'Weight Votes Switch' + break + } + case 'Pool': { + originNodeType = 'Pool Weight Vote' + break + } + case 'Asset': { + originNodeType = 'Asset Weight Vote' + break + } + case 'Feature': { + originNodeType = 'Feature Weight Vote' + break + } + case 'Position Class': { + originNodeType = 'Position Weight Vote' + break + } + } + return originNodeType + } + } } \ No newline at end of file