@coko/client
Version:
Client side common code for coko apps
62 lines (61 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _client = require("@apollo/client");
var _currentUserContext = require("../helpers/currentUserContext");
var _currentUserQuery = require("../helpers/currentUserQuery");
var _Spin = _interopRequireDefault(require("../ui/common/Spin"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var AuthWrapper = function AuthWrapper(props) {
var LoadingComponent = props.loadingComponent,
currentUserQuery = props.currentUserQuery,
children = props.children;
var _useCurrentUser = (0, _currentUserContext.useCurrentUser)(),
currentUser = _useCurrentUser.currentUser,
setCurrentUser = _useCurrentUser.setCurrentUser;
var _useQuery = (0, _client.useQuery)(currentUserQuery, {
skip: currentUser,
onCompleted: function onCompleted(_ref) {
var fetchedUser = _ref.currentUser;
setCurrentUser(fetchedUser);
},
onError: function onError(error) {
// Make sure 'currentUser' is defined and null so that RequireAuth knows
// to clear the current (corrupted) token.
// Note on session states:
// * undefined: current user remains unresolved
// * null: current user is resolved but unauthorised or token invalid
setCurrentUser(null);
console.error(error);
}
}),
loading = _useQuery.loading;
(0, _client.useSubscription)(_currentUserQuery.USER_UPDATED_SUBSCRIPTION, {
skip: !currentUser,
variables: {
userId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.id
},
onData: function onData(_ref2) {
var data = _ref2.data;
var userUpdated = data.data.userUpdated;
setCurrentUser(userUpdated);
}
});
return /*#__PURE__*/_react["default"].createElement(LoadingComponent, {
spinning: loading && !currentUser
}, children);
};
AuthWrapper.propTypes = {
loadingComponent: _propTypes["default"].func,
currentUserQuery: _propTypes["default"].shape()
};
AuthWrapper.defaultProps = {
loadingComponent: _Spin["default"],
currentUserQuery: _currentUserQuery.CURRENT_USER
};
var _default = AuthWrapper;
exports["default"] = _default;