stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
68 lines • 2.66 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useInitializeOfflineDb = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _useStableCallback = require("../../../hooks/useStableCallback");
var _OfflineDB = require("../../../store/OfflineDB");
var _SqliteClient = require("../../../store/SqliteClient");
var useInitializeOfflineDb = ({
client,
enabled,
options,
userID
}) => {
var _useState = (0, _react.useState)(),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
initializationError = _useState2[0],
setInitializationError = _useState2[1];
var _ref = options != null ? options : {},
getEncryptionKey = _ref.getEncryptionKey,
maxSyncEventsLimit = _ref.maxSyncEventsLimit;
var resolveEncryptionKey = (0, _useStableCallback.useStableCallback)(() => {
var _getEncryptionKey;
return (_getEncryptionKey = getEncryptionKey == null ? void 0 : getEncryptionKey()) != null ? _getEncryptionKey : Promise.resolve(undefined);
});
var isEncryptionEnabled = !!getEncryptionKey;
var initialize = (0, _react.useCallback)((0, _asyncToGenerator2.default)(function* () {
if (!(userID && enabled)) {
return;
}
if (!client.offlineDb) {
var keyGetter = isEncryptionEnabled ? resolveEncryptionKey : undefined;
if (keyGetter) {
_SqliteClient.SqliteClient.getEncryptionKey = keyGetter;
try {
yield _SqliteClient.SqliteClient.preflightEncryption();
} catch (error) {
if (error instanceof _SqliteClient.SqliteClientError) {
setInitializationError(error);
return;
}
throw error;
}
}
client.setOfflineDBApi(new _OfflineDB.OfflineDB({
client,
getEncryptionKey: keyGetter,
maxSyncEventsLimit
}));
}
var offlineDb = client.offlineDb;
if (offlineDb) {
yield offlineDb.init(userID);
setInitializationError(offlineDb instanceof _OfflineDB.OfflineDB ? offlineDb.initializationError : undefined);
}
}), [client, enabled, isEncryptionEnabled, maxSyncEventsLimit, resolveEncryptionKey, userID]);
(0, _react.useEffect)(() => {
initialize();
}, [initialize]);
if (initializationError) {
throw initializationError;
}
};
exports.useInitializeOfflineDb = useInitializeOfflineDb;
//# sourceMappingURL=useInitializeOfflineDb.js.map