diff --git a/Client/WebServer/css/governance.css b/Client/WebServer/css/governance.css index 5d6898106..6f2c547e8 100644 --- a/Client/WebServer/css/governance.css +++ b/Client/WebServer/css/governance.css @@ -880,7 +880,11 @@ #governance-tab5:checked ~ .governance-search-result-content #content5, #governance-tab6:checked ~ .governance-search-result-content #content6, #governance-tab7:checked ~ .governance-search-result-content #content7, - #governance-tab8:checked ~ .governance-search-result-content #content8 { + #governance-tab8:checked ~ .governance-search-result-content #content8, + #governance-tab9:checked ~ .governance-search-result-content #content9, + #governance-tab10:checked ~ .governance-search-result-content #content10, + #governance-tab11:checked ~ .governance-search-result-content #content11, + #governance-tab12:checked ~ .governance-search-result-content #content12 { display: block; } diff --git a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json index 510218400..18311fa52 100644 --- a/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Julian-Molina.json @@ -1089,7 +1089,7 @@ } } }, - "stackingProgram": { + "stakingProgram": { "type": "Staking Program", "name": "New Staking Program", "config": "{}", diff --git a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json index 8d61a262d..ad2afd49c 100644 --- a/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json +++ b/Projects/Governance/Plugins/User-Profiles/Luis-Fernando-Molina.json @@ -3797,11 +3797,11 @@ }, { "type": "Token Power Switch", - "name": "Stacking", + "name": "Staking", "config": "{}", "project": "Governance", "tokenPowerSwitch": [], - "stackingProgram": { + "stakingProgram": { "type": "Staking Program", "name": "New Staking Program", "config": "{}", diff --git a/Projects/Governance/Plugins/User-Profiles/harrellbm.json b/Projects/Governance/Plugins/User-Profiles/harrellbm.json index 817228308..afb6d09de 100644 --- a/Projects/Governance/Plugins/User-Profiles/harrellbm.json +++ b/Projects/Governance/Plugins/User-Profiles/harrellbm.json @@ -851,7 +851,7 @@ "config": "{\n \"percentage\": 10\n}", "project": "Governance", "tokenPowerSwitch": [], - "stackingProgram": { + "stakingProgram": { "type": "Staking Program", "name": "New Staking Program", "config": "{}", diff --git a/Projects/Governance/Schemas/App-Schema/staking-program.json b/Projects/Governance/Schemas/App-Schema/staking-program.json index 0e54acf98..86dab37b1 100644 --- a/Projects/Governance/Schemas/App-Schema/staking-program.json +++ b/Projects/Governance/Schemas/App-Schema/staking-program.json @@ -39,7 +39,7 @@ }, "addLeftIcons": true, "level": 1, - "propertyNameAtParent": "stackingProgram", + "propertyNameAtParent": "stakingProgram", "childrenNodesProperties": [ { "name": "tokensAwarded", diff --git a/Projects/Governance/Schemas/App-Schema/token-power-switch.json b/Projects/Governance/Schemas/App-Schema/token-power-switch.json index cf39680e3..966f72788 100644 --- a/Projects/Governance/Schemas/App-Schema/token-power-switch.json +++ b/Projects/Governance/Schemas/App-Schema/token-power-switch.json @@ -65,7 +65,7 @@ "actionProject": "Foundations", "actionFunction": "payload.executeAction", "disableIfPropertyIsDefined": true, - "propertyToCheckFor": "stackingProgram", + "propertyToCheckFor": "stakingProgram", "label": "Add Staking Program", "relatedUiObject": "Staking Program" }, @@ -139,7 +139,7 @@ "autoAdd": false }, { - "name": "stackingProgram", + "name": "stakingProgram", "type": "node", "childType": "Staking Program", "autoAdd": false diff --git a/Projects/Governance/UI/Function-Libraries/DelegationProgram.js b/Projects/Governance/UI/Function-Libraries/DelegationProgram.js index b95d45174..8bc06d0b4 100644 --- a/Projects/Governance/UI/Function-Libraries/DelegationProgram.js +++ b/Projects/Governance/UI/Function-Libraries/DelegationProgram.js @@ -47,9 +47,14 @@ function newGovernanceFunctionLibraryDelegationProgram() { function resetProgram(node) { if (node === undefined) { return } if (node.payload === undefined) { return } - node.payload.delegationProgram = { - programPower: 0, - ownPower: 0 + if (node.payload.delegationProgram === undefined) { + node.payload.delegationProgram = { + programPower: 0, + ownPower: 0 + } + } else { + node.payload.delegationProgram.programPower = 0 + node.payload.delegationProgram.ownPower = 0 } if (node.type === 'User Profile') { diff --git a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js index ad0c1bb5f..1294ed78e 100644 --- a/Projects/Governance/UI/Function-Libraries/DistributionProcess.js +++ b/Projects/Governance/UI/Function-Libraries/DistributionProcess.js @@ -69,7 +69,7 @@ function newGovernanceFunctionLibraryDistributionProcess() { userProfiles ) - UI.projects.governance.functionLibraries.stackingProgram.calculate( + UI.projects.governance.functionLibraries.stakingProgram.calculate( pools, userProfiles ) diff --git a/Projects/Governance/UI/Function-Libraries/StackingProgram.js b/Projects/Governance/UI/Function-Libraries/StakingProgram.js similarity index 78% rename from Projects/Governance/UI/Function-Libraries/StackingProgram.js rename to Projects/Governance/UI/Function-Libraries/StakingProgram.js index e1b82d755..3de2d6b35 100644 --- a/Projects/Governance/UI/Function-Libraries/StackingProgram.js +++ b/Projects/Governance/UI/Function-Libraries/StakingProgram.js @@ -1,4 +1,4 @@ -function newGovernanceFunctionLibraryStackingProgram() { +function newGovernanceFunctionLibraryStakingProgram() { let thisObject = { calculate: calculate } @@ -12,7 +12,7 @@ function newGovernanceFunctionLibraryStackingProgram() { let programPoolTokenReward /* In order to be able to calculate the share of the Program Pool for each User Profile, - we need to accumulate all the Stacking Power that each User Profile at their Program + we need to accumulate all the Staking Power that each User Profile at their Program node has, because with that Power is that each Program node gets a share of the pool. */ let accumulatedProgramPower = 0 @@ -51,7 +51,7 @@ function newGovernanceFunctionLibraryStackingProgram() { let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Staking Program") if (program === undefined) { continue } if (program.payload === undefined) { continue } - if (program.payload.stackingProgram.isActive === false) { continue } + if (program.payload.stakingProgram.isActive === false) { continue } distributeProgram(program) } @@ -62,7 +62,7 @@ function newGovernanceFunctionLibraryStackingProgram() { let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, "Staking Program") if (program === undefined) { continue } if (program.payload === undefined) { continue } - if (program.payload.stackingProgram.isActive === false) { continue } + if (program.payload.stakingProgram.isActive === false) { continue } calculateProgram(program) } @@ -70,13 +70,25 @@ function newGovernanceFunctionLibraryStackingProgram() { function resetProgram(node) { if (node === undefined) { return } if (node.payload === undefined) { return } - node.payload.stackingProgram = { - count: 0, - percentage: 0, - outgoingPower: 0, - ownPower: 0, - incomingPower: 0, - awarded: { + if (node.payload.stakingProgram === undefined) { + node.payload.stakingProgram = { + count: 0, + percentage: 0, + outgoingPower: 0, + ownPower: 0, + incomingPower: 0, + awarded: { + tokens: 0, + percentage: 0 + } + } + } else { + node.payload.stakingProgram.count = 0 + node.payload.stakingProgram.percentage = 0 + node.payload.stakingProgram.outgoingPower = 0 + node.payload.stakingProgram.ownPower = 0 + node.payload.stakingProgram.incomingPower = 0 + node.payload.stakingProgram.awarded = { tokens: 0, percentage: 0 } @@ -92,21 +104,21 @@ function newGovernanceFunctionLibraryStackingProgram() { if ( userProfile.payload.blockchainTokens === undefined ) { - node.payload.stackingProgram.isActive = false + node.payload.stakingProgram.isActive = false userProfile.payload.uiObject.setErrorMessage("You need to setup this profile with the Profile Constructor, to access the Token Power of your account at the Blockchain.") return } - node.payload.stackingProgram.isActive = true + node.payload.stakingProgram.isActive = true } function distributeProgram(programNode) { if (programNode === undefined || programNode.payload === undefined) { return } /* - Here we will convert Token Power into Stacking Power. - As per system rules Stacking Powar = tokensPower + Here we will convert Token Power into Staking Power. + As per system rules Staking Powar = tokensPower */ let programPower = programNode.payload.tokenPower - programNode.payload.stackingProgram.ownPower = programPower + programNode.payload.stakingProgram.ownPower = programPower accumulatedProgramPower = accumulatedProgramPower + programPower } @@ -132,7 +144,7 @@ function newGovernanceFunctionLibraryStackingProgram() { programNode.payload.uiObject.setErrorMessage("Tokens Awarded Node is needed in order for this Program to get Tokens from the Program Pool.") return } - programNode.payload.stackingProgram.awarded.tokens = programNode.payload.stackingProgram.ownPower * totalPowerRewardRatio + programNode.payload.stakingProgram.awarded.tokens = programNode.payload.stakingProgram.ownPower * totalPowerRewardRatio drawProgram(programNode) } @@ -140,7 +152,7 @@ function newGovernanceFunctionLibraryStackingProgram() { function drawProgram(node) { if (node.payload !== undefined) { - const ownPowerText = parseFloat(node.payload.stackingProgram.ownPower.toFixed(2)).toLocaleString('en') + const ownPowerText = parseFloat(node.payload.stakingProgram.ownPower.toFixed(2)).toLocaleString('en') node.payload.uiObject.statusAngleOffset = 0 node.payload.uiObject.statusAtAngle = false @@ -149,7 +161,7 @@ function newGovernanceFunctionLibraryStackingProgram() { } if (node.tokensAwarded !== undefined && node.tokensAwarded.payload !== undefined) { - const tokensAwardedText = parseFloat(node.payload.stackingProgram.awarded.tokens.toFixed(2)).toLocaleString('en') + const tokensAwardedText = parseFloat(node.payload.stakingProgram.awarded.tokens.toFixed(2)).toLocaleString('en') node.tokensAwarded.payload.uiObject.valueAngleOffset = 0 node.tokensAwarded.payload.uiObject.valueAtAngle = false diff --git a/Projects/Governance/UI/Function-Libraries/VotingProgram.js b/Projects/Governance/UI/Function-Libraries/VotingProgram.js index 9bafa8d17..2e3a6f387 100644 --- a/Projects/Governance/UI/Function-Libraries/VotingProgram.js +++ b/Projects/Governance/UI/Function-Libraries/VotingProgram.js @@ -73,11 +73,18 @@ function newGovernanceFunctionLibraryVotingProgram() { function resetVotes(node) { if (node === undefined) { return } if (node.payload === undefined) { return } - node.payload.votingProgram = { - votes: 0, - ownPower: 0, - incomingPower: 0 + if (node.payload.votingProgram === undefined) { + node.payload.votingProgram = { + votes: 0, + ownPower: 0, + incomingPower: 0 + } + } else { + node.payload.votingProgram.votes = 0 + node.payload.votingProgram.ownPower = 0 + node.payload.votingProgram.incomingPower = 0 } + /* When we reach certain node types, we will halt the distribution, because these are targets for voting power. diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Claims.js b/Projects/Governance/UI/Spaces/Reports-Space/Claims.js new file mode 100644 index 000000000..a5005023e --- /dev/null +++ b/Projects/Governance/UI/Spaces/Reports-Space/Claims.js @@ -0,0 +1,112 @@ +function newGovernanceReportsClaims() { + let thisObject = { + addHTML: addHTML, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function addHTML(tabIndex, filters) { + /* + Parameters + */ + let table = 'claims' + let programName = 'Claims Program' + let programPropertyName = 'claimsProgram' + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ + let tableRecords = [] + let tableRecordDefinition = { + "properties": [ + { + "name": "name", + "label": "User Profile", + "type": "string", + "order": "ascending", + "textAlign": "left" + }, + { + "name": "ownPower", + "label": "Claims Power", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "tokensAwarded", + "label": "Awarded", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + } + ] + } + /* + Here we get from the workspace all User Profiles. + */ + let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile') + /* + Transform the result array into table records. + */ + for (let j = 0; j < userProfiles.length; j++) { + let userProfile = userProfiles[j] + + if (userProfile.tokenPowerSwitch === undefined) { continue } + let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, programName) + if (program === undefined) { continue } + if (program.payload === undefined) { continue } + + let tableRecord = { + "name": userProfile.name, + "ownPower": program.payload[programPropertyName].ownPower | 0, + "tokensAwarded": program.payload[programPropertyName].awarded.tokens | 0 + } + + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } + } + /* + Get the sorting order for this table. + */ + let sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + /* + Set the default sorting order for this table. + */ + if (sortingOrder === undefined) { + UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] = { + property: 'tokensAwarded', + order: 'descending' + } + sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + } + return UI.projects.governance.utilities.tables.addHTML( + table, + tableRecords, + tableRecordDefinition, + sortingOrder, + tabIndex + ) + } +} \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Delegation.js b/Projects/Governance/UI/Spaces/Reports-Space/Delegation.js new file mode 100644 index 000000000..d090b2917 --- /dev/null +++ b/Projects/Governance/UI/Spaces/Reports-Space/Delegation.js @@ -0,0 +1,112 @@ +function newGovernanceReportsDelegation() { + let thisObject = { + addHTML: addHTML, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function addHTML(tabIndex, filters) { + /* + Parameters + */ + let table = 'delegation' + let programName = 'Delegation Program' + let programPropertyName = 'delegationProgram' + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ + let tableRecords = [] + let tableRecordDefinition = { + "properties": [ + { + "name": "name", + "label": "User Profile", + "type": "string", + "order": "ascending", + "textAlign": "left" + }, + { + "name": "ownPower", + "label": "Delegate Power", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "tokensBonus", + "label": "Bonus", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + } + ] + } + /* + Here we get from the workspace all User Profiles. + */ + let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile') + /* + Transform the result array into table records. + */ + for (let j = 0; j < userProfiles.length; j++) { + let userProfile = userProfiles[j] + + if (userProfile.tokenPowerSwitch === undefined) { continue } + let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, programName) + if (program === undefined) { continue } + if (program.payload === undefined) { continue } + + let tableRecord = { + "name": userProfile.name, + "ownPower": program.payload[programPropertyName].ownPower | 0, + "tokensBonus": program.payload[programPropertyName].bonus.tokens | 0 + } + + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } + } + /* + Get the sorting order for this table. + */ + let sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + /* + Set the default sorting order for this table. + */ + if (sortingOrder === undefined) { + UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] = { + property: 'tokensBonus', + order: 'descending' + } + sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + } + return UI.projects.governance.utilities.tables.addHTML( + table, + tableRecords, + tableRecordDefinition, + sortingOrder, + tabIndex + ) + } +} \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js b/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js index d4b2d608c..d2d4bea6e 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js @@ -5,7 +5,7 @@ function newGovernanceReportsReportsPage() { finalize: finalize } - let lastTabIndex + let lastTabIndex return thisObject function initialize() { @@ -17,20 +17,20 @@ function newGovernanceReportsReportsPage() { } function render(tabIndex, filters) { - + /* Setup tabIndex */ if (tabIndex === undefined) { tabIndex = lastTabIndex } else { lastTabIndex = tabIndex } - + let resultsArary = [] let initialTime = new Date() buildHTML() function buildHTML() { - const tabs = ['Profiles', 'Referrals', 'Supporters', 'Mentors', 'Pools', 'Assets', 'Features', 'Positions'] + const tabs = ['Profiles', 'Referrals', 'Supporters', 'Mentors', 'Claims', 'Votes', 'Staking', 'Delegation', 'Pools', 'Assets', 'Features', 'Positions'] let HTML = '' HTML = HTML + '
' HTML = HTML + UI.projects.governance.spaces.reportsSpace.filtersHeader.addFilterHeader() @@ -80,26 +80,50 @@ function newGovernanceReportsReportsPage() { resultCounter = response.resultCounter break } + case 'Claims': { + let response = UI.projects.governance.spaces.reportsSpace.claims.addHTML(5, filters) + HTML = HTML + response.HTML + resultCounter = response.resultCounter + break + } + case 'Votes': { + let response = UI.projects.governance.spaces.reportsSpace.votes.addHTML(6, filters) + HTML = HTML + response.HTML + resultCounter = response.resultCounter + break + } + case 'Staking': { + let response = UI.projects.governance.spaces.reportsSpace.staking.addHTML(7, filters) + HTML = HTML + response.HTML + resultCounter = response.resultCounter + break + } + case 'Delegation': { + let response = UI.projects.governance.spaces.reportsSpace.delegation.addHTML(8, filters) + HTML = HTML + response.HTML + resultCounter = response.resultCounter + break + } case 'Pools': { - let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(5, filters) + let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(9, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Assets': { - let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(6, filters) + let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(10, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Features': { - let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(7, filters) + let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(11, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Positions': { - let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(8, filters) + let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(12, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break diff --git a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js index a396948ca..76abd71fe 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js @@ -11,6 +11,10 @@ function newGobernanceReportsSpace() { referrals: undefined, supports: undefined, mentors: undefined, + claims: undefined, + votes: undefined, + staking: undefined, + delegations: undefined, pools: undefined, assets: undefined, features: undefined, @@ -68,6 +72,18 @@ function newGobernanceReportsSpace() { thisObject.mentors.finalize() thisObject.mentors = undefined + thisObject.claims.finalize() + thisObject.claims = undefined + + thisObject.votes.finalize() + thisObject.votes = undefined + + thisObject.staking.finalize() + thisObject.staking = undefined + + thisObject.delegation.finalize() + thisObject.delegation = undefined + thisObject.pools.finalize() thisObject.pools = undefined @@ -104,6 +120,10 @@ function newGobernanceReportsSpace() { thisObject.referrals = newGovernanceReportsReferrals() thisObject.supports = newGovernanceReportsSupports() thisObject.mentors = newGovernanceReportsMentors() + thisObject.claims = newGovernanceReportsClaims() + thisObject.votes = newGovernanceReportsVotes() + thisObject.staking = newGovernanceReportsStaking() + thisObject.delegation = newGovernanceReportsDelegation() thisObject.pools = newGovernanceReportsPools() thisObject.assets = newGovernanceReportsAssets() thisObject.features = newGovernanceReportsFeatures() @@ -115,6 +135,10 @@ function newGobernanceReportsSpace() { thisObject.userProfiles.initialize() thisObject.referrals.initialize() thisObject.mentors.initialize() + thisObject.claims.initialize() + thisObject.votes.initialize() + thisObject.staking.initialize() + thisObject.delegation.initialize() thisObject.pools.initialize() thisObject.assets.initialize() thisObject.features.initialize() diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Staking.js b/Projects/Governance/UI/Spaces/Reports-Space/Staking.js new file mode 100644 index 000000000..48b044c72 --- /dev/null +++ b/Projects/Governance/UI/Spaces/Reports-Space/Staking.js @@ -0,0 +1,121 @@ +function newGovernanceReportsStaking() { + let thisObject = { + addHTML: addHTML, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function addHTML(tabIndex, filters) { + /* + Parameters + */ + let table = 'staking' + let programName = 'Staking Program' + let programPropertyName = 'stakingProgram' + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ + let tableRecords = [] + let tableRecordDefinition = { + "properties": [ + { + "name": "name", + "label": "User Profile", + "type": "string", + "order": "ascending", + "textAlign": "left" + }, + { + "name": "ownPower", + "label": "Own Power", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "incoming", + "label": "Incoming", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "tokensAwarded", + "label": "Awarded", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + } + ] + } + /* + Here we get from the workspace all User Profiles. + */ + let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile') + /* + Transform the result array into table records. + */ + for (let j = 0; j < userProfiles.length; j++) { + let userProfile = userProfiles[j] + + if (userProfile.tokenPowerSwitch === undefined) { continue } + let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, programName) + if (program === undefined) { continue } + if (program.payload === undefined) { continue } + + let tableRecord = { + "name": userProfile.name, + "ownPower": program.payload[programPropertyName].ownPower | 0, + "incoming": program.payload[programPropertyName].incomingPower | 0, + "tokensAwarded": program.payload[programPropertyName].awarded.tokens | 0 + } + + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } + } + /* + Get the sorting order for this table. + */ + let sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + /* + Set the default sorting order for this table. + */ + if (sortingOrder === undefined) { + UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] = { + property: 'tokensAwarded', + order: 'descending' + } + sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + } + return UI.projects.governance.utilities.tables.addHTML( + table, + tableRecords, + tableRecordDefinition, + sortingOrder, + tabIndex + ) + } +} \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Votes.js b/Projects/Governance/UI/Spaces/Reports-Space/Votes.js new file mode 100644 index 000000000..a6e328032 --- /dev/null +++ b/Projects/Governance/UI/Spaces/Reports-Space/Votes.js @@ -0,0 +1,121 @@ +function newGovernanceReportsVotes() { + let thisObject = { + addHTML: addHTML, + initialize: initialize, + finalize: finalize + } + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function addHTML(tabIndex, filters) { + /* + Parameters + */ + let table = 'votes' + let programName = 'Voting Program' + let programPropertyName = 'votingProgram' + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ + let tableRecords = [] + let tableRecordDefinition = { + "properties": [ + { + "name": "name", + "label": "User Profile", + "type": "string", + "order": "ascending", + "textAlign": "left" + }, + { + "name": "ownPower", + "label": "Own Power", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "incoming", + "label": "Incoming", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + }, + { + "name": "tokensBonus", + "label": "Bonus", + "type": "number", + "order": "descending", + "textAlign": "center", + "format": "2 decimals" + } + ] + } + /* + Here we get from the workspace all User Profiles. + */ + let userProfiles = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadsByNodeType('User Profile') + /* + Transform the result array into table records. + */ + for (let j = 0; j < userProfiles.length; j++) { + let userProfile = userProfiles[j] + + if (userProfile.tokenPowerSwitch === undefined) { continue } + let program = UI.projects.governance.utilities.validations.onlyOneProgram(userProfile, programName) + if (program === undefined) { continue } + if (program.payload === undefined) { continue } + + let tableRecord = { + "name": userProfile.name, + "ownPower": program.payload[programPropertyName].ownPower | 0, + "incoming": program.payload[programPropertyName].incomingPower | 0, + "tokensBonus": program.payload[programPropertyName].bonus.tokens | 0 + } + + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } + } + /* + Get the sorting order for this table. + */ + let sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + /* + Set the default sorting order for this table. + */ + if (sortingOrder === undefined) { + UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] = { + property: 'tokensBonus', + order: 'descending' + } + sortingOrder = UI.projects.governance.spaces.reportsSpace.tablesSortingOrders[table] + } + return UI.projects.governance.utilities.tables.addHTML( + table, + tableRecords, + tableRecordDefinition, + sortingOrder, + tabIndex + ) + } +} \ No newline at end of file diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index a99271cf1..2c153a954 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1038,9 +1038,9 @@ "functionName": "newGovernanceFunctionLibraryMentorshipProgram" }, { - "name": "Stacking Program", - "propertyName": "stackingProgram", - "functionName": "newGovernanceFunctionLibraryStackingProgram" + "name": "Staking Program", + "propertyName": "stakingProgram", + "functionName": "newGovernanceFunctionLibraryStakingProgram" }, { "name": "Profile Constructor",