diff --git a/Client/WebServer/css/governance.css b/Client/WebServer/css/governance.css index 24af73dad..5d6898106 100644 --- a/Client/WebServer/css/governance.css +++ b/Client/WebServer/css/governance.css @@ -793,7 +793,7 @@ vertical-align: middle; } - .governance-search-input { + .governance-filter-input { width: 95%; height: 45px; margin: 0 20px; diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Assets.js b/Projects/Governance/UI/Spaces/Reports-Space/Assets.js index 7e2ab44d1..8898162c6 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Assets.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Assets.js @@ -15,12 +15,13 @@ function newGovernanceReportsAssets() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.commonTables.addHTML( 'assets', 'Asset', 'Assets', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Features.js b/Projects/Governance/UI/Spaces/Reports-Space/Features.js index 080b2e12c..c79e5a6d4 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Features.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Features.js @@ -15,12 +15,13 @@ function newGovernanceReportsFeatures() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.commonTables.addHTML( 'features', 'Feature', 'Features', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/FiltersHeader.js b/Projects/Governance/UI/Spaces/Reports-Space/FiltersHeader.js new file mode 100644 index 000000000..965e2ed32 --- /dev/null +++ b/Projects/Governance/UI/Spaces/Reports-Space/FiltersHeader.js @@ -0,0 +1,71 @@ +function newGovernanceReportsFiltersHeader() { + let thisObject = { + addFilterHeader: addFilterHeader, + detectEnterOnFiltersBox: detectEnterOnFiltersBox, + setFocusOnFiltersBox: setFocusOnFiltersBox, + render: render, + initialize: initialize, + finalize: finalize + } + + let lastFilters = '' + + return thisObject + + function initialize() { + + } + + function finalize() { + + } + + function render() { + let HTML = '' + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '
' + let docsContentDiv = document.getElementById('governance-content-div') + docsContentDiv.innerHTML = HTML + UI.projects.education.spaces.docsSpace.footer.addFooter() + + UI.projects.governance.spaces.reportsSpace.filtersHeader.detectEnterOnFiltersBox() + UI.projects.governance.spaces.reportsSpace.filtersHeader.setFocusOnFiltersBox() + } + + function addFilterHeader() { + let HTML = '' + // Logo & Search Box + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '
' + HTML = HTML + '' + HTML = HTML + '
' + HTML = HTML + '
' + + return HTML + } + + function detectEnterOnFiltersBox() { + const element = document.getElementsByClassName("governance-filter-input")[0] + if (UI.projects.education.spaces.docsSpace.commandInterface.command !== undefined) { + element.value = UI.projects.education.spaces.docsSpace.commandInterface.command + } + element.addEventListener("keyup", function (event) { + if (event.key === "Enter" || event.keyCode === 13) { + lastFilters = element.value.trim() + UI.projects.governance.spaces.reportsSpace.reportsPage.render(undefined, lastFilters) + /* + UI.projects.education.spaces.docsSpace.commandInterface.command = element.value.trim() + UI.projects.education.spaces.docsSpace.commandInterface.detectCommands() + */ + } + }); + } + + function setFocusOnFiltersBox() { + const element = document.getElementsByClassName("governance-filter-input")[0] + element.value = lastFilters + element.focus() + } +} \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Mentors.js b/Projects/Governance/UI/Spaces/Reports-Space/Mentors.js index 597fac80c..3574d46db 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Mentors.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Mentors.js @@ -15,12 +15,13 @@ function newGovernanceReportsMentors() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.decendentTables.addHTML( 'mentors', 'Mentorship Program', 'mentorshipProgram', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Pools.js b/Projects/Governance/UI/Spaces/Reports-Space/Pools.js index 3a5e09306..1d1fc7683 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Pools.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Pools.js @@ -15,12 +15,13 @@ function newGovernanceReportsPools() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.commonTables.addHTML( 'pools', 'Pool', 'Pools', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Positions.js b/Projects/Governance/UI/Spaces/Reports-Space/Positions.js index bf9f50262..d85df0e4f 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Positions.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Positions.js @@ -15,12 +15,13 @@ function newGovernanceReportsPositions() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.commonTables.addHTML( 'positions', 'Position', 'Positions', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Referrals.js b/Projects/Governance/UI/Spaces/Reports-Space/Referrals.js index f54e6ff2a..324f1282c 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Referrals.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Referrals.js @@ -15,12 +15,13 @@ function newGovernanceReportsReferrals() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.decendentTables.addHTML( 'referrals', 'Referral Program', 'referralProgram', - tabIndex + tabIndex, + filters ) } } \ 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 79d0fffb8..d4b2d608c 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/ReportsPage.js @@ -5,6 +5,7 @@ function newGovernanceReportsReportsPage() { finalize: finalize } + let lastTabIndex return thisObject function initialize() { @@ -15,8 +16,15 @@ function newGovernanceReportsReportsPage() { } - function render(tabIndex) { - + function render(tabIndex, filters) { + + /* Setup tabIndex */ + if (tabIndex === undefined) { + tabIndex = lastTabIndex + } else { + lastTabIndex = tabIndex + } + let resultsArary = [] let initialTime = new Date() buildHTML() @@ -25,7 +33,7 @@ function newGovernanceReportsReportsPage() { const tabs = ['Profiles', 'Referrals', 'Supporters', 'Mentors', 'Pools', 'Assets', 'Features', 'Positions'] let HTML = '' HTML = HTML + '
' - HTML = HTML + UI.projects.education.spaces.docsSpace.mainSearchPage.addSearchHeader() + HTML = HTML + UI.projects.governance.spaces.reportsSpace.filtersHeader.addFilterHeader() // Tabs HTML = HTML + '
' @@ -49,49 +57,49 @@ function newGovernanceReportsReportsPage() { switch (tab) { case 'Profiles': { - let response = UI.projects.governance.spaces.reportsSpace.userProfiles.addHTML(1) + let response = UI.projects.governance.spaces.reportsSpace.userProfiles.addHTML(1, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Referrals': { - let response = UI.projects.governance.spaces.reportsSpace.referrals.addHTML(2) + let response = UI.projects.governance.spaces.reportsSpace.referrals.addHTML(2, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Supporters': { - let response = UI.projects.governance.spaces.reportsSpace.supports.addHTML(3) + let response = UI.projects.governance.spaces.reportsSpace.supports.addHTML(3, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Mentors': { - let response = UI.projects.governance.spaces.reportsSpace.mentors.addHTML(4) + let response = UI.projects.governance.spaces.reportsSpace.mentors.addHTML(4, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Pools': { - let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(5) + let response = UI.projects.governance.spaces.reportsSpace.pools.addHTML(5, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Assets': { - let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(6) + let response = UI.projects.governance.spaces.reportsSpace.assets.addHTML(6, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Features': { - let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(7) + let response = UI.projects.governance.spaces.reportsSpace.features.addHTML(7, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break } case 'Positions': { - let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(8) + let response = UI.projects.governance.spaces.reportsSpace.positions.addHTML(8, filters) HTML = HTML + response.HTML resultCounter = response.resultCounter break @@ -123,8 +131,8 @@ function newGovernanceReportsReportsPage() { docsContentDiv.innerHTML = HTML + UI.projects.governance.spaces.reportsSpace.footer.addFooter() - UI.projects.education.spaces.docsSpace.mainSearchPage.detectEnterOnSearchBox() - UI.projects.education.spaces.docsSpace.mainSearchPage.setFocusOnSearchBox() + UI.projects.governance.spaces.reportsSpace.filtersHeader.detectEnterOnFiltersBox() + UI.projects.governance.spaces.reportsSpace.filtersHeader.setFocusOnFiltersBox() // If there is a tabIndex we will switch to that tab here. if (tabIndex !== undefined) { diff --git a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js index 3df51384d..a396948ca 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/ReportsSpace.js @@ -6,6 +6,7 @@ function newGobernanceReportsSpace() { sidePanelTab: undefined, reportsPage: undefined, footer: undefined, + filtersHeader: undefined, userProfiles: undefined, referrals: undefined, supports: undefined, @@ -52,6 +53,9 @@ function newGobernanceReportsSpace() { thisObject.footer.finalize() thisObject.footer = undefined + thisObject.filtersHeader.finalize() + thisObject.filtersHeader = undefined + thisObject.userProfiles.finalize() thisObject.userProfiles = undefined @@ -95,6 +99,7 @@ function newGobernanceReportsSpace() { thisObject.reportsPage = newGovernanceReportsReportsPage() thisObject.footer = newGovernanceReportsFooter() + thisObject.filtersHeader = newGovernanceReportsFiltersHeader() thisObject.userProfiles = newGovernanceReportsUserProfiles() thisObject.referrals = newGovernanceReportsReferrals() thisObject.supports = newGovernanceReportsSupports() @@ -106,6 +111,7 @@ function newGobernanceReportsSpace() { thisObject.reportsPage.initialize() thisObject.footer.initialize() + thisObject.filtersHeader.initialize() thisObject.userProfiles.initialize() thisObject.referrals.initialize() thisObject.mentors.initialize() diff --git a/Projects/Governance/UI/Spaces/Reports-Space/Supports.js b/Projects/Governance/UI/Spaces/Reports-Space/Supports.js index 423450322..338460c99 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/Supports.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/Supports.js @@ -15,12 +15,13 @@ function newGovernanceReportsSupports() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { return UI.projects.governance.utilities.decendentTables.addHTML( 'supports', 'Support Program', 'supportProgram', - tabIndex + tabIndex, + filters ) } } \ No newline at end of file diff --git a/Projects/Governance/UI/Spaces/Reports-Space/UserProfiles.js b/Projects/Governance/UI/Spaces/Reports-Space/UserProfiles.js index ef98dafab..eaaa33a19 100644 --- a/Projects/Governance/UI/Spaces/Reports-Space/UserProfiles.js +++ b/Projects/Governance/UI/Spaces/Reports-Space/UserProfiles.js @@ -15,8 +15,20 @@ function newGovernanceReportsUserProfiles() { } - function addHTML(tabIndex) { + function addHTML(tabIndex, filters) { + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ let tableRecords = [] let table = 'userProfiles' let tableRecordDefinition = { @@ -71,7 +83,9 @@ function newGovernanceReportsUserProfiles() { "tokenPower": userProfile.payload.tokenPower | 0 } - tableRecords.push(tableRecord) + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } } /* Get the sorting order for this table. diff --git a/Projects/Governance/UI/Utilities/CommonTables.js b/Projects/Governance/UI/Utilities/CommonTables.js index 964372103..652d795ef 100644 --- a/Projects/Governance/UI/Utilities/CommonTables.js +++ b/Projects/Governance/UI/Utilities/CommonTables.js @@ -9,8 +9,18 @@ function newGovernanceUtilitiesCommonTables() { table, nodeType, hierarchyHeadsType, - tabIndex + tabIndex, + filters ) { + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } let tableRecords = [] let tableRecordDefinition = { "properties": [ @@ -60,11 +70,13 @@ function newGovernanceUtilitiesCommonTables() { let tableRecord = { "name": node.name, "tokensReward": node.payload.tokens | 0, - "weight": node.payload.weight , - "weightPower": node.payload.votingProgram.votes + "weight": node.payload.weight, + "weightPower": node.payload.votingProgram.votes } - tableRecords.push(tableRecord) + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } } /* Get the sorting order for this table. diff --git a/Projects/Governance/UI/Utilities/DescendentTables.js b/Projects/Governance/UI/Utilities/DescendentTables.js index 48aeb0efe..e98379a84 100644 --- a/Projects/Governance/UI/Utilities/DescendentTables.js +++ b/Projects/Governance/UI/Utilities/DescendentTables.js @@ -9,8 +9,21 @@ function newGovernanceUtilitiesDecendentTables() { table, programName, programPropertyName, - tabIndex + tabIndex, + filters ) { + /* + Setup Filters + */ + let filtersObject + if (filters !== undefined) { + try { + filtersObject = JSON.parse(filters) + } catch (err) { } + } + /* + Other Variables + */ let tableRecords = [] let tableRecordDefinition = { "properties": [ @@ -87,7 +100,9 @@ function newGovernanceUtilitiesDecendentTables() { "tokensBonus": program.payload[programPropertyName].bonus.tokens | 0 } - tableRecords.push(tableRecord) + if (UI.projects.governance.utilities.filters.applyFilters(filters, filtersObject, tableRecord) === true) { + tableRecords.push(tableRecord) + } } /* Get the sorting order for this table. diff --git a/Projects/Governance/UI/Utilities/Filters.js b/Projects/Governance/UI/Utilities/Filters.js new file mode 100644 index 000000000..5a9d930e3 --- /dev/null +++ b/Projects/Governance/UI/Utilities/Filters.js @@ -0,0 +1,37 @@ +function newGovernanceUtilitiesFilters() { + let thisObject = { + applyFilters: applyFilters + } + + return thisObject + + function applyFilters(filters, filtersObject, tableRecord) { + /* Apply Filters */ + let passedFilters = true + if (filtersObject !== undefined) { + for (var property in tableRecord) { + if (Object.prototype.hasOwnProperty.call(tableRecord, property)) { + let fiter = filtersObject[property] + if (fiter === undefined) { continue } + let value = tableRecord[property] + let condition = eval(fiter) + if (condition === false) { + passedFilters = false + } + } + } + } else { + /* + We will assume the filter is a string and that needs to be applied to the property name. + */ + if ( + filters !== undefined && + filters !== "" && + tableRecord.name.indexOf(filters) < 0 + ) { + passedFilters = false + } + } + return passedFilters + } +} \ No newline at end of file diff --git a/Projects/ProjectsSchema.json b/Projects/ProjectsSchema.json index 4ae62a5fc..a99271cf1 100644 --- a/Projects/ProjectsSchema.json +++ b/Projects/ProjectsSchema.json @@ -1083,6 +1083,11 @@ "name": "Common Tables", "propertyName": "commonTables", "functionName": "newGovernanceUtilitiesCommonTables" + }, + { + "name": "Filters", + "propertyName": "filters", + "functionName": "newGovernanceUtilitiesFilters" } ], "spaces": [