From 2657bb0059e035339d23c1d58c7efea8dec6e35a Mon Sep 17 00:00:00 2001 From: Xriginal Date: Thu, 28 Apr 2022 11:37:35 -0700 Subject: [PATCH 1/3] updating --- .../app/containers/MeterDropdownContainer.ts | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/client/app/containers/MeterDropdownContainer.ts b/src/client/app/containers/MeterDropdownContainer.ts index 7e169a205..4fe7191d4 100644 --- a/src/client/app/containers/MeterDropdownContainer.ts +++ b/src/client/app/containers/MeterDropdownContainer.ts @@ -8,6 +8,9 @@ import { updateSelectedMeter } from '../actions/admin'; import MeterDropdownComponent from '../components/MeterDropDownComponent'; import { State } from '../types/redux/state'; import { Dispatch } from '../types/redux/actions'; +import { unitsCompatibleWithMeters } from '../utils/determineCompatibleUnits'; +import { SelectOption } from '../types/items'; +import Meter from '/home/ubermensch/OED/src/server/models/Meter'; /** * @param {State} state @@ -23,4 +26,69 @@ function mapDispatchToProps(dispatch: Dispatch) { }; } +export function getvisibleMeters(state: State) { + const visibleMeters = new Set(); + + if (state.currentUser.profile?.role == 'admin') { + // Can see all meters that don't have null for unit + visibleMeters.forEach(meter => { meter.id = Meter.getUnitNotNull }) + } + else { + // regular user or not logged in so only displayable ones + visibleMeters.forEach(meter => { meter.id = Meter.getDisplayable }) + } + // meters that can graph + const compatibleMeters = new Set(); + // meters that cannot graph. + const incompatibleMeters = new Set(); + // {M} means turn M into a set. + const M = new Set(); + + if (state.graph.selectedUnit == -99) { + // If there is no graphic unit then no meters/groups are displayed and you can display all meters. + // Also, if not admin, then meters not displayable are not viewable. + // admin can see all except if unit is null (not included in ones gotten above). + visibleMeters.forEach(meter => { + compatibleMeters.add(meter.displayable); + }) + } + // If displayable is false then only admin. + else { + state.graph.selectedMeters.forEach(meter => {//for each visibleMeters M + M.add(meter) + const newUnits = unitsCompatibleWithMeters(M) + if (newUnits.has(state.meters.byMeterID[meter].defaultGraphicUnit))//graphicUnit is in units + { + // The compatible units of the meter have graphic unit so can graph (case 1) + compatibleMeters.add(meter); + } + else { + // Case 2 + incompatibleMeters.add(meter); + } + }) + } + //Ready to display meters in menu. Note you display the identifier and not the id. + //For each compatibleUnit C add name C.identifier to meter menu in alphabetically sorted order in regular font for case 1 + //ForAdd each incompatibleUnit I add name I.identifier to meter menu in alphabetically sorted order as grayed out and not selectable for case 2 + const finalMeter: SelectOption[] = []; + visibleMeters.forEach(meter => { + if (compatibleMeters.has(meter.unitId)) { + finalMeter.push({ + label: state.meters.byMeterID[meter.identifier].name, + value: meter.name, + isDisabled: false + } as SelectOption) + } else if (incompatibleMeters.has(meter.unitId)) { + finalMeter.push({ + label: state.groups.byGroupID[meter.identifier].name, + value: meter.name, + isDisabled: true + } as SelectOption) + } + }) + + return _.sortBy(_.values(finalMeter), 'label'); +} + export default connect(mapStateToProps, mapDispatchToProps)(MeterDropdownComponent); From 57a4cbb72a9f2e475b93642e82b7f41f10896311 Mon Sep 17 00:00:00 2001 From: Xriginal Date: Fri, 29 Apr 2022 10:16:21 -0700 Subject: [PATCH 2/3] Updating --- src/client/app/containers/MeterDropdownContainer.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/app/containers/MeterDropdownContainer.ts b/src/client/app/containers/MeterDropdownContainer.ts index 4fe7191d4..35e2d22cd 100644 --- a/src/client/app/containers/MeterDropdownContainer.ts +++ b/src/client/app/containers/MeterDropdownContainer.ts @@ -10,7 +10,8 @@ import { State } from '../types/redux/state'; import { Dispatch } from '../types/redux/actions'; import { unitsCompatibleWithMeters } from '../utils/determineCompatibleUnits'; import { SelectOption } from '../types/items'; -import Meter from '/home/ubermensch/OED/src/server/models/Meter'; +import Meter from '../../../../src/server/models/Meter'; + /** * @param {State} state From ce4391bbb09c109fa7af998833f808bdfbe7c3fe Mon Sep 17 00:00:00 2001 From: Xriginal Date: Wed, 4 May 2022 12:50:26 -0700 Subject: [PATCH 3/3] updating --- .vscode/settings.json | 3 +++ src/client/app/containers/MeterDropdownContainer.ts | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..6a99eb2da --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "files.trimTrailingWhitespace": true +} \ No newline at end of file diff --git a/src/client/app/containers/MeterDropdownContainer.ts b/src/client/app/containers/MeterDropdownContainer.ts index 35e2d22cd..0f1f5e8fe 100644 --- a/src/client/app/containers/MeterDropdownContainer.ts +++ b/src/client/app/containers/MeterDropdownContainer.ts @@ -48,14 +48,14 @@ export function getvisibleMeters(state: State) { if (state.graph.selectedUnit == -99) { // If there is no graphic unit then no meters/groups are displayed and you can display all meters. // Also, if not admin, then meters not displayable are not viewable. - // admin can see all except if unit is null (not included in ones gotten above). + // admin can see all except if unit is null (not included in ones gotten above). visibleMeters.forEach(meter => { compatibleMeters.add(meter.displayable); }) } // If displayable is false then only admin. else { - state.graph.selectedMeters.forEach(meter => {//for each visibleMeters M + state.graph.selectedMeters.forEach(meter => {//for each visibleMeters M M.add(meter) const newUnits = unitsCompatibleWithMeters(M) if (newUnits.has(state.meters.byMeterID[meter].defaultGraphicUnit))//graphicUnit is in units