@stackend/api
Version:
JS bindings to api.stackend.com
138 lines • 5.14 kB
JavaScript
;
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