about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift
diff options
context:
space:
mode:
Diffstat (limited to 'modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift')
-rw-r--r--modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift62
1 files changed, 62 insertions, 0 deletions
diff --git a/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift
new file mode 100644
index 000000000..8549e5b48
--- /dev/null
+++ b/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift
@@ -0,0 +1,62 @@
+import Foundation
+import ExpoModulesCore
+
+public class ExpoBlueskySharedPrefsModule: Module {
+  let defaults = UserDefaults(suiteName: "group.app.bsky")
+
+  func getDefaults(_ info: String = "(no info)") -> UserDefaults? {
+    guard let defaults = self.defaults else {
+      NSLog("Failed to get defaults for app group: \(info)")
+      return nil
+    }
+    return defaults
+  }
+
+  public func definition() -> ModuleDefinition {
+    Name("ExpoBlueskySharedPrefs")
+
+    // JavaScripValue causes a crash when trying to check `isString()`. Let's
+    // explicitly define setString instead.
+    Function("setString") { (key: String, value: String?) in
+      SharedPrefs.shared.setValue(key, value)
+    }
+
+    Function("setValue") { (key: String, value: JavaScriptValue) in
+      if value.isNumber() {
+        SharedPrefs.shared.setValue(key, value.getDouble())
+      } else if value.isBool() {
+        SharedPrefs.shared.setValue(key, value.getBool())
+      } else if value.isNull() || value.isUndefined() {
+        SharedPrefs.shared.removeValue(key)
+      }
+    }
+
+    Function("removeValue") { (key: String) in
+      SharedPrefs.shared.removeValue(key)
+    }
+
+    Function("getString") { (key: String) in
+      return SharedPrefs.shared.getString(key)
+    }
+
+    Function("getBool") { (key: String) in
+      return SharedPrefs.shared.getBool(key)
+    }
+
+    Function("getNumber") { (key: String) in
+      return SharedPrefs.shared.getNumber(key)
+    }
+
+    Function("addToSet") { (key: String, value: String) in
+      SharedPrefs.shared.addToSet(key, value)
+    }
+
+    Function("removeFromSet") { (key: String, value: String) in
+      SharedPrefs.shared.removeFromSet(key, value)
+    }
+
+    Function("setContains") { (key: String, value: String) in
+      return SharedPrefs.shared.setContains(key, value)
+    }
+  }
+}