UNPKG

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
"use strict"; 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