'use strict'; // This file just a dummy example of a HTTP API to talk to the backend. // The state of the "database" that would normally live on the server // is simply held here in memory. const backendStateForLoggedInPerson = { chats: [ { name: 'Claire', messages: [ { name: 'Claire', text: 'I ❤️ React Native!', }, ], }, { name: 'John', messages: [ { name: 'John', text: 'I ❤️ React Native!', }, ], } ], }; /** * Randomly simulate network failures. * It is useful to enable this during development to make sure our app works * in real-world conditions. */ function isNetworkFailure() { const chanceOfFailure = 0; // 0..1 return Math.random() < chanceOfFailure; } /** * Helper for the other functions in this file. * Simulates a short delay and then returns a provided value or failure. * This is just a dummy example. Normally we'd make a HTTP request, * see http://facebook.github.io/react-native/docs/network.html */ function _makeSimulatedNetworkRequest(getValue) { const durationMs = 400; return new Promise(function (resolve, reject) { setTimeout(function () { if (isNetworkFailure()) { reject(new Error('Network failure')); } else { getValue(resolve, reject); } }, durationMs); }); } /** * Fetch a list of all chats for the logged in person. */ async function fetchChatList() { return _makeSimulatedNetworkRequest((resolve, reject) => { resolve(backendStateForLoggedInPerson.chats.map(chat => chat.name)); }); } /** * Fetch a single chat. */ async function fetchChat(name) { return _makeSimulatedNetworkRequest((resolve, reject) => { resolve( backendStateForLoggedInPerson.chats.find( chat => chat.name === name ) ); }); } /** * Send given message to given person. */ async function sendMessage({name, message}) { return _makeSimulatedNetworkRequest((resolve, reject) => { const chatForName = backendStateForLoggedInPerson.chats.find( chat => chat.name === name ); if (chatForName) { chatForName.messages.push({ name: 'Me', text: message, }); resolve(); } else { reject(new Error('Uknown person: ' + name)); } }); } const Backend = { fetchChatList, fetchChat, sendMessage, }; export default Backend; // In case you are looking into using Redux for state management, // this is how network requests are done in the f8 app which uses Redux: // - To load some data, a Component fires a Redux action, such as loadSession() // - That action makes the HTTP requests and then dispatches a redux action // {type: 'LOADED_SESSIONS', results} // - Then all reducers get called and one of them updates a part of the application // state by storing the results // - Redux re-renders the connected Components // See https://github.com/fbsamples/f8app/search?utf8=%E2%9C%93&q=loaded_sessions