about summary refs log tree commit diff
path: root/modules/expo-bluesky-swiss-army/ios/SharedPrefs/ExpoBlueskySharedPrefsModule.swift
blob: 8549e5b48b924f09999cdb285ec2f9f4b2c74492 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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)
    }
  }
}