LocalDatastoreController.react-native.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. "use strict";
  2. var _LocalDatastoreUtils = require("./LocalDatastoreUtils");
  3. /**
  4. * @flow
  5. * @private
  6. */
  7. const RNStorage = require('./StorageController.react-native');
  8. const LocalDatastoreController = {
  9. async fromPinWithName(name /*: string*/) /*: Promise<Array<Object>>*/{
  10. const values = await RNStorage.getItemAsync(name);
  11. if (!values) {
  12. return [];
  13. }
  14. const objects = JSON.parse(values);
  15. return objects;
  16. },
  17. async pinWithName(name /*: string*/, value /*: any*/) /*: Promise<void>*/{
  18. try {
  19. const values = JSON.stringify(value);
  20. await RNStorage.setItemAsync(name, values);
  21. } catch (e) {
  22. // Quota exceeded, possibly due to Safari Private Browsing mode
  23. console.error(e.message);
  24. }
  25. },
  26. unPinWithName(name /*: string*/) /*: Promise<void>*/{
  27. return RNStorage.removeItemAsync(name);
  28. },
  29. async getAllContents() /*: Promise<Object>*/{
  30. const keys = await RNStorage.getAllKeysAsync();
  31. const batch = [];
  32. for (let i = 0; i < keys.length; i += 1) {
  33. const key = keys[i];
  34. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  35. batch.push(key);
  36. }
  37. }
  38. const LDS = {};
  39. let results = [];
  40. try {
  41. results = await RNStorage.multiGet(batch);
  42. } catch (error) {
  43. console.error('Error getAllContents: ', error);
  44. return {};
  45. }
  46. results.forEach(pair => {
  47. const [key, value] = pair;
  48. try {
  49. LDS[key] = JSON.parse(value);
  50. } catch (error) {
  51. LDS[key] = null;
  52. }
  53. });
  54. return LDS;
  55. },
  56. // Used for testing
  57. async getRawStorage() /*: Promise<Object>*/{
  58. const keys = await RNStorage.getAllKeysAsync();
  59. const storage = {};
  60. const results = await RNStorage.multiGet(keys);
  61. results.map(pair => {
  62. const [key, value] = pair;
  63. storage[key] = value;
  64. });
  65. return storage;
  66. },
  67. async clear() /*: Promise<void>*/{
  68. const keys = await RNStorage.getAllKeysAsync();
  69. const batch = [];
  70. for (let i = 0; i < keys.length; i += 1) {
  71. const key = keys[i];
  72. if ((0, _LocalDatastoreUtils.isLocalDatastoreKey)(key)) {
  73. batch.push(key);
  74. }
  75. }
  76. return RNStorage.multiRemove(batch).catch(error => console.error('Error clearing local datastore: ', error));
  77. }
  78. };
  79. module.exports = LocalDatastoreController;