aboutsummaryrefslogtreecommitdiff
path: root/src/common/util/preferences.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/util/preferences.js')
-rw-r--r--src/common/util/preferences.js41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/common/util/preferences.js b/src/common/util/preferences.js
new file mode 100644
index 00000000..229b6f17
--- /dev/null
+++ b/src/common/util/preferences.js
@@ -0,0 +1,41 @@
+import { useSelector } from 'react-redux';
+
+const containsProperty = (object, key) => object.hasOwnProperty(key) && object[key] !== null;
+
+export const usePreference = (key, defaultValue) => useSelector((state) => {
+ if (state.session.server.forceSettings) {
+ if (containsProperty(state.session.server, key)) {
+ return state.session.server[key];
+ }
+ if (containsProperty(state.session.user, key)) {
+ return state.session.user[key];
+ }
+ return defaultValue;
+ }
+ if (containsProperty(state.session.user, key)) {
+ return state.session.user[key];
+ }
+ if (containsProperty(state.session.server, key)) {
+ return state.session.server[key];
+ }
+ return defaultValue;
+});
+
+export const useAttributePreference = (key, defaultValue) => useSelector((state) => {
+ if (state.session.server.forceSettings) {
+ if (containsProperty(state.session.server.attributes, key)) {
+ return state.session.server.attributes[key];
+ }
+ if (containsProperty(state.session.user.attributes, key)) {
+ return state.session.user.attributes[key];
+ }
+ return defaultValue;
+ }
+ if (containsProperty(state.session.user.attributes, key)) {
+ return state.session.user.attributes[key];
+ }
+ if (containsProperty(state.session.server.attributes, key)) {
+ return state.session.server.attributes[key];
+ }
+ return defaultValue;
+});