UNPKG

@stackend/api

Version:

JS bindings to api.stackend.com

138 lines 5.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.events = exports.newEventState = exports.newRsvpUserLists = exports.CLEAR_EVENT = exports.RESET_EVENTS = exports.EVENTS_RECEIVED = exports.EVENT_RSVP_RECEIVED = exports.EVENT_RSVP_UPDATED = void 0; var createReducer_1 = __importDefault(require("../api/createReducer")); var index_1 = require("./index"); exports.EVENT_RSVP_UPDATED = 'EVENT_RSVP_UPDATED'; exports.EVENT_RSVP_RECEIVED = 'EVENT_RSVP_RECEIVED'; exports.EVENTS_RECEIVED = 'EVENTS_RECEIVED'; exports.RESET_EVENTS = 'RESET_EVENTS'; exports.CLEAR_EVENT = 'CLEAR_EVENT'; function newRsvpUserLists() { return { interested: null, accepted: null, declined: null }; } exports.newRsvpUserLists = newRsvpUserLists; function newEventState(event, currentUserRsvp, rsvpUserLists) { if (currentUserRsvp === void 0) { currentUserRsvp = index_1.RSVPStatus.UNKNOWN; } return { event: event || null, currentUserRsvp: currentUserRsvp || index_1.RSVPStatus.UNKNOWN, rsvpUserLists: rsvpUserLists || newRsvpUserLists() }; } exports.newEventState = newEventState; exports.events = (0, createReducer_1.default)({}, { EVENTS_RECEIVED: function (state, action) { var s = state[action.context]; if (!s) { state[action.context] = s = {}; } var events = action.events; events.forEach(function (event) { s[event.id] = newEventState(event); }); return Object.assign({}, state); }, RESET_EVENTS: function (state, action) { if (action.context) { delete state[action.context]; return Object.assign({}, state); } return {}; }, CLEAR_EVENT: function (state, action) { var s = state[action.context]; if (!s) { return state; } if (s[action.eventId]) { delete s[action.eventId]; return Object.assign({}, state); } return state; }, EVENT_RSVP_UPDATED: function (state, action) { var _a; if (!action.result.success || action.result.error) { return state; } var cs = getOrCreateEventContextState(state, action.context); var es = getOrCreateEventState(cs, action.result.eventId); var counts = action.result.counts; es.currentUserRsvp = counts.status; if (es.event) { es.event = Object.assign({}, es.event, { rsvp: { nInterested: counts.rsvp.nInterested, nAccepted: counts.rsvp.nAccepted, nDeclined: counts.rsvp.nDeclined } }); } cs[action.result.eventId] = Object.assign({}, es); // FIXME: use counts.rsvp.interested etc (backend broken. Update is delayed?) return Object.assign({}, state, (_a = {}, _a[action.context] = Object.assign({}, cs), _a)); }, EVENT_RSVP_RECEIVED: function (state, action) { var _a; var rsvpUserIds = action.rsvpUserIds, currentUserRsvpStatuses = action.currentUserRsvpStatuses; if (!rsvpUserIds && !currentUserRsvpStatuses) { return state; } var cs = getOrCreateEventContextState(state, action.context); if (rsvpUserIds) { Object.keys(rsvpUserIds).forEach(function (eventId) { var es = getOrCreateEventState(cs, eventId); var x = rsvpUserIds[eventId]; var event = es.event; if (event) { es.event = Object.assign({}, event, { rsvp: { nInterested: x.interested.totalSize, nAccepted: x.accepted.totalSize, nDeclined: x.declined.totalSize } }); } es.rsvpUserLists.interested = x.interested; es.rsvpUserLists.accepted = x.accepted; es.rsvpUserLists.declined = x.declined; cs[eventId] = Object.assign({}, es); }); } if (currentUserRsvpStatuses) { Object.keys(currentUserRsvpStatuses).forEach(function (eventId) { var es = getOrCreateEventState(cs, eventId); es.currentUserRsvp = currentUserRsvpStatuses[eventId]; }); } return Object.assign({}, state, (_a = {}, _a[action.context] = Object.assign({}, cs), _a)); } }); exports.default = exports.events; function getOrCreateEventContextState(state, context) { var s = state[context]; if (!s) { state[context] = s = {}; } return s; } function getOrCreateEventState(ecs, eventId) { var e = ecs[eventId]; if (!e) { ecs[eventId] = e = newEventState(); } return e; } //# sourceMappingURL=eventReducer.js.map