react-web-native-sketch
Version:
[TODO: We need an overview of how this can be used via npm vs as a local package]
218 lines • 8.09 kB
JavaScript
;
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var platform_1 = require("../../primitives/platform/platform");
exports.DEFAULT_ALERT_ID = 'DEFAULT_ALERT_ID';
var TypeKeys;
(function (TypeKeys) {
TypeKeys["TOGGLE_DRAWER"] = "instacar/navigation/TOGGLE_DRAWER";
TypeKeys["POP_PAGE"] = "instacar/navigation/POP";
TypeKeys["WEB_ROUTE_CHANGED"] = "instacar/navigation/WEB_ROUTE_CHANGED";
TypeKeys["SHOW_DIALOG"] = "instacar/navigation/SHOW_DIALOG";
TypeKeys["HIDE_DIALOG"] = "instacar/navigation/HIDE_DIALOG";
TypeKeys["REMOVE_DIALOG"] = "instacar/navigation/REMOVE_DIALOG";
TypeKeys["PUSH_SCREEN"] = "instacar/navigation/PUSH_SCREEN";
TypeKeys["SHOW_ALERT"] = "instacar/navigation/SHOW_ALERT";
TypeKeys["HIDE_ALERT"] = "instacar/navigation/HIDE_ALERT";
})(TypeKeys = exports.TypeKeys || (exports.TypeKeys = {}));
var PushTypes;
(function (PushTypes) {
PushTypes[PushTypes["MODAL"] = 0] = "MODAL";
PushTypes[PushTypes["MODAL_FULL_SCREEN"] = 1] = "MODAL_FULL_SCREEN";
PushTypes[PushTypes["CARD"] = 2] = "CARD";
})(PushTypes = exports.PushTypes || (exports.PushTypes = {}));
exports.initialState = {
// screen: isWeb ? location.pathname.substring(1): '', // doesn't work with server-side rendering bc. location
screen: '',
drawerOpen: false,
props: null,
dialogs: [],
alerts: [],
};
exports.routes = {};
exports.navigation = function (state, action) {
if (state === void 0) { state = exports.initialState; }
switch (action.type) {
case TypeKeys.TOGGLE_DRAWER:
return __assign({}, state, { drawerOpen: (action.drawerOpen !== null && action.drawerOpen !== undefined
? action.drawerOpen
: !state.drawerOpen) });
case TypeKeys.PUSH_SCREEN:
return __assign({}, state, { screen: action.screen, props: action.props, dialogs: clearHiddenDialogs(state.dialogs || []) });
case TypeKeys.SHOW_DIALOG:
return __assign({}, state, { dialogs: clearHiddenDialogs(state.dialogs || []).concat([
{
id: action.id,
visible: true,
fullScreen: action.fullScreen,
props: action.props,
},
]) });
case TypeKeys.HIDE_DIALOG:
return __assign({}, state, { dialogs: hideDialogFromList(state.dialogs, action.id) });
case TypeKeys.REMOVE_DIALOG:
return __assign({}, state, { dialogs: removeDialogFromList(state.dialogs, action.id) });
case TypeKeys.SHOW_ALERT:
return __assign({}, state, { alerts: state.alerts.concat([
{
body: action.body,
bodyData: action.bodyData,
alertId: action.alertId,
visible: true,
leftButtonText: action.leftButtonText,
rightButtonText: action.rightButtonText,
}
]) });
case TypeKeys.HIDE_ALERT:
return __assign({}, state, { alerts: state.alerts
.filter(function (alert) { return alert.visible; })
.map(function (alert) { return (alert.alertId === action.alertId && alert.body === action.body
? __assign({}, alert, { visible: false }) : alert); }) });
default:
return state;
}
};
exports.toggleDrawer = function (navigation, drawerOpen) {
if (!platform_1.isWeb) {
navigation.navigate(drawerOpen ? 'DrawerOpen' : 'DrawerClose');
}
return {
type: TypeKeys.TOGGLE_DRAWER,
drawerOpen: drawerOpen,
};
};
exports.pushScreen = function (navigation, history, routeDefinition, props) {
var screen = routeDefinition.screen, pushType = routeDefinition.pushType, title = routeDefinition.title;
if (platform_1.isWeb) {
switch (pushType) {
case PushTypes.MODAL:
return {
type: TypeKeys.SHOW_DIALOG,
id: screen,
fullScreen: false,
props: props,
};
case PushTypes.MODAL_FULL_SCREEN:
return {
type: TypeKeys.SHOW_DIALOG,
id: screen,
fullScreen: true,
props: props,
};
default:
history.push('/' + screen);
return {
type: TypeKeys.PUSH_SCREEN,
screen: screen,
props: props,
};
}
}
else {
navigation.navigate(title, props);
return {
type: TypeKeys.PUSH_SCREEN,
screen: screen,
props: props,
};
}
};
exports.popScreen = function (navigation, history) {
return function (dispatch, getState) {
var state = getState(), visibleDialogs = state.navigation.dialogs.filter(function (dialog) { return dialog.visible; });
if (platform_1.isWeb) {
if (visibleDialogs.length > 0) {
dispatch({
type: TypeKeys.HIDE_DIALOG,
id: visibleDialogs.slice(-1)[0].id,
});
return;
}
}
else {
navigation.goBack();
}
dispatch({
type: TypeKeys.POP_PAGE,
});
};
};
function hideDialog(id) {
// if dialogIndex is null, clear all dialogs
return {
type: TypeKeys.HIDE_DIALOG,
id: id,
};
}
exports.hideDialog = hideDialog;
function removeDialog(id) {
// if dialogIndex is null, clear all dialogs
return {
type: TypeKeys.REMOVE_DIALOG,
id: id,
};
}
exports.removeDialog = removeDialog;
var hideDialogFromList = function (dialogs, id) {
var found = false, newDialogs = [];
var reversedDialogs = dialogs.slice().reverse();
for (var _i = 0, reversedDialogs_1 = reversedDialogs; _i < reversedDialogs_1.length; _i++) {
var dialog = reversedDialogs_1[_i];
if (!found && dialog.id === id) {
found = true;
newDialogs.push(__assign({}, dialog, { visible: false }));
}
else {
newDialogs.push(dialog);
}
}
return newDialogs.reverse();
};
var removeDialogFromList = function (dialogs, id) {
var found = false, newDialogs = [];
var reversedDialogs = dialogs.slice().reverse();
for (var _i = 0, reversedDialogs_2 = reversedDialogs; _i < reversedDialogs_2.length; _i++) {
var dialog = reversedDialogs_2[_i];
if (!found && dialog.id === id) {
found = true;
}
else {
newDialogs.push(dialog);
}
}
return newDialogs.reverse();
};
var clearHiddenDialogs = function (dialogs) {
return dialogs.filter(function (dialog) { return dialog.visible; }).slice();
};
exports.setRoutes = function (targetRoutes) {
exports.routes = targetRoutes;
};
exports.showAlert = function (body, bodyData, alertId, leftButtonText, rightButtonText) {
if (bodyData === void 0) { bodyData = undefined; }
if (alertId === void 0) { alertId = exports.DEFAULT_ALERT_ID; }
return {
type: TypeKeys.SHOW_ALERT,
body: body,
bodyData: bodyData,
alertId: alertId,
leftButtonText: leftButtonText,
rightButtonText: rightButtonText,
};
};
exports.hideAlert = function (body, alertId) {
if (alertId === void 0) { alertId = exports.DEFAULT_ALERT_ID; }
return {
type: TypeKeys.HIDE_ALERT,
alertId: alertId,
body: body,
};
};
//# sourceMappingURL=navigation.js.map