Skip to content

Commit f49016a

Browse files
authored
Fix depend do not handle connection_id and id in orGroups (#399)
Fix Extra SD play pause commands do not display in settings due to conditions not properly handled
1 parent 16ce347 commit f49016a

File tree

15 files changed

+904
-111
lines changed

15 files changed

+904
-111
lines changed

Memo/preferences.md

Lines changed: 796 additions & 0 deletions
Large diffs are not rendered by default.

src/components/Controls/FieldGroup.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ import {
2323
useUiContextFn,
2424
useSettingsContext,
2525
} from "../../contexts"
26-
import { generateDependIds, connectionDepend, settingsDepend } from "../Helpers"
26+
import { generateDependIds, checkDependencies } from "../Helpers"
2727

2828
const FieldGroup = ({ className, children, label, id, depend }) => {
29-
const { connectionSettings } = useSettingsContext()
30-
const canshow = connectionDepend(depend, connectionSettings.current)
29+
const { interfaceSettings, connectionSettings } = useSettingsContext()
30+
const canshow = checkDependencies(depend,interfaceSettings.current.settings ,connectionSettings.current)
3131
if (!canshow) {
3232
return null
3333
}

src/components/Controls/Fields/Boolean.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ import {
2626
} from "../../../contexts"
2727
import {
2828
generateDependIds,
29-
connectionDepend,
30-
settingsDepend,
29+
checkDependencies,
3130
} from "../../Helpers"
3231

3332
import { T } from "./../../Translations"
@@ -65,12 +64,10 @@ const Boolean = ({
6564
depend,
6665
interfaceSettings.current.settings
6766
)
68-
const canshow = connectionDepend(depend, connectionSettings.current)
67+
6968

7069
useEffect(() => {
71-
let visible =
72-
canshow &&
73-
settingsDepend(depend, interfaceSettings.current.settings)
70+
let visible = checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
7471
if (document.getElementById(id))
7572
document.getElementById(id).style.display = visible
7673
? "block"

src/components/Controls/Fields/Input.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ import {
3838
} from "../../../contexts"
3939
import {
4040
generateDependIds,
41-
connectionDepend,
42-
settingsDepend,
41+
checkDependencies,
4342
} from "../../Helpers"
4443

4544
const Reveal = ({ applyTo }) => {
@@ -105,7 +104,6 @@ const Input = ({
105104
depend,
106105
interfaceSettings.current.settings
107106
)
108-
const canshow = connectionDepend(depend, connectionSettings.current)
109107
const { step } = rest
110108
const inputref = useRef()
111109
const appendtooltip = prec ? "tooltip tooltip-left" : ""
@@ -155,9 +153,7 @@ const Input = ({
155153
}
156154

157155
useEffect(() => {
158-
let visible =
159-
canshow &&
160-
settingsDepend(depend, interfaceSettings.current.settings)
156+
let visible =checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
161157
if (document.getElementById(id))
162158
document.getElementById(id).style.display = visible
163159
? "block"

src/components/Controls/Fields/ItemsList.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ import { iconsTarget } from "../../../targets"
2525
import {
2626
generateUID,
2727
generateDependIds,
28-
connectionDepend,
29-
settingsDepend,
28+
checkDependencies,
3029
} from "../../Helpers"
3130
import { Field } from "../../Controls"
3231
import { formatItem } from "../../../tabs/interface/importHelper"
@@ -315,7 +314,6 @@ const ItemsList = ({
315314
depend,
316315
interfaceSettings.current.settings
317316
)
318-
const canshow = connectionDepend(depend, connectionSettings.current)
319317
console.log(id)
320318
const addItem = (e) => {
321319
useUiContextFn.haptic()
@@ -344,9 +342,7 @@ const ItemsList = ({
344342
}, [value])
345343

346344
useEffect(() => {
347-
let visible =
348-
canshow &&
349-
settingsDepend(depend, interfaceSettings.current.settings)
345+
let visible = checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
350346
if (document.getElementById(id))
351347
document.getElementById(id).style.display = visible
352348
? "block"

src/components/Controls/Fields/Mask.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ import {
2828
} from "../../../contexts"
2929
import {
3030
generateDependIds,
31-
connectionDepend,
32-
settingsDepend,
31+
checkDependencies,
3332
BitsArray,
3433
} from "../../Helpers"
3534

@@ -59,7 +58,6 @@ const Mask = ({
5958
depend,
6059
interfaceSettings.current.settings
6160
)
62-
const canshow = connectionDepend(depend, connectionSettings.current)
6361
function getSize(optionsArray) {
6462
let size = 0
6563
if (optionsArray.length > 0) {
@@ -73,9 +71,7 @@ const Mask = ({
7371
let maskSize = getSize(options)
7472

7573
useEffect(() => {
76-
let visible =
77-
canshow &&
78-
settingsDepend(depend, interfaceSettings.current.settings)
74+
let visible = checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
7975
if (document.getElementById(id))
8076
document.getElementById(id).style.display = visible
8177
? "block"

src/components/Controls/Fields/Select.js

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,18 @@ import { useSettingsContext, useUiContextFn } from "../../../contexts"
2323
import { T } from "../../Translations"
2424
import {
2525
generateDependIds,
26-
connectionDepend,
27-
settingsDepend,
26+
checkDependencies
2827
} from "../../Helpers"
2928

3029
const Option = ({ label, depend, ...props }) => {
3130
const { interfaceSettings, connectionSettings } = useSettingsContext()
3231
if (depend) {
33-
const canshow = connectionDepend(depend, connectionSettings.current)
34-
const canshow2 = settingsDepend(
32+
const canshow = checkDependencies(
3533
depend,
36-
interfaceSettings.current.settings
34+
interfaceSettings.current.settings,
35+
connectionSettings.current
3736
)
38-
if (!canshow || !canshow2) return null
37+
if (!canshow) return null
3938
}
4039
//Condition for camera - no need to display if none setup
4140
if (props.value == "camera") {
@@ -78,7 +77,6 @@ const Select = ({
7877
const optionList = options.map((option) => {
7978
return <Option {...option} />
8079
})
81-
const canshow = connectionDepend(depend, connectionSettings.current)
8280
options.map((option) => {
8381
if (option.depend) {
8482
const deps = generateDependIds(
@@ -89,9 +87,7 @@ const Select = ({
8987
}
9088
})
9189
useEffect(() => {
92-
let visible =
93-
canshow &&
94-
settingsDepend(depend, interfaceSettings.current.settings)
90+
let visible = checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
9591
if (document.getElementById(id))
9692
document.getElementById(id).style.display = visible
9793
? "block"

src/components/Controls/Fields/Slider.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ import {
2626
} from "../../../contexts"
2727
import {
2828
generateDependIds,
29-
connectionDepend,
30-
settingsDepend,
29+
checkDependencies
3130
} from "../../Helpers"
3231
import Input from "./Input"
3332

@@ -62,12 +61,10 @@ const Slider = ({
6261
depend,
6362
interfaceSettings.current.settings
6463
)
65-
const canshow = connectionDepend(depend, connectionSettings.current)
64+
6665

6766
useEffect(() => {
68-
let visible =
69-
canshow &&
70-
settingsDepend(depend, interfaceSettings.current.settings)
67+
let visible = checkDependencies(depend, interfaceSettings.current.settings, connectionSettings.current)
7168
if (document.getElementById(id))
7269
document.getElementById(id).style.display = visible
7370
? "block"

src/components/Helpers/components.js

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -107,40 +107,24 @@ const generateDependIds = (depend, settings) => {
107107
}
108108

109109
//this won't change as it is initalised with [ESP800] which is call at start
110-
const connectionDepend = (depend, settings) => {
110+
const connectionDepend = (depend, connectionsettings) => {
111111
if (Array.isArray(depend)) {
112-
return depend.reduce((acc, d) => {
113-
if (d.connection_id && settings[d.connection_id]) {
114-
const quote = d.value && d.value.trim().endsWith("'") ? "'" : ""
115-
if (d.value)
116-
return (
117-
acc &&
118-
eval(
119-
quote + settings[d.connection_id] + quote + d.value
120-
)
121-
)
122-
else if (d.contains) {
123-
return (
124-
acc &&
125-
eval(
126-
"'" +
127-
settings[d.connection_id] +
128-
"'" +
129-
".indexOf('" +
130-
d.contains +
131-
"')!=-1"
132-
)
133-
)
112+
return depend.every(d => {
113+
if (d.connection_id && connectionsettings[d.connection_id]) {
114+
const quote = d.value && d.value.trim().endsWith("'") ? "'" : "";
115+
if (d.value) {
116+
return eval(quote + connectionsettings[d.connection_id] + quote + d.value);
117+
} else if (d.contains) {
118+
return eval("'" + connectionsettings[d.connection_id] + "'" + ".indexOf('" + d.contains + "')!=-1");
134119
}
135120
}
136-
return acc
137-
}, true)
121+
return true;
122+
});
138123
}
139-
return true
124+
return true;
140125
}
141-
142126
//this is dynamic as it is depending on the preferences settings
143-
const settingsDepend = (depend, settings) => {
127+
const settingDepend = (depend, settings, connectionsettings) => {
144128
if (Array.isArray(depend)) {
145129
return depend.every(d => {
146130
if (d.id) {
@@ -153,7 +137,27 @@ const settingsDepend = (depend, settings) => {
153137
}
154138
if (d.orGroups) {
155139
return d.orGroups.some(group =>
156-
settingsDepend(group, settings)
140+
checkDependencies(group, settings, connectionsettings)
141+
);
142+
}
143+
return true;
144+
});
145+
}
146+
return true;
147+
}
148+
149+
const checkDependencies = (depend, settings, connectionsettings) => {
150+
if (Array.isArray(depend)) {
151+
return depend.every(d => {
152+
if (d.id) {
153+
return settingDepend([d], settings, connectionsettings);
154+
}
155+
if (d.connection_id) {
156+
return connectionDepend([d], connectionsettings);
157+
}
158+
if (d.orGroups) {
159+
return d.orGroups.some(group =>
160+
checkDependencies(group, settings, connectionsettings)
157161
);
158162
}
159163
return true;
@@ -170,5 +174,5 @@ export {
170174
getColClasses,
171175
generateDependIds,
172176
connectionDepend,
173-
settingsDepend,
177+
checkDependencies
174178
}

src/components/Helpers/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
getColClasses,
2828
generateDependIds,
2929
connectionDepend,
30-
settingsDepend,
30+
checkDependencies,
3131
} from "./components"
3232
import {
3333
beautifyJSONString,
@@ -73,7 +73,7 @@ export {
7373
getColClasses,
7474
generateDependIds,
7575
connectionDepend,
76-
settingsDepend,
76+
checkDependencies,
7777
getCookie,
7878
hslToHex,
7979
isLimitedEnvironment,

0 commit comments

Comments
 (0)