├── data ├── src │ ├── Menu │ │ ├── Menu.scss │ │ ├── Menu.test.js │ │ └── Menu.js │ ├── Tabs │ │ ├── tabs.scss │ │ ├── tabs.test.js │ │ └── tabs.js │ ├── Intro │ │ ├── Intro.scss │ │ ├── Intro.test.js │ │ ├── Intro.js │ │ └── index.html │ ├── Login │ │ ├── Login.sccs │ │ ├── Login.test.js │ │ ├── login.png │ │ ├── login2.png │ │ ├── Login.js │ │ └── index.html │ ├── Recipe │ │ ├── Recipe.scss │ │ ├── Recipe.test.js │ │ ├── recipe.png │ │ ├── ux recipe.png │ │ ├── ux recipe2.png │ │ ├── single recipe.png │ │ ├── style recipe.png │ │ ├── styled recipe.png │ │ ├── Recipe.js │ │ └── index.html │ ├── Signup │ │ ├── Signup.sccs │ │ ├── Signup.test.js │ │ └── Signup.js │ ├── Directions │ │ ├── Directions.scss │ │ ├── Directions.test.js │ │ ├── directions.png │ │ └── Directions.js │ ├── FreeRecipes │ │ ├── FreeRecipes.scss │ │ ├── FreeRecipes.test.js │ │ ├── free recipe.png │ │ └── FreeRecipes.js │ ├── GroceryList │ │ ├── GroceryList.scss │ │ ├── GroceryList.test.js │ │ └── GroceryList.js │ ├── Ingredients │ │ ├── Ingredients.scss │ │ ├── Ingredients.test.js │ │ ├── ingredients.png │ │ └── Ingredients.js │ ├── WeeklyMenu │ │ ├── WeeklyMenu.scss │ │ ├── WeeklyMenu.test.js │ │ ├── weekly menu.png │ │ └── WeeklyMenu.js │ ├── RecipeCalendar │ │ ├── RecipeCalendar.scss │ │ ├── RecipeCalendar.test.js │ │ ├── calendar.png │ │ └── RecipeCalendar.js │ ├── GroceryListSettings │ │ ├── GroceryListSettings.scss │ │ ├── Servings │ │ │ └── Servings.js │ │ ├── GroceryListSettings.test.js │ │ ├── GL-settings.png │ │ └── GroceryListSettings.js │ ├── GroceryListDepartment │ │ ├── GroceryListDepartment.scss │ │ ├── GroceryListDepartment.test.js │ │ ├── GL category.png │ │ ├── GL departments.png │ │ └── GroceryListDepartment.js │ ├── menu.png │ └── Router │ │ └── Router-as-example.js ├── post.jpg ├── favicon.png ├── mainpage.jpg ├── img │ ├── menu │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ ├── 5.jpg │ │ └── 6.jpg │ ├── intro │ │ ├── fish.png │ │ ├── milk.png │ │ ├── apple.png │ │ ├── carrot.png │ │ ├── cheese.png │ │ ├── license.pdf │ │ ├── salad.png │ │ ├── tomato.png │ │ ├── broccoli.png │ │ ├── doughnut.png │ │ ├── fried-egg.png │ │ ├── groceries.png │ │ ├── fried-egg.svg │ │ ├── milk.svg │ │ ├── apple.svg │ │ ├── fish.svg │ │ ├── tomato.svg │ │ ├── cheese.svg │ │ ├── doughnut.svg │ │ └── salad.svg │ ├── recipes │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ ├── 4.jpg │ │ ├── 5.jpg │ │ └── 6.jpg │ ├── mainpage-welcome.gif │ ├── mainpage-sample-menu.png │ ├── mainpage-weekly-menu.jpg │ └── STUDS5qgSii9fQDRecPI_111.png ├── apple-touch-icon-precomposed.png ├── b944776a01af18191c5324145ec04440-original.png └── json-db-sample │ ├── old-n-unsorted-json │ ├── Readme.md │ ├── jsons │ │ ├── users.json │ │ ├── grocery-calendar.json │ │ ├── recipes-nutrition.js │ │ ├── grocery.json │ │ ├── recipes-extended.js │ │ ├── weekly.json │ │ └── nutritions.txt │ ├── complex3.json │ └── complex4.json │ ├── from-recipe-api-server │ ├── grocery │ │ ├── grocery.js │ │ └── departments.js │ ├── users │ │ └── users.js │ ├── Readme.md │ └── search │ │ └── nutritions.js │ └── app-ready-samples │ ├── complex │ └── Readme.md │ ├── free │ ├── simple-recipe-2.js │ ├── simple-recipe-3.js │ ├── simple-recipe-1.js │ ├── free-recipes-list.js │ ├── grocery.js │ ├── simple-recipe-4.js │ └── weekly-menu.js │ └── menu │ └── Readme.md ├── src ├── components │ ├── Directions │ │ ├── test.js │ │ ├── styles.js │ │ └── index.js │ ├── FreeRecipes │ │ ├── test.js │ │ ├── styles.js │ │ └── index.js │ ├── GroceryList │ │ ├── test.js │ │ ├── GL departments.png │ │ ├── styles.js │ │ ├── index.js │ │ ├── GroceryList.js │ │ └── GroceryListItem.js │ ├── GroceryListSettings │ │ ├── GL-settings.png │ │ ├── temp.js │ │ ├── styles.js │ │ └── index.js │ ├── GroceryListDepartment │ │ ├── styles.js │ │ ├── index.js │ │ └── temp.js │ ├── Login │ │ ├── styles.js │ │ └── index.js │ ├── Signup │ │ ├── styles.js │ │ └── index.js │ └── Home │ │ ├── styles.js │ │ └── index.js ├── assets │ ├── images │ │ └── Background.jpg │ └── data │ │ ├── json-db-sample │ │ ├── old-n-unsorted-json │ │ │ ├── Readme.md │ │ │ ├── jsons │ │ │ │ ├── users.json │ │ │ │ ├── grocery-calendar.json │ │ │ │ ├── recipes-nutrition.js │ │ │ │ ├── grocery.json │ │ │ │ ├── recipes-extended.js │ │ │ │ ├── weekly.json │ │ │ │ └── nutritions.txt │ │ │ ├── complex3.json │ │ │ └── complex4.json │ │ └── from-recipe-api-server │ │ │ ├── grocery │ │ │ ├── grocery.js │ │ │ └── departments.js │ │ │ ├── users │ │ │ └── users.js │ │ │ ├── search │ │ │ ├── diets.js │ │ │ ├── allergy.js │ │ │ ├── nutritions.js │ │ │ ├── holidays.js │ │ │ └── courses.js │ │ │ ├── Readme.md │ │ │ └── recipes │ │ │ ├── menus.js │ │ │ └── recipes.js │ │ └── directions │ │ └── index.js ├── config │ ├── HelperFunctions.js │ └── Temp │ │ └── Accordion.js ├── App.js ├── navigation │ └── index.js └── boot │ └── setup.js ├── App.js ├── app.json ├── App.test.js ├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── __test__ └── Directions.test.js ├── .gitignore ├── package.json ├── GETTINGSTARTED.md └── README.md /data/src/Menu/Menu.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Tabs/tabs.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Intro/Intro.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Intro/Intro.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Login/Login.sccs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Login/Login.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Menu/Menu.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Recipe/Recipe.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Signup/Signup.sccs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Tabs/tabs.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Recipe/Recipe.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Signup/Signup.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Directions/test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Directions/Directions.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Directions/Directions.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/FreeRecipes/FreeRecipes.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryList/GroceryList.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Ingredients/Ingredients.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/WeeklyMenu/WeeklyMenu.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/WeeklyMenu/WeeklyMenu.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/FreeRecipes/test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/GroceryList/test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/FreeRecipes/FreeRecipes.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryList/GroceryList.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/Ingredients/Ingredients.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/RecipeCalendar/RecipeCalendar.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/RecipeCalendar/RecipeCalendar.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryListSettings/GroceryListSettings.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryListSettings/Servings/Servings.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /App.js: -------------------------------------------------------------------------------- 1 | import App from './src/App'; 2 | export default App; -------------------------------------------------------------------------------- /data/src/GroceryListDepartment/GroceryListDepartment.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryListSettings/GroceryListSettings.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /data/src/GroceryListDepartment/GroceryListDepartment.test.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "expo": { 3 | "sdkVersion": "30.0.0" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /data/post.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/post.jpg -------------------------------------------------------------------------------- /data/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/favicon.png -------------------------------------------------------------------------------- /data/mainpage.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/mainpage.jpg -------------------------------------------------------------------------------- /data/src/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/menu.png -------------------------------------------------------------------------------- /data/img/menu/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/1.jpg -------------------------------------------------------------------------------- /data/img/menu/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/2.jpg -------------------------------------------------------------------------------- /data/img/menu/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/3.jpg -------------------------------------------------------------------------------- /data/img/menu/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/4.jpg -------------------------------------------------------------------------------- /data/img/menu/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/5.jpg -------------------------------------------------------------------------------- /data/img/menu/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/menu/6.jpg -------------------------------------------------------------------------------- /data/img/intro/fish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/fish.png -------------------------------------------------------------------------------- /data/img/intro/milk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/milk.png -------------------------------------------------------------------------------- /data/img/recipes/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/1.jpg -------------------------------------------------------------------------------- /data/img/recipes/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/2.jpg -------------------------------------------------------------------------------- /data/img/recipes/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/3.jpg -------------------------------------------------------------------------------- /data/img/recipes/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/4.jpg -------------------------------------------------------------------------------- /data/img/recipes/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/5.jpg -------------------------------------------------------------------------------- /data/img/recipes/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/recipes/6.jpg -------------------------------------------------------------------------------- /data/img/intro/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/apple.png -------------------------------------------------------------------------------- /data/img/intro/carrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/carrot.png -------------------------------------------------------------------------------- /data/img/intro/cheese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/cheese.png -------------------------------------------------------------------------------- /data/img/intro/license.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/license.pdf -------------------------------------------------------------------------------- /data/img/intro/salad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/salad.png -------------------------------------------------------------------------------- /data/img/intro/tomato.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/tomato.png -------------------------------------------------------------------------------- /data/src/Login/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Login/login.png -------------------------------------------------------------------------------- /data/src/Login/login2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Login/login2.png -------------------------------------------------------------------------------- /data/src/Recipe/recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/recipe.png -------------------------------------------------------------------------------- /data/img/intro/broccoli.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/broccoli.png -------------------------------------------------------------------------------- /data/img/intro/doughnut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/doughnut.png -------------------------------------------------------------------------------- /data/img/intro/fried-egg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/fried-egg.png -------------------------------------------------------------------------------- /data/img/intro/groceries.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/intro/groceries.png -------------------------------------------------------------------------------- /data/img/mainpage-welcome.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/mainpage-welcome.gif -------------------------------------------------------------------------------- /data/src/Recipe/ux recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/ux recipe.png -------------------------------------------------------------------------------- /data/src/Recipe/ux recipe2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/ux recipe2.png -------------------------------------------------------------------------------- /data/img/mainpage-sample-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/mainpage-sample-menu.png -------------------------------------------------------------------------------- /data/img/mainpage-weekly-menu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/mainpage-weekly-menu.jpg -------------------------------------------------------------------------------- /data/src/Recipe/single recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/single recipe.png -------------------------------------------------------------------------------- /data/src/Recipe/style recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/style recipe.png -------------------------------------------------------------------------------- /data/src/Recipe/styled recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Recipe/styled recipe.png -------------------------------------------------------------------------------- /src/assets/images/Background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/src/assets/images/Background.jpg -------------------------------------------------------------------------------- /data/src/Directions/directions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Directions/directions.png -------------------------------------------------------------------------------- /data/src/FreeRecipes/free recipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/FreeRecipes/free recipe.png -------------------------------------------------------------------------------- /data/src/Ingredients/ingredients.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/Ingredients/ingredients.png -------------------------------------------------------------------------------- /data/src/RecipeCalendar/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/RecipeCalendar/calendar.png -------------------------------------------------------------------------------- /data/src/WeeklyMenu/weekly menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/WeeklyMenu/weekly menu.png -------------------------------------------------------------------------------- /data/apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /data/img/STUDS5qgSii9fQDRecPI_111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/img/STUDS5qgSii9fQDRecPI_111.png -------------------------------------------------------------------------------- /data/src/GroceryListDepartment/GL category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/GroceryListDepartment/GL category.png -------------------------------------------------------------------------------- /data/src/GroceryListSettings/GL-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/GroceryListSettings/GL-settings.png -------------------------------------------------------------------------------- /src/components/GroceryList/GL departments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/src/components/GroceryList/GL departments.png -------------------------------------------------------------------------------- /data/b944776a01af18191c5324145ec04440-original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/b944776a01af18191c5324145ec04440-original.png -------------------------------------------------------------------------------- /data/src/GroceryListDepartment/GL departments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/data/src/GroceryListDepartment/GL departments.png -------------------------------------------------------------------------------- /src/components/GroceryListSettings/GL-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChickenKyiv/recipe-app-react-native/HEAD/src/components/GroceryListSettings/GL-settings.png -------------------------------------------------------------------------------- /src/config/HelperFunctions.js: -------------------------------------------------------------------------------- 1 | import gf from '@groceristar/groceristar-fetch'; 2 | 3 | export const getAllDirectionsList = () => { 4 | const recipe = gf.getRecipe(); 5 | console.log(recipe); 6 | }; -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/Readme.md: -------------------------------------------------------------------------------- 1 | Data at this folder are not finished and have bugs inside. 2 | I keep it just because want to save all stuff in one place. 3 | Maybe someone will update it and it'll be ready to use. 4 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/Readme.md: -------------------------------------------------------------------------------- 1 | Data at this folder are not finished and have bugs inside. 2 | I keep it just because want to save all stuff in one place. 3 | Maybe someone will update it and it'll be ready to use. 4 | -------------------------------------------------------------------------------- /data/src/Login/Login.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | 9 | 10 | const Login = (props) => { 11 | return ( 12 | 13 | ); 14 | }; 15 | 16 | export default Login; 17 | -------------------------------------------------------------------------------- /data/src/Signup/Signup.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | 9 | 10 | const Signup = (props) => { 11 | return ( 12 | 13 | ); 14 | }; 15 | 16 | export default Signup; 17 | -------------------------------------------------------------------------------- /App.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import App from './App'; 3 | 4 | import renderer from 'react-test-renderer'; 5 | 6 | it('renders without crashing', () => { 7 | const rendered = renderer.create().toJSON(); 8 | expect(rendered).toBeTruthy(); 9 | }); 10 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/users.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "email" : "arthur", 4 | "password" : "arthur", 5 | }, 6 | { 7 | "email" : "demo", 8 | "password" : "demo", 9 | }, 10 | { 11 | "email" : "admin", 12 | "password" : "admin", 13 | }, 14 | ] -------------------------------------------------------------------------------- /data/json-db-sample/from-recipe-api-server/grocery/grocery.js: -------------------------------------------------------------------------------- 1 | const get = () => { 2 | 3 | var data = [ 4 | { 5 | name : "Ultimate Grocery List", 6 | img : false, 7 | desc : false, 8 | slug : false //:todo do we need this fields? 9 | } 10 | ]; 11 | 12 | return data; 13 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/users.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "email" : "arthur", 4 | "password" : "arthur", 5 | }, 6 | { 7 | "email" : "demo", 8 | "password" : "demo", 9 | }, 10 | { 11 | "email" : "admin", 12 | "password" : "admin", 13 | }, 14 | ] -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | # Description/Steps to reproduce 3 | 4 | 8 | 9 | # Expected result 10 | 11 | 14 | 15 | # Additional information 16 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/grocery/grocery.js: -------------------------------------------------------------------------------- 1 | const get = () => { 2 | 3 | var data = [ 4 | { 5 | name : "Ultimate Grocery List", 6 | img : false, 7 | desc : false, 8 | slug : false //:todo do we need this fields? 9 | } 10 | ]; 11 | 12 | return data; 13 | -------------------------------------------------------------------------------- /__test__/Directions.test.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Directions from '../src/components/Directions'; 3 | import renderer from 'react-test-renderer'; 4 | 5 | test('Checking Directions Component', () => { 6 | // console.log('Print something for the people'); 7 | const snap = renderer.create( 8 | 9 | ); 10 | }); -------------------------------------------------------------------------------- /data/json-db-sample/from-recipe-api-server/users/users.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var data = [ 4 | { 5 | name: 'john', 6 | email: 'john.doe@ibm.com', 7 | password: 'john1', 8 | }, 9 | { 10 | name: 'jane', 11 | email: 'jane.doe@ibm.com', 12 | password: 'jane1', 13 | }, 14 | { 15 | name: 'admin', 16 | email: 'admin@ibm.com', 17 | password: 'admin', 18 | } 19 | ]; 20 | -------------------------------------------------------------------------------- /src/components/GroceryListSettings/temp.js: -------------------------------------------------------------------------------- 1 | import {List} from "react-native-elements"; 2 | import {View} from "react-native"; 3 | import React from "react"; 4 | 5 | 8 | 9 | { 10 | // list.map((l) => ( 11 | // 17 | // )) 18 | } 19 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/users/users.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var data = [ 4 | { 5 | name: 'john', 6 | email: 'john.doe@ibm.com', 7 | password: 'john1', 8 | }, 9 | { 10 | name: 'jane', 11 | email: 'jane.doe@ibm.com', 12 | password: 'jane1', 13 | }, 14 | { 15 | name: 'admin', 16 | email: 'admin@ibm.com', 17 | password: 'admin', 18 | } 19 | ]; 20 | -------------------------------------------------------------------------------- /data/src/Menu/Menu.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | ); 17 | } 18 | 19 | const Menu = (props) => { 20 | return ( 21 | 22 | ); 23 | }; 24 | 25 | export default Menu; 26 | -------------------------------------------------------------------------------- /data/src/Intro/Intro.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | ); 17 | } 18 | 19 | const Intro = (props) => { 20 | return ( 21 | 22 | ); 23 | }; 24 | 25 | export default Intro; 26 | -------------------------------------------------------------------------------- /data/src/Recipe/Recipe.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | ); 17 | } 18 | 19 | const Recipe = (props) => { 20 | return ( 21 | 22 | ); 23 | }; 24 | 25 | export default Recipe; 26 | -------------------------------------------------------------------------------- /src/components/Directions/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | import {getStatusBarHeight} from "react-native-status-bar-height"; 3 | 4 | const styles = StyleSheet.create({ 5 | container : { 6 | paddingTop: getStatusBarHeight(), 7 | }, 8 | row : { 9 | padding : 10 10 | }, 11 | listContainerStyle : { 12 | marginTop : 0 13 | }, 14 | listItemContainerStyle : { 15 | borderLeftWidth : 1, 16 | borderRightWidth : 1, 17 | borderColor : '#cbd2d9' 18 | } 19 | }); 20 | export default styles; -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/search/diets.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var diet = [ 4 | { 5 | 6 | "name":"Lacto vegetarian", 7 | 8 | }, 9 | { 10 | 11 | "name":"Ovo vegetarian", 12 | 13 | }, 14 | { 15 | 16 | "name":"Pescetarian", 17 | 18 | }, 19 | { 20 | 21 | "name":"Vegan", 22 | 23 | }, 24 | { 25 | 26 | "name":"Lacto-ovo vegetarian", 27 | 28 | }, 29 | { 30 | 31 | "name":"Paleo", 32 | 33 | } 34 | ]; 35 | -------------------------------------------------------------------------------- /data/json-db-sample/from-recipe-api-server/Readme.md: -------------------------------------------------------------------------------- 1 | This folder contain latest data, that i use on Recipe API project and GroceriStar project 2 | So when we'll be ready to fetch data from an outside data provider - this data can be used as sample for testing. 3 | 4 | Folder grocery contain import data for GroceriStar project and I use it at RAPI too 5 | 6 | Folder recipes contain data related to recipes and menus. Used at RAPI 7 | Folder search contain data related to advanced recipe search form. Used at RAPI and at react search form project 8 | 9 | Folder users contain data related to test users 10 | -------------------------------------------------------------------------------- /src/components/FreeRecipes/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | import {getStatusBarHeight} from "react-native-status-bar-height"; 3 | 4 | const styles = StyleSheet.create({ 5 | container : { 6 | paddingTop: getStatusBarHeight(), 7 | }, 8 | row : { 9 | padding : 10 10 | }, 11 | listContainerStyle : { 12 | marginTop : 0 13 | }, 14 | listItemContainerStyle : { 15 | borderLeftWidth : 1, 16 | borderRightWidth : 1, 17 | borderColor : '#cbd2d9' 18 | }, 19 | titleStyle : { 20 | backgroundColor : 'red' 21 | } 22 | }); 23 | 24 | export default styles; -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/Readme.md: -------------------------------------------------------------------------------- 1 | This folder contain latest data, that i use on Recipe API project and GroceriStar project 2 | So when we'll be ready to fetch data from an outside data provider - this data can be used as sample for testing. 3 | 4 | Folder grocery contain import data for GroceriStar project and I use it at RAPI too 5 | 6 | Folder recipes contain data related to recipes and menus. Used at RAPI 7 | Folder search contain data related to advanced recipe search form. Used at RAPI and at react search form project 8 | 9 | Folder users contain data related to test users 10 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Description 2 | 3 | 4 | #### Related issues 5 | 6 | 12 | 13 | - None 14 | 15 | ### Checklist 16 | 17 | 21 | 22 | - [ ] New tests added or existing tests modified to cover all changes 23 | - [ ] Code conforms with the [style 24 | guide](http://loopback.io/doc/en/contrib/style-guide.html) 25 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/grocery-calendar.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "day" : "monday", 4 | "servings" : "4", 5 | "info":[ 6 | { 7 | "letter" : "A", 8 | "id" : "5", 9 | "title" : "Pimento Cheeseburgers", 10 | "link" : "id or link?" 11 | 12 | } 13 | ] 14 | }, 15 | { 16 | "day" : "tuesday", 17 | "servings" : "4", 18 | "info":[ 19 | { 20 | "letter" : "c", 21 | "id" : "6", 22 | "title" : "Shrimp and Green Chili Grits", 23 | "link" : "id or link?" 24 | }, 25 | { 26 | "letter" : "d", 27 | "id" : "7", 28 | "title" : "Simple Salad and Basic Vinaigrette", 29 | "link" : "id or link?" 30 | } 31 | ] 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/grocery-calendar.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "day" : "monday", 4 | "servings" : "4", 5 | "info":[ 6 | { 7 | "letter" : "A", 8 | "id" : "5", 9 | "title" : "Pimento Cheeseburgers", 10 | "link" : "id or link?" 11 | 12 | } 13 | ] 14 | }, 15 | { 16 | "day" : "tuesday", 17 | "servings" : "4", 18 | "info":[ 19 | { 20 | "letter" : "c", 21 | "id" : "6", 22 | "title" : "Shrimp and Green Chili Grits", 23 | "link" : "id or link?" 24 | }, 25 | { 26 | "letter" : "d", 27 | "id" : "7", 28 | "title" : "Simple Salad and Basic Vinaigrette", 29 | "link" : "id or link?" 30 | } 31 | ] 32 | } 33 | ] 34 | -------------------------------------------------------------------------------- /src/components/GroceryList/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | import {getStatusBarHeight} from "react-native-status-bar-height"; 3 | 4 | const styles = StyleSheet.create({ 5 | container : { 6 | paddingTop: getStatusBarHeight(), 7 | }, 8 | row : { 9 | padding : 10 10 | }, 11 | listContainerStyle : { 12 | marginTop : 0 13 | }, 14 | listItemContainerStyle : { 15 | borderLeftWidth : 1, 16 | borderRightWidth : 1, 17 | borderColor : '#cbd2d9' 18 | } 19 | }); 20 | 21 | export const titleStyles = { 22 | titleStyle : { 23 | color : 'red', 24 | // fontSize : 30 25 | }, 26 | leftIcon : { 27 | margin: 5, 28 | paddingLeft : 5, 29 | paddingRight : 5, 30 | fontSize : 30 31 | } 32 | }; 33 | 34 | export default styles; -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { StyleSheet, Text, View } from 'react-native'; 3 | import Expo from 'expo'; 4 | 5 | import NavigationApp from './navigation'; 6 | 7 | export default class App extends React.Component { 8 | state = { 9 | isReady : false 10 | } 11 | 12 | componentWillMount() { 13 | this.loadFonts(); 14 | } 15 | 16 | async loadFonts () { 17 | await Expo.Font.loadAsync({ 18 | 'Roboto': require('native-base/Fonts/Roboto.ttf'), 19 | 'Roboto_medium': require('native-base/Fonts/Roboto_medium.ttf'), 20 | 'Ionicons': require('@expo/vector-icons/fonts/Ionicons.ttf'), 21 | }); 22 | this.setState({isReady : true}); 23 | } 24 | 25 | render() { 26 | if (!this.state.isReady) { 27 | return ; 28 | } 29 | return ( 30 | 31 | ); 32 | } 33 | } -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/complex/Readme.md: -------------------------------------------------------------------------------- 1 | Complex Recipe have complex structure :) 2 | I tried to mimic case, where we have recipe that have few sub-recipes. 3 | Sometimes, main dish contain sub-dishes and it'll be a stupid way to recreate a recipe each time. 4 | With sub-recipe feature chef can use a set of simple recipes and mix it as he wish. 5 | 6 | // structure 7 | data {} 8 | -- id 9 | -- title 10 | -- url 11 | -- img 12 | -- created_at 13 | -- description 14 | 15 | items [] 16 | -- id 17 | -- title 18 | -- ingredients [] 19 | -- unit_type 20 | -- quantity 21 | -- unit_name 22 | -- category {} 23 | -- id 24 | -- name 25 | -- steps [] 26 | -- meta {} 27 | -- prepTime 28 | -- totalTime 29 | -- recipeYield 30 | -- description 31 | -- notes 32 | -- nutritional 33 | -------------------------------------------------------------------------------- /data/src/Tabs/tabs.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | 9 | const items = []; 10 | for (let i=0; i < data.recipe[0].directions.length; i++){ 11 | items.push( 12 | 15 | 16 | 17 | ); 18 | } 19 | 20 | const Tabs = (props) => { 21 | return ( 22 | {/* maybe it'll be anothe way to do menu? */} 23 | 24 | {/* it's a loop */} 25 | {items} 26 | 28 | 29 | 31 | 32 | 34 | 35 | 36 | ); 37 | }; 38 | 39 | export default Tabs; 40 | -------------------------------------------------------------------------------- /src/components/GroceryListDepartment/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | import {getStatusBarHeight} from "react-native-status-bar-height"; 3 | 4 | const styles = StyleSheet.create({ 5 | container : { 6 | padding : 10, 7 | paddingTop: getStatusBarHeight() + 10, 8 | }, 9 | row : { 10 | padding : 15, 11 | borderColor : '#cbd2d9', 12 | borderWidth : 1 13 | }, 14 | listContainerStyle : { 15 | marginTop : 0, 16 | padding : 0, 17 | // backgroundColor : 'red' 18 | }, 19 | listItemContainerStyle : { 20 | borderLeftWidth : 1, 21 | borderRightWidth : 1, 22 | borderColor : '#cbd2d9', 23 | backgroundColor : 'yellow', 24 | }, 25 | checkBoxContainer : { 26 | // backgroundColor : 'yellow', 27 | paddingBottom : 0, 28 | paddingTop : 0, 29 | padding : 0, 30 | margin : 0, 31 | borderColor : '#cbd2d9', 32 | borderTopWidth: 1, 33 | borderLeftWidth: 1, 34 | borderRightWidth: 1, 35 | } 36 | }); 37 | export default styles; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | yarn-error.log 38 | 39 | # BUCK 40 | buck-out/ 41 | \.buckd/ 42 | *.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | -------------------------------------------------------------------------------- /src/navigation/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {createStackNavigator} from 'react-navigation'; 3 | 4 | import HomeScreen from '../components/Home'; 5 | import Directions from '../components/Directions'; 6 | import FreeRecipes from '../components/FreeRecipes'; 7 | import GroceryList from '../components/GroceryList'; 8 | import GroceryListDepartment from '../components/GroceryListDepartment'; 9 | import GroceryListSettings from '../components/GroceryListSettings'; 10 | import Signup from '../components/Signup'; 11 | import Login from '../components/Login'; 12 | 13 | const ExampleRoutes = { 14 | Directions, 15 | FreeRecipes, 16 | GroceryList, 17 | GroceryListDepartment, 18 | GroceryListSettings, 19 | Signup, 20 | Login 21 | }; 22 | 23 | const NavigationApp = createStackNavigator({ 24 | MainScreen: { 25 | screen: HomeScreen, 26 | navigationOptions: { 27 | gesturesEnabled: false, 28 | header: null 29 | } 30 | }, 31 | ...ExampleRoutes 32 | }); 33 | 34 | export default NavigationApp; 35 | 36 | -------------------------------------------------------------------------------- /src/components/GroceryListSettings/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | import {getStatusBarHeight} from "react-native-status-bar-height"; 3 | 4 | const styles = StyleSheet.create({ 5 | container : { 6 | // padding : 10, 7 | // backgroundColor : 'red', 8 | paddingTop: getStatusBarHeight() + 10, 9 | // paddingLeft : 10, 10 | // paddingRight : 10, 11 | }, 12 | itemSettingsContainer : { 13 | padding : 10 14 | }, 15 | itemSettingsTitle : { 16 | fontWeight: 'bold' 17 | }, 18 | itemSettingsContent : { 19 | backgroundColor : 'white', 20 | borderColor : '#cbd2d9', 21 | borderWidth : 1, 22 | borderTopWidth : 0, 23 | }, 24 | itemSettingsRow : { 25 | flexDirection : 'row', 26 | justifyContent: 'space-between', 27 | alignItems : 'center', 28 | padding : 15, 29 | paddingLeft : 20, 30 | paddingRight : 20, 31 | borderTopWidth: 1, 32 | borderColor : '#cbd2d9', 33 | }, 34 | itemSettingsLabel : { 35 | fontSize : 17 36 | } 37 | 38 | 39 | }); 40 | export default styles; -------------------------------------------------------------------------------- /src/boot/setup.js: -------------------------------------------------------------------------------- 1 | import * as Expo from "expo"; 2 | import React, { Component } from "react"; 3 | import { StyleProvider } from "native-base"; 4 | 5 | import App from "../App"; 6 | // import getTheme from "../theme/components"; 7 | // import variables from "../theme/variables/commonColor"; 8 | 9 | export default class Setup extends Component { 10 | state = { 11 | isReady: false 12 | }; 13 | componentWillMount() { 14 | this.loadFonts(); 15 | } 16 | async loadFonts() { 17 | await Expo.Font.loadAsync({ 18 | Roboto: require("native-base/Fonts/Roboto.ttf"), 19 | Roboto_medium: require("native-base/Fonts/Roboto_medium.ttf"), 20 | Ionicons: require("@expo/vector-icons/fonts/Ionicons.ttf") 21 | }); 22 | this.setState({ isReady: true }); 23 | } 24 | render() { 25 | if (!this.state.isReady) { 26 | return ; 27 | } 28 | return ( 29 | 30 | ); 31 | 32 | // return ( 33 | // 34 | // 35 | // 36 | // ); 37 | } 38 | } -------------------------------------------------------------------------------- /src/components/FreeRecipes/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {View, Text, StyleSheet} from 'react-native'; 3 | import {getStatusBarHeight} from "react-native-status-bar-height"; 4 | import { List, ListItem } from 'react-native-elements'; 5 | 6 | import directions from '../../assets/data/directions'; 7 | import styles from './styles'; 8 | 9 | // var recipe = gf.getRecipe(); 10 | 11 | const FreeRecipes = () => { 12 | return ( 13 | 14 | 15 | 16 | { 17 | directions[0].directions.map((item,index) => ( 18 | 26 | )) 27 | } 28 | 29 | 30 | 31 | ) 32 | }; 33 | 34 | export default FreeRecipes; -------------------------------------------------------------------------------- /data/src/GroceryListDepartment/GroceryListDepartment.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | 17 | ); 18 | } 19 | 20 | const GroceryListDepartments = (props) => { 21 | return ( 22 | 23 | 24 | {/* this is a loop */} 25 | {items} 26 | <Checkbox value="1" label="Ketchup 0.2 cup" /> 27 | <Checkbox value="2" label="Kosher salt and freshly good paper" /> 28 | <Checkbox value="3" label="Olive Oil" /> 29 | <Checkbox value="4" label="Mascarpone" /> 30 | <Checkbox value="5" label="Lemon" /> 31 | <Checkbox value="6" label="Raspberries" /> 32 | </List> 33 | 34 | ); 35 | }; 36 | 37 | export default GroceryListDepartments; 38 | -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/simple-recipe-2.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | "title": "Basic Fruit Salad", 6 | "yields" : { 7 | "servings": "6" 8 | }, 9 | "ingredients": [ 10 | { 11 | "name" : "apple", 12 | "amounts" : { 13 | "amount" : "1", 14 | "unit" : "each" 15 | } 16 | }, 17 | { 18 | "name" : "banana", 19 | "amounts" : { 20 | "amount" : "1", 21 | "unit" : "each" 22 | } 23 | }, 24 | { 25 | "name" : "orange", 26 | "amounts" : { 27 | "amount" : "1", 28 | "unit" : "each" 29 | } 30 | }, 31 | { 32 | "name" : "grapes", 33 | "amounts" : { 34 | "amount" : "10", 35 | "unit" : "cup" 36 | } 37 | }, 38 | ], 39 | "directions": [ 40 | "Cut the apple into cubes", 41 | "Cut the banana into slices", 42 | "Peel the orange, and divide into segments", 43 | "Combine all ingredients in a bowl", 44 | "Mix to combine" 45 | ] 46 | 47 | }; 48 | -------------------------------------------------------------------------------- /data/src/FreeRecipes/FreeRecipes.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | <Item index={i} link="/"> 14 | {data.recipe[i].title} 15 | </Item> 16 | ); 17 | } 18 | 19 | const FreeRecipes = (props) => { 20 | 21 | return ( 22 | <List> 23 | <Title> 24 | Free Recipes 25 | 26 | 27 | {/* this is a loop */} 28 | {items} 29 | 30 | Pork Tenderloin with Roasted Cherries 31 | 32 | 33 | Beef, Red Pepper and Snow Pea Stir-Fry 34 | 35 | 36 | Meatball Sliders 37 | 38 | 39 | Item title 40 | 41 | 42 | Item title 43 | 44 | 45 | Item title 46 | 47 | 48 | ); 49 | }; 50 | 51 | export default FreeRecipes; 52 | -------------------------------------------------------------------------------- /src/assets/data/directions/index.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | 4 | title: "Crock Pot Roast12", 5 | directions: [ 6 | "Place beef roast in crock pot.", 7 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 8 | "Pour the water around the roast.", 9 | "Cook on low for 7-9 hours." 10 | ], 11 | prep_time :"30min", 12 | total_time :"3h", 13 | recipe_yield :"8", 14 | img: "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 15 | "url": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 16 | 17 | }, 18 | { 19 | 20 | title: "Crock Pot Roast1", 21 | img: "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 22 | url: "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 23 | directions: [ 24 | "Place beef roast in crock pot.", 25 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 26 | "Pour the water around the roast.", 27 | "Cook on low for 7-9 hours." 28 | ], 29 | prep_time :"PT30M", 30 | total_time :"PT3H", 31 | recipe_yield :"8", 32 | 33 | } 34 | ]; -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/recipes/menus.js: -------------------------------------------------------------------------------- 1 | 2 | const get = () => { 3 | // var x = new Date(); 4 | // x.setDate(1); 5 | // 6 | // var prev_month = x.getMonth()-1; 7 | // var prev_month2 = x.getMonth()-2; 8 | // var prev_month3 = x.getMonth()-3; 9 | 10 | var data = [ 11 | { 12 | title: "Weekly menu #9", 13 | date: new Date(), 14 | description: "string", 15 | notes: "This is notes6", 16 | }, 17 | { 18 | title: "Weekly menu #6", 19 | date: new Date(), 20 | description: "string1", 21 | notes: "This is notes5", 22 | }, 23 | { 24 | title:"Weekly menu with extra cheese", 25 | date: new Date(), 26 | description:"string2", 27 | notes: "This is notes4", 28 | }, 29 | { 30 | title:"string3", 31 | date: new Date(), 32 | description:"string3", 33 | notes: "This is notes3", 34 | }, 35 | { 36 | title:"string4", 37 | date: new Date(), 38 | description:"string4", 39 | notes: "This is notes2", 40 | } 41 | ]; 42 | 43 | return data; 44 | 45 | }; 46 | -------------------------------------------------------------------------------- /data/src/Directions/Directions.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | ); 17 | } 18 | 19 | 20 | const Directions = (props) => { 21 | 22 | 23 | return ( 24 | 25 | 26 | <List> 27 | {/* this is a loop */} 28 | {items} 29 | <Item index="1"> 30 | Preheat oven to 425 degrees. 31 | </Item> 32 | <Item index="2"> 33 | Heat a large ovenproof nonstick skillet over medium-high heat. 34 | Add 1 tablespoon oil; swirl to coat. 35 | </Item> 36 | <Item index="3"> 37 | Combine 1 teaspoon salt, pepper, cumin, cinnamon and ginger. 38 | Rub pork evenly with this spice mixture. 39 | </Item> 40 | <Item index="4"> 41 | Add pork to now-hot skillet; saute 4 minutes. 42 | </Item> 43 | </List> 44 | </Directions> 45 | ); 46 | }; 47 | 48 | export default Directions; 49 | -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/simple-recipe-3.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | "id": "1989", 6 | "name": "Crock Pot Roast", 7 | "imageURL": "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 8 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 9 | "ingredients": [ 10 | { 11 | "quantity": "1", 12 | "name": " beef roast" 13 | }, 14 | { 15 | "quantity": "1 package", 16 | "name": "brown gravy mix" 17 | }, 18 | { 19 | "quantity": "1 package", 20 | "name": "dried Italian salad dressing mix" 21 | }, 22 | { 23 | "quantity": "1 package", 24 | "name": "dry ranch dressing mix" 25 | }, 26 | { 27 | "quantity": "1/2 cup", 28 | "name": "water" 29 | } 30 | ], 31 | "directions": [ 32 | "Place beef roast in crock pot.", 33 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 34 | "Pour the water around the roast.", 35 | "Cook on low for 7-9 hours." 36 | ], 37 | 38 | "prepTime" :"PT30M", 39 | "totalTime" :"PT3H", 40 | "recipeYield" :"8" 41 | 42 | }; 43 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/search/allergy.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var data = [ 4 | { 5 | 6 | "name":"Gluten-Free", 7 | 8 | "type":"allergy", 9 | 10 | }, 11 | { 12 | 13 | "name":"Peanut-Free", 14 | 15 | "type":"allergy", 16 | 17 | }, 18 | { 19 | 20 | "name":"Seafood-Free", 21 | 22 | "type":"allergy", 23 | 24 | }, 25 | { 26 | 27 | "name":"Sesame-Free", 28 | 29 | "type":"allergy", 30 | 31 | }, 32 | { 33 | 34 | "name":"Soy-Free", 35 | 36 | "type":"allergy", 37 | 38 | }, 39 | { 40 | 41 | "name":"Dairy-Free", 42 | 43 | "type":"allergy", 44 | 45 | }, 46 | { 47 | 48 | "name":"Egg-Free", 49 | 50 | "type":"allergy", 51 | 52 | }, 53 | { 54 | 55 | "name":"Sulfite-Free", 56 | 57 | "type":"allergy", 58 | 59 | }, 60 | { 61 | 62 | "name":"Tree Nut-Free", 63 | 64 | "type":"allergy", 65 | 66 | }, 67 | { 68 | 69 | "name":"Wheat-Free", 70 | 71 | "type":"allergy", 72 | 73 | } 74 | ]; 75 | -------------------------------------------------------------------------------- /data/src/Ingredients/Ingredients.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | 9 | import data from '../../data/json-db-sample/' 10 | 11 | const items = []; 12 | for (let i=0; i < data.recipe[0].directions.length; i++){ 13 | items.push( 14 | <Item index={i}> 15 | {data.recipe[0].ingredients[i]} 16 | // {data.recipe[0].ingredients[i].qty} 17 | // {data.recipe[0].ingredients[i].measurements} 18 | // {data.recipe[0].ingredients[i].name} 19 | </Item> 20 | ); 21 | } 22 | 23 | const Ingredients = (props) => { 24 | return ( 25 | <Wrapper> 26 | <Title text="Ingredients" /> 27 | <List> 28 | {/* it's a loop */} 29 | {items} 30 | <Item> 31 | 2 tablespoons olive oil divided 32 | </Item> 33 | <Item> 34 | 1.25 pounds pork tenderloin excess fat and silver skin removed 35 | </Item> 36 | <Item> 37 | 0.5 small red onion cut into long slivers 38 | </Item> 39 | <Item> 40 | 8 ounces fresh cherries pitted and halved 41 | </Item> 42 | <Item> 43 | 0.5 cup low-sodium chicken broth 44 | </Item> 45 | <Button> 46 | Button Title 47 | </Button> 48 | 49 | </List> 50 | </Wrapper> 51 | ); 52 | }; 53 | 54 | export default Ingredients; 55 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/recipes/recipes.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | const get = () => { 4 | 5 | var data = [ 6 | { 7 | 8 | title: "Crock Pot Roast12", 9 | directions: [ 10 | "Place beef roast in crock pot.", 11 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 12 | "Pour the water around the roast.", 13 | "Cook on low for 7-9 hours." 14 | ], 15 | prep_time :"30min", 16 | total_time :"3h", 17 | recipe_yield :"8", 18 | img: "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 19 | "url": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 20 | 21 | }, 22 | { 23 | 24 | title: "Crock Pot Roast1", 25 | img: "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 26 | url: "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 27 | directions: [ 28 | "Place beef roast in crock pot.", 29 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 30 | "Pour the water around the roast.", 31 | "Cook on low for 7-9 hours." 32 | ], 33 | prep_time :"PT30M", 34 | total_time :"PT3H", 35 | recipe_yield :"8", 36 | 37 | } 38 | ]; 39 | 40 | return data; 41 | 42 | }; 43 | -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/simple-recipe-1.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | "id" : "1989", 6 | "name" : "Crock Pot Roast", 7 | "ingredients": [ 8 | { 9 | "quantity": "1", 10 | "name": " beef roast", 11 | "department": "Meat" 12 | }, 13 | { 14 | "quantity": "1 package", 15 | "name": "brown gravy mix", 16 | "department": "Baking" 17 | }, 18 | { 19 | "quantity": "1 package", 20 | "name": "dried Italian salad dressing mix", 21 | "department": "Condiments" 22 | }, 23 | { 24 | "quantity": "1 package", 25 | "name": "dry ranch dressing mix", 26 | "department": "Condiments" 27 | }, 28 | { 29 | "quantity": "1/2 cup", 30 | "name": "water", 31 | "department": "Drinks" 32 | } 33 | ], 34 | "directions": [ 35 | "Place beef roast in crock pot.", 36 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 37 | "Pour the water around the roast.", 38 | "Cook on low for 7-9 hours." 39 | ], 40 | 41 | "prepTime" :"30min", 42 | "totalTime" :"3h", 43 | "recipeYield" :"8", 44 | 45 | "imageURL": "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 46 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208" 47 | }; 48 | -------------------------------------------------------------------------------- /src/components/GroceryList/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {View} from 'react-native'; 3 | import {List, ListItem} from "react-native-elements"; 4 | import { Entypo } from '@expo/vector-icons'; 5 | 6 | 7 | import GroceryListItem from './GroceryListItem'; 8 | 9 | 10 | import styles, {titleStyles} from './styles'; 11 | 12 | const listItem = [ 13 | { 14 | id : 1, 15 | name: 'Beverages', 16 | }, 17 | { 18 | id : 2, 19 | name: 'Diary', 20 | }, 21 | { 22 | id : 3, 23 | name: 'DRY GOODS', 24 | } 25 | ]; 26 | 27 | class GroceryList extends Component { 28 | render() { 29 | return( 30 | <View style={styles.container}> 31 | <View style={styles.row}> 32 | <List containerStyle={styles.listContainerStyle}> 33 | <ListItem 34 | key={'0'} 35 | title='Recipes Calendar' 36 | titleStyle={titleStyles.titleStyle} 37 | leftIcon={<Entypo color ='red' name= 'calendar' style={titleStyles.leftIcon} />} 38 | hideChevron={true} 39 | containerStyle={styles.listItemContainerStyle} 40 | /> 41 | { 42 | listItem.map((item, index) => ( 43 | <GroceryListItem name={item.name} 44 | key={index} 45 | /> 46 | )) 47 | } 48 | </List> 49 | </View> 50 | </View> 51 | ); 52 | } 53 | } 54 | 55 | export default GroceryList; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RecipeApp", 3 | "version": "0.1.0", 4 | "private": true, 5 | "devDependencies": { 6 | "babel-preset-react-native": "^4.0.1", 7 | "eslint-config-prettier": "^3.3.0", 8 | "eslint-config-rallycoding": "^3.2.0", 9 | "jest": "^23.6.0", 10 | "jest-expo": "~30.0.0", 11 | "prettier": "^1.15.3", 12 | "react-test-renderer": "^16.6.1" 13 | }, 14 | "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js", 15 | "scripts": { 16 | "start": "expo start", 17 | "eject": "expo eject", 18 | "android": "expo android", 19 | "ios": "expo ios", 20 | "test": "jest", 21 | "lint": "eslint src" 22 | }, 23 | "jest": { 24 | "preset": "jest-expo" 25 | }, 26 | "dependencies": { 27 | "@expo/vector-icons": "^8.0.0", 28 | "@groceristar/groceristar-fetch": "^1.1.33", 29 | "expo": "^27.1.0", 30 | "expo-cli": "^2.6.14", 31 | "lodash": "^4.17.11", 32 | "native-base": "^2.8.2", 33 | "path": "^0.12.7", 34 | "raven-js": "^3.27.0", 35 | "react": "16.6.3", 36 | "react-native": "^0.57.8", 37 | "react-native-animatable": "^1.3.0", 38 | "react-native-checkbox": "^2.0.0", 39 | "react-native-collapsible": "^1.4.0", 40 | "react-native-elements": "^0.19.1", 41 | "react-native-loader": "^1.2.1", 42 | "react-native-material-dropdown": "^0.11.1", 43 | "react-native-status-bar-height": "^2.2.0", 44 | "react-native-typography": "^1.4.0", 45 | "react-navigation": "^3.0.9" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /data/src/Router/Router-as-example.js: -------------------------------------------------------------------------------- 1 | import { Router, Route, IndexRoute, browserHistory } from 'react-router'; 2 | 3 | 4 | const Rrouter = ({}) => ( 5 | 6 | <Router history={ browserHistory }> 7 | <Route path="/" component={ App }> 8 | <IndexRoute name="index" component={ Index } /> 9 | <Route name="documents" path="/documents" component={ Documents } onEnter={ authenticate } /> 10 | <Route name="newDocument" path="/documents/new" component={ NewDocument } onEnter={ authenticate } /> 11 | <Route name="editDocument" path="/documents/:_id/edit" component={ EditDocument } onEnter={ authenticate } /> 12 | <Route name="viewDocument" path="/documents/:_id" component={ ViewDocument } onEnter={ authenticate } /> 13 | <Route name="login" path="/login" component={ Login } /> 14 | <Route name="recover-password" path="/recover-password" component={ RecoverPassword } /> 15 | <Route name="reset-password" path="/reset-password/:token" component={ ResetPassword } /> 16 | <Route name="signup" path="/signup" component={ Signup } /> 17 | <Route name="giftSubscription" path="/gift-subscription" component={ GiftSubscription } /> 18 | <Route name="sampleMenu" path="/sample-menu" component={ SampleMenu } /> 19 | <Route name="blog" path="/blog" component={ Blog } /> 20 | <Route name="weeklyMenu" path="/weekly-menu" component={ WeeklyMenu } /> 21 | <Route path="*" component={ NotFound } /> 22 | </Route> 23 | </Router> 24 | ) 25 | -------------------------------------------------------------------------------- /src/components/Directions/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import {View, Text, StyleSheet} from 'react-native'; 3 | import {getStatusBarHeight} from "react-native-status-bar-height"; 4 | import { List, ListItem } from 'react-native-elements'; 5 | 6 | import { getAllDirectionsList } from '../../config/HelperFunctions'; 7 | import directions from '../../assets/data/directions'; 8 | import styles from './styles'; 9 | 10 | class DirectionsNew extends Component { 11 | // static getDerivedStateFromProps (props, state) { 12 | // getAllDirectionsList(); 13 | // return null; 14 | // } 15 | 16 | state = {}; 17 | 18 | componentDidMount () { 19 | getAllDirectionsList(); 20 | } 21 | 22 | render () { 23 | return ( 24 | <View> 25 | 26 | </View> 27 | ); 28 | } 29 | } 30 | 31 | const Directions = () => { 32 | return ( 33 | <View style={styles.container}> 34 | <View style={styles.row}> 35 | <List containerStyle={styles.listContainerStyle}> 36 | { 37 | directions[0].directions.map((item,index) => ( 38 | <ListItem 39 | index={index} 40 | key={index} 41 | title={(index + 1) + '. ' + item} 42 | containerStyle={styles.listItemContainerStyle} 43 | hideChevron={true} 44 | /> 45 | )) 46 | } 47 | </List> 48 | </View> 49 | </View> 50 | ) 51 | }; 52 | 53 | export default Directions; 54 | // export default DirectionsNew; -------------------------------------------------------------------------------- /src/components/Login/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | alignItems: 'center', 7 | justifyContent: 'center', 8 | flexDirection: 'column' 9 | }, 10 | header: { 11 | marginTop: "15%" 12 | }, 13 | head: { 14 | fontSize: 40, 15 | color: "#000", 16 | marginBottom: 20 17 | }, 18 | login: { 19 | width:340, 20 | marginTop: 30, 21 | backgroundColor: "#876ceb", 22 | alignItems: 'center', 23 | justifyContent: 'center', 24 | borderRadius:10, 25 | paddingBottom:10, 26 | paddingTop:10, 27 | }, 28 | loginText: { 29 | color: '#fff', 30 | fontSize: 18, 31 | fontFamily: 'Roboto' 32 | }, 33 | loginInput: { 34 | width:"95%", 35 | fontSize: 15, 36 | fontFamily: 'Roboto', 37 | backgroundColor:"#fff", 38 | paddingLeft:"5%", 39 | borderColor:"#D3D3D3", 40 | borderWidth:0.5, 41 | paddingTop:10, 42 | paddingBottom:10 43 | }, 44 | textBoxInput:{ 45 | flexDirection: 'row', 46 | flexWrap: 'wrap' 47 | }, 48 | background:{ 49 | width: "100%", 50 | height: "100%" 51 | }, 52 | register:{ 53 | marginTop: 50, 54 | marginLeft: 100 55 | }, 56 | registerText:{ 57 | color: "#fff", 58 | fontSize:15 59 | } 60 | }); 61 | export default styles; -------------------------------------------------------------------------------- /src/components/Signup/styles.js: -------------------------------------------------------------------------------- 1 | import {StyleSheet} from "react-native"; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flex: 1, 6 | alignItems: 'center', 7 | justifyContent: 'center', 8 | flexDirection: 'column' 9 | }, 10 | header: { 11 | marginTop: "15%" 12 | }, 13 | head: { 14 | fontSize: 40, 15 | color: "#000", 16 | marginBottom: 20 17 | }, 18 | signup: { 19 | width:340, 20 | marginTop: 30, 21 | backgroundColor: "#876ceb", 22 | alignItems: 'center', 23 | justifyContent: 'center', 24 | borderRadius:10, 25 | paddingBottom:10, 26 | paddingTop:10, 27 | }, 28 | signupText: { 29 | color: '#fff', 30 | fontSize: 18, 31 | fontFamily: 'Roboto' 32 | }, 33 | signupInput: { 34 | width:"95%", 35 | fontSize: 15, 36 | fontFamily: 'Roboto', 37 | backgroundColor:"#fff", 38 | paddingLeft:"5%", 39 | borderColor:"#D3D3D3", 40 | borderWidth:0.5, 41 | paddingTop:10, 42 | paddingBottom:10 43 | }, 44 | textBoxInput:{ 45 | flexDirection: 'row', 46 | flexWrap: 'wrap' 47 | }, 48 | background:{ 49 | width: "100%", 50 | height: "100%" 51 | }, 52 | login:{ 53 | marginTop: 50, 54 | marginLeft: 150 55 | }, 56 | loginText:{ 57 | color: "#fff", 58 | fontSize:15 59 | } 60 | }); 61 | export default styles; -------------------------------------------------------------------------------- /data/src/GroceryList/GroceryList.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | <Category index={i} id="{category.id}" link="{grocery.id}/{category.id}"> 14 | {data.recipe[0].directions[i]} 15 | <Icon src="arrow" /> 16 | {category.name} 17 | </Item> 18 | ); 19 | } 20 | 21 | const GroceryList = (props) => { 22 | return ( 23 | 24 | <GroceryList> 25 | <Title> 26 | <Icon src="calendar-icon" /> 27 | Recipe Calendar 28 | 29 | 30 | {/* this is a loop */} 31 | {items} 32 | 33 | 34 | {category.name} 35 | 36 | 37 | 38 | {category.name} 39 | 40 | 41 | 42 | {category.name} 43 | 44 | 45 | 46 | {category.name} 47 | 48 | 49 | 50 | 51 | ); 52 | }; 53 | 54 | export default GroceryList; 55 | -------------------------------------------------------------------------------- /src/components/GroceryList/GroceryList.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | {data.recipe[0].directions[i]} 15 | 16 | {category.name} 17 | 18 | ); 19 | } 20 | 21 | const GroceryList = (props) => { 22 | return ( 23 | 24 | 25 | 26 | <Icon src="calendar-icon" /> 27 | Recipe Calendar 28 | 29 | 30 | {/* this is a loop */} 31 | {items} 32 | 33 | 34 | {category.name} 35 | 36 | 37 | 38 | {category.name} 39 | 40 | 41 | 42 | {category.name} 43 | 44 | 45 | 46 | {category.name} 47 | 48 | 49 | 50 | 51 | ); 52 | }; 53 | 54 | export default GroceryList; 55 | -------------------------------------------------------------------------------- /data/img/intro/fried-egg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 10 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /data/src/Login/index.html: -------------------------------------------------------------------------------- 1 | 2 | 4 |

5 | Plan It Dinner 6 |

7 |

8 | Welcome back! 9 |

10 | 11 | 12 |
13 |
14 | 15 | 19 | 23 | 24 |
25 | 28 |
29 | 30 | 31 | 35 | Or create an account 36 | 37 |
38 |
39 | -------------------------------------------------------------------------------- /data/json-db-sample/from-recipe-api-server/search/nutritions.js: -------------------------------------------------------------------------------- 1 | 2 | var data = [{ 3 | type: "Vitamins", 4 | items: [ 5 | "Vitamin A (retinol)", 6 | "Vitamin B1 (thiamin)", 7 | "Vitamin B2 (riboflavin)", 8 | "Vitamin B3 (niacin)", 9 | "Vitamin B5 (panthotenic acid)", 10 | "Vitamin B6 (pyridoxin)", 11 | "Vitamin B7 (biotin)", 12 | "Vitamin B9 (folic acid, folate)", 13 | "Vitamin B12 (cobalamin)", 14 | "Vitamin C (ascorbic acid)", 15 | "Vitamin E (tocopherol)", 16 | "Vitamin K (naphthoquinones)", 17 | "Choline (vitamin Bp) [1,2,3]" 18 | ] 19 | }, 20 | { 21 | type: "Minerals", 22 | items: [ 23 | "Calcium", 24 | "Chloride", 25 | "Chromium", 26 | "Copper", 27 | "Iodine", 28 | "Iron", 29 | "Magnesium", 30 | "Manganese", 31 | "Molybdenum", 32 | "Phosphorus", 33 | "Potassium", 34 | "Selenium", 35 | "Sodium", 36 | "Zinc" 37 | ] 38 | }, 39 | { 40 | type: "Amino acids", 41 | items: [ 42 | "Isoleucine", 43 | "Histidine", 44 | "Leucine", 45 | "Lysine", 46 | "Methionine", 47 | "Phenylalanine", 48 | "Tryptophan", 49 | "Threonine", 50 | "Valine" 51 | ] 52 | }, 53 | { 54 | type:"Fatty acids" , 55 | items: [ 56 | "Alpha-linolenic acid (ALA)", 57 | "Linoleic acid" 58 | ] 59 | } 60 | ]; 61 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/search/nutritions.js: -------------------------------------------------------------------------------- 1 | 2 | var data = [{ 3 | type: "Vitamins", 4 | items: [ 5 | "Vitamin A (retinol)", 6 | "Vitamin B1 (thiamin)", 7 | "Vitamin B2 (riboflavin)", 8 | "Vitamin B3 (niacin)", 9 | "Vitamin B5 (panthotenic acid)", 10 | "Vitamin B6 (pyridoxin)", 11 | "Vitamin B7 (biotin)", 12 | "Vitamin B9 (folic acid, folate)", 13 | "Vitamin B12 (cobalamin)", 14 | "Vitamin C (ascorbic acid)", 15 | "Vitamin E (tocopherol)", 16 | "Vitamin K (naphthoquinones)", 17 | "Choline (vitamin Bp) [1,2,3]" 18 | ] 19 | }, 20 | { 21 | type: "Minerals", 22 | items: [ 23 | "Calcium", 24 | "Chloride", 25 | "Chromium", 26 | "Copper", 27 | "Iodine", 28 | "Iron", 29 | "Magnesium", 30 | "Manganese", 31 | "Molybdenum", 32 | "Phosphorus", 33 | "Potassium", 34 | "Selenium", 35 | "Sodium", 36 | "Zinc" 37 | ] 38 | }, 39 | { 40 | type: "Amino acids", 41 | items: [ 42 | "Isoleucine", 43 | "Histidine", 44 | "Leucine", 45 | "Lysine", 46 | "Methionine", 47 | "Phenylalanine", 48 | "Tryptophan", 49 | "Threonine", 50 | "Valine" 51 | ] 52 | }, 53 | { 54 | type:"Fatty acids" , 55 | items: [ 56 | "Alpha-linolenic acid (ALA)", 57 | "Linoleic acid" 58 | ] 59 | } 60 | ]; 61 | -------------------------------------------------------------------------------- /src/components/GroceryListDepartment/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {View, FlatList, Text} from "react-native"; 3 | import {List, 4 | // ListItem, 5 | // CheckBox, 6 | Icon} from "react-native-elements"; 7 | import { Container, Header, Content, ListItem, CheckBox, Body } from 'native-base'; 8 | 9 | import directions from "../../assets/data/directions"; 10 | import styles from './styles'; 11 | 12 | class GroceryListDepartment extends Component { 13 | 14 | state = { 15 | checked : [], 16 | directions : directions[0].directions 17 | }; 18 | 19 | componentDidMount () { 20 | console.log(this.state.directions); 21 | } 22 | 23 | checkItem (itemID) { 24 | const { checked } = this.state; 25 | 26 | if (checked.includes(itemID)) { 27 | this.setState({ 28 | checked : this.state.checked.filter((id) => { 29 | return id !== itemID; 30 | }) 31 | }); 32 | } else { 33 | this.setState({ 34 | checked : [ 35 | ...checked, 36 | itemID 37 | ] 38 | }); 39 | } 40 | } 41 | 42 | render() { 43 | return ( 44 | 45 | 46 | 47 | 48 | { 49 | this.state.directions.map((item,index) => ( 50 | 51 | 52 | 53 | {item} 54 | 55 | 56 | )) 57 | } 58 | 59 | 60 | 61 | 62 | ); 63 | } 64 | } 65 | 66 | export default GroceryListDepartment; -------------------------------------------------------------------------------- /data/src/RecipeCalendar/RecipeCalendar.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | 14 | 15 | 16 | 17 | 18 | {data.day[i].name} 19 | 20 | 21 | 22 | 23 | {/* 24 | Letter is just a link to main recipe. 25 | Like first recipe is weekly menu list is came with `A` 26 | Second letter came with `B` 27 | We don't need to have a custom tag for recipe letter. 28 | this just for a sample purposes. 29 | */} 30 | 31 | 32 | ); 33 | } 34 | 35 | const RecipeCalendar = (props) => { 36 | return ( 37 | 38 | 39 | <Days> 40 | {/* this is a loop */} 41 | {items} 42 | <Day> 43 | <Icon name="nutrition"></Icon> 44 | {day.name} 45 | </Day> 46 | <Body> 47 | <RecipeTitle></RecipeTitle> 48 | {/* 49 | Letter is just a link to main recipe. 50 | Like first recipe is weekly menu list is came with `A` 51 | Second letter came with `B` 52 | We don't need to have a custom tag for recipe letter. 53 | this just for a sample purposes. 54 | */} 55 | <RecipeLetter></RecipeLetter> 56 | </Body> 57 | </Days> 58 | </Calendar> 59 | ); 60 | }; 61 | 62 | export default RecipeCalendar; 63 | -------------------------------------------------------------------------------- /src/components/Home/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | import { Constants } from 'expo'; 3 | import { getStatusBarHeight } from 'react-native-status-bar-height'; 4 | 5 | const styles = StyleSheet.create({ 6 | container : { 7 | paddingTop: getStatusBarHeight(), 8 | }, 9 | item: { 10 | paddingHorizontal: 16, 11 | paddingVertical: 12, 12 | }, 13 | itemContainer: { 14 | backgroundColor: '#fff', 15 | borderBottomWidth: StyleSheet.hairlineWidth, 16 | borderBottomColor: '#ddd', 17 | }, 18 | image: { 19 | width: 120, 20 | height: 120, 21 | alignSelf: 'center', 22 | marginBottom: 20, 23 | resizeMode: 'contain', 24 | }, 25 | statusBarUnderlay: { 26 | backgroundColor: '#673ab7', 27 | position: 'absolute', 28 | top: 0, 29 | left: 0, 30 | right: 0, 31 | height: Constants.statusBarHeight, 32 | }, 33 | title: { 34 | fontSize: 16, 35 | fontWeight: 'bold', 36 | color: '#444', 37 | }, 38 | description: { 39 | fontSize: 13, 40 | color: '#999', 41 | }, 42 | backgroundUnderlay: { 43 | backgroundColor: '#673ab7', 44 | position: 'absolute', 45 | top: -100, 46 | height: 300, 47 | left: 0, 48 | right: 0, 49 | }, 50 | bannerContainer: { 51 | // backgroundColor: '#673ab7', 52 | alignItems: 'center', 53 | }, 54 | banner: { 55 | flexDirection: 'row', 56 | alignItems: 'center', 57 | padding: 16, 58 | }, 59 | bannerImage: { 60 | width: 36, 61 | height: 36, 62 | resizeMode: 'contain', 63 | tintColor: '#fff', 64 | margin: 8, 65 | }, 66 | bannerTitle: { 67 | fontSize: 18, 68 | fontWeight: '200', 69 | color: '#fff', 70 | marginVertical: 8, 71 | marginRight: 5, 72 | }, 73 | }); 74 | 75 | export default styles; -------------------------------------------------------------------------------- /data/src/GroceryListSettings/GroceryListSettings.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | <Item index={i} title={data.recipes[i].title}> 14 | <Servings recipe-id="{recipe.id}" grocery-id="{grocery.id}"> 15 | {/* it's a select with numbers 1-4*/} 16 | </Servings> 17 | <Toggle>Disable Recipe</Toggle> 18 | </Item> 19 | ); 20 | } 21 | 22 | const GroceryListSettings = (props) => { 23 | return ( 24 | <SettingsForm> 25 | <Title text="Grocery List Settings" /> 26 | <Button link="/{grocery.id}"> 27 | Go to Grocery List 28 | </Button> 29 | <List> 30 | 31 | {/* this is a loop */} 32 | {items} 33 | <Item title="Pork Tenderloin with Roasted Cherries"> 34 | <Servings recipe-id="{recipe.id}" grocery-id="{grocery.id}"> 35 | {/* it's a select with numbers 1-4*/} 36 | </Servings> 37 | <Toggle>Disable Recipe</Toggle> 38 | </Item> 39 | <Item title="Beef, Red Pepper and Snow Pea Stir-Fry"> 40 | <Servings recipe-id="{recipe.id}" grocery-id="{grocery.id}"> 41 | {/* it's a select with numbers 1-4*/} 42 | </Servings> 43 | <Toggle>Disable Recipe</Toggle> 44 | </Item> 45 | <Item title="Meatball Sliders"> 46 | <Servings recipe-id="{recipe.id}" grocery-id="{grocery.id}"> 47 | {/* it's a select with numbers 1-4*/} 48 | </Servings> 49 | <Toggle>Disable Recipe</Toggle> 50 | </Item> 51 | 52 | </List> 53 | </SettingsForm> 54 | ); 55 | }; 56 | 57 | export default GroceryListSettings; 58 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/search/holidays.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | var holidays = [ 4 | { 5 | 6 | "name":"Christmas", 7 | "type":"holiday", 8 | 9 | }, 10 | { 11 | 12 | "name":"Thanksgiving", 13 | "type":"holiday", 14 | 15 | }, 16 | { 17 | 18 | "name":"Summer", 19 | "type":"holiday", 20 | 21 | }, 22 | { 23 | 24 | "name":"Fall", 25 | "type":"holiday", 26 | 27 | }, 28 | { 29 | 30 | "name":"New Year", 31 | "type":"holiday", 32 | 33 | }, 34 | { 35 | 36 | "name":"Game Day", 37 | "type":"holiday", 38 | 39 | }, 40 | { 41 | 42 | "name":"Winter", 43 | "type":"holiday", 44 | 45 | }, 46 | { 47 | 48 | "name":"Spring", 49 | "type":"holiday", 50 | 51 | }, 52 | { 53 | 54 | "name":"Halloween", 55 | "type":"holiday", 56 | 57 | }, 58 | { 59 | 60 | "name":"Valentine's Day", 61 | "type":"holiday", 62 | 63 | }, 64 | { 65 | 66 | "name":"Hanukkah", 67 | "type":"holiday", 68 | 69 | }, 70 | { 71 | 72 | "name":"Passover", 73 | "type":"holiday", 74 | 75 | }, 76 | { 77 | 78 | "name":"Easter", 79 | "type":"holiday", 80 | 81 | }, 82 | { 83 | 84 | "name":"St. Patrick's Day", 85 | "type":"holiday", 86 | 87 | }, 88 | { 89 | 90 | "name":"Chinese New Year", 91 | "type":"holiday", 92 | 93 | }, 94 | { 95 | 96 | "name":"4th of July", 97 | "type":"holiday", 98 | 99 | } 100 | ]; 101 | -------------------------------------------------------------------------------- /src/components/GroceryListDepartment/temp.js: -------------------------------------------------------------------------------- 1 | import {CheckBox, List} from "react-native-elements"; 2 | import React from "react"; 3 | import styles from "./styles"; 4 | import directions from "../../assets/data/directions"; 5 | import {View} from "react-native"; 6 | 7 | {/*<ListItem*/} 8 | {/*index={index}*/} 9 | {/*key={index}*/} 10 | {/*// title={item}*/} 11 | {/*containerStyle={styles.listItemContainerStyle}*/} 12 | {/*hideChevron={true}*/} 13 | {/*style={{*/} 14 | {/*backgroundColor : 'green'*/} 15 | {/*}}*/} 16 | {/*leftIcon={*/} 17 | {/*<CheckBox*/} 18 | {/*title={item}*/} 19 | {/*checkedIcon='dot-circle-o'*/} 20 | {/*uncheckedIcon='circle-o'*/} 21 | {/*checked={false}*/} 22 | {/*containerStyle={{*/} 23 | {/*backgroundColor : 'red'*/} 24 | {/*}}*/} 25 | {/*/>*/} 26 | {/*}*/} 27 | {/*/>*/} 28 | 29 | 30 | 31 | <CheckBox 32 | title={item} 33 | checkedIcon='dot-circle-o' 34 | uncheckedIcon='circle-o' 35 | checked={true} 36 | containerStyle={{ 37 | backgroundColor : 'red' 38 | }} 39 | /> 40 | 41 | 42 | 43 | <List containerStyle={styles.listContainerStyle}> 44 | { 45 | directions[0].directions.map((item,index) => ( 46 | <View style={styles.checkBoxContainer} 47 | key={index} 48 | > 49 | <CheckBox 50 | title={item} 51 | label={item} 52 | value={index} 53 | checkedIcon='dot-circle-o' 54 | uncheckedIcon='circle-o' 55 | checked={this.state.checked.includes(index)} 56 | containerStyle={{ 57 | // backgroundColor : 'red' 58 | // fontWeight : '200', 59 | // padding: 0, 60 | }} 61 | onPress={() => this.checkItem(index)} 62 | textStyle={{ 63 | fontWeight : '300' 64 | }} 65 | style={{ 66 | backgroundColor : 'green' 67 | }} 68 | /> 69 | </View> 70 | )) 71 | } 72 | </List> 73 | 74 | -------------------------------------------------------------------------------- /data/img/intro/milk.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="iso-8859-1"?> 2 | <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 57 57" style="enable-background:new 0 0 57 57;" xml:space="preserve"> 6 | <g> 7 | <polygon style="fill:#C6C6C6;" points="26,57 12,51 12,18 26,23 "/> 8 | <polygon style="fill:#E6E6E6;" points="45,52 26,57 26,23 45,18 "/> 9 | <polygon style="fill:#E2E2E2;" points="38,4 19,8 19,4 38,0 "/> 10 | <polygon style="fill:#D1D1D1;" points="26,23 12,18 19,8 19,8 "/> 11 | <polygon style="fill:#EAEAEA;" points="45,18 26,23 19,8 38,4 "/> 12 | <polygon style="fill:#3DABEF;" points="45,37 26,52 26,37 45,21 "/> 13 | <polygon style="fill:#2B9DD6;" points="12,46 26,52 26,37 12,31 "/> 14 | <path style="fill:#FFFFFF;" d="M34.215,16.875L34.215,16.875c-2.217,0.58-2.956-1.423-3.305-2.753l0,0 15 | c-0.348-1.33-0.684-3.439,1.533-4.019l0,0c2.217-0.58,2.956,1.423,3.304,2.753v0C36.095,14.186,36.432,16.295,34.215,16.875z"/> 16 | <polygon style="fill:#EDEDED;" points="34,4.842 36,4.421 36,0.421 34,0.842 "/> 17 | <polygon style="fill:#EDEDED;" points="30,5.684 32,5.263 32,1.263 30,1.684 "/> 18 | <polygon style="fill:#EDEDED;" points="26,6.526 28,6.105 28,2.105 26,2.526 "/> 19 | <polygon style="fill:#EDEDED;" points="22,7.368 24,6.947 24,2.947 22,3.368 "/> 20 | </g> 21 | <g> 22 | </g> 23 | <g> 24 | </g> 25 | <g> 26 | </g> 27 | <g> 28 | </g> 29 | <g> 30 | </g> 31 | <g> 32 | </g> 33 | <g> 34 | </g> 35 | <g> 36 | </g> 37 | <g> 38 | </g> 39 | <g> 40 | </g> 41 | <g> 42 | </g> 43 | <g> 44 | </g> 45 | <g> 46 | </g> 47 | <g> 48 | </g> 49 | <g> 50 | </g> 51 | </svg> 52 | -------------------------------------------------------------------------------- /data/json-db-sample/from-recipe-api-server/grocery/departments.js: -------------------------------------------------------------------------------- 1 | 2 | var data = [ 3 | { 4 | 5 | name: "Fresh vegetables", 6 | type: 'food' 7 | }, 8 | { 9 | 10 | name: "Condiments / Sauces", 11 | type: 'food' 12 | }, 13 | { 14 | 15 | name: "Dairy", 16 | type: 'food' 17 | },{ 18 | 19 | name: "Cheese", 20 | type: 'food' 21 | },{ 22 | 23 | name: "Meat", 24 | type: 'food' 25 | },{ 26 | 27 | name: "Seafood", 28 | type: 'food' 29 | },{ 30 | 31 | name: "Beverages", 32 | type: 'food' 33 | },{ 34 | 35 | name: "Baked goods", 36 | type: 'food' 37 | },{ 38 | 39 | name: "Baking", 40 | type: 'food' 41 | },{ 42 | 43 | name: "Snacks", 44 | type: 'food' 45 | },{ 46 | 47 | name: "Themed meals", 48 | type: 'food' 49 | },{ 50 | 51 | name: "Baby stuff", 52 | type: 'non-food' 53 | },{ 54 | 55 | name: "Pets", 56 | type: 'non-food' 57 | },{ 58 | 59 | name: "Fresh fruits", 60 | type: 'food' 61 | },{ 62 | 63 | name: "Refrigerated items", 64 | type: 'food' 65 | },{ 66 | 67 | name: "Frozen", 68 | type: 'food' 69 | },{ 70 | 71 | name: "Various groceries", 72 | type: 'food' 73 | },{ 74 | 75 | name: "Canned foods", 76 | type: 'food' 77 | },{ 78 | 79 | name: "Spices & herbs", 80 | type: 'food' 81 | },{ 82 | 83 | name: "Personal care", 84 | type: 'household' 85 | },{ 86 | 87 | name: "Medicine", 88 | type: 'household' 89 | },{ 90 | 91 | name: "Kitchen", 92 | type: 'household' 93 | },{ 94 | 95 | name: "Other", 96 | type: 'household' 97 | },{ 98 | 99 | name: "Cleaning products", 100 | type: 'household' 101 | },{ 102 | 103 | name: "Office supplies", 104 | type: 'household' 105 | },{ 106 | 107 | name: "Other stuff", 108 | type: 'household' 109 | },{ 110 | 111 | name: "To-do list", 112 | type: 'household' 113 | } 114 | ]; 115 | 116 | return data; 117 | 118 | }; 119 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/grocery/departments.js: -------------------------------------------------------------------------------- 1 | 2 | var data = [ 3 | { 4 | 5 | name: "Fresh vegetables", 6 | type: 'food' 7 | }, 8 | { 9 | 10 | name: "Condiments / Sauces", 11 | type: 'food' 12 | }, 13 | { 14 | 15 | name: "Dairy", 16 | type: 'food' 17 | },{ 18 | 19 | name: "Cheese", 20 | type: 'food' 21 | },{ 22 | 23 | name: "Meat", 24 | type: 'food' 25 | },{ 26 | 27 | name: "Seafood", 28 | type: 'food' 29 | },{ 30 | 31 | name: "Beverages", 32 | type: 'food' 33 | },{ 34 | 35 | name: "Baked goods", 36 | type: 'food' 37 | },{ 38 | 39 | name: "Baking", 40 | type: 'food' 41 | },{ 42 | 43 | name: "Snacks", 44 | type: 'food' 45 | },{ 46 | 47 | name: "Themed meals", 48 | type: 'food' 49 | },{ 50 | 51 | name: "Baby stuff", 52 | type: 'non-food' 53 | },{ 54 | 55 | name: "Pets", 56 | type: 'non-food' 57 | },{ 58 | 59 | name: "Fresh fruits", 60 | type: 'food' 61 | },{ 62 | 63 | name: "Refrigerated items", 64 | type: 'food' 65 | },{ 66 | 67 | name: "Frozen", 68 | type: 'food' 69 | },{ 70 | 71 | name: "Various groceries", 72 | type: 'food' 73 | },{ 74 | 75 | name: "Canned foods", 76 | type: 'food' 77 | },{ 78 | 79 | name: "Spices & herbs", 80 | type: 'food' 81 | },{ 82 | 83 | name: "Personal care", 84 | type: 'household' 85 | },{ 86 | 87 | name: "Medicine", 88 | type: 'household' 89 | },{ 90 | 91 | name: "Kitchen", 92 | type: 'household' 93 | },{ 94 | 95 | name: "Other", 96 | type: 'household' 97 | },{ 98 | 99 | name: "Cleaning products", 100 | type: 'household' 101 | },{ 102 | 103 | name: "Office supplies", 104 | type: 'household' 105 | },{ 106 | 107 | name: "Other stuff", 108 | type: 'household' 109 | },{ 110 | 111 | name: "To-do list", 112 | type: 'household' 113 | } 114 | ]; 115 | 116 | return data; 117 | 118 | }; 119 | -------------------------------------------------------------------------------- /data/img/intro/apple.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="iso-8859-1"?> 2 | <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 56.673 56.673" style="enable-background:new 0 0 56.673 56.673;" xml:space="preserve"> 6 | <g> 7 | <path style="fill:#D13834;" d="M31.483,16.213c-2.065,0.511-4.227,0.511-6.292,0c-10.756-2.66-19.762-1.64-19.658,18.643 8 | c0.053,10.39,9.783,23.862,20.009,21.557c1.834-0.413,3.755-0.413,5.589,0c10.226,2.305,19.956-11.167,20.009-21.557 9 | C51.244,14.574,42.239,13.553,31.483,16.213z"/> 10 | <path style="fill:#F75B57;" d="M10.533,29.674c-0.553,0-1-0.448-1-1c0-5.514,4.037-10,9-10c0.553,0,1,0.448,1,1s-0.447,1-1,1 11 | c-3.859,0-7,3.589-7,8C11.533,29.226,11.085,29.674,10.533,29.674z"/> 12 | <path style="fill:#4C312C;" d="M28.265,19.999c-0.537,0-0.981-0.427-0.998-0.968c-0.135-4.232-1.761-9.545-5.922-11.764 13 | c-0.487-0.26-0.672-0.865-0.412-1.353c0.261-0.487,0.864-0.672,1.354-0.412c4.914,2.62,6.827,8.673,6.979,13.465 14 | c0.018,0.552-0.415,1.014-0.968,1.031C28.286,19.999,28.276,19.999,28.265,19.999z"/> 15 | <path style="fill:#994530;" d="M28.176,23.592c-1.68,0-3.261-0.655-4.45-1.845c-0.391-0.39-0.391-1.023,0-1.414 16 | s1.023-0.391,1.414,0c0.812,0.812,1.891,1.259,3.036,1.259s2.224-0.447,3.035-1.259c0.391-0.391,1.023-0.391,1.414,0 17 | c0.391,0.39,0.391,1.023,0,1.414C31.436,22.937,29.856,23.592,28.176,23.592z"/> 18 | <path style="fill:#659C35;" d="M27.305,13.04l0.609-4.086c0.643-4.315,4.031-7.703,8.346-8.346L40.345,0l-0.609,4.086 19 | c-0.643,4.315-4.031,7.703-8.346,8.346L27.305,13.04z"/> 20 | </g> 21 | <g> 22 | </g> 23 | <g> 24 | </g> 25 | <g> 26 | </g> 27 | <g> 28 | </g> 29 | <g> 30 | </g> 31 | <g> 32 | </g> 33 | <g> 34 | </g> 35 | <g> 36 | </g> 37 | <g> 38 | </g> 39 | <g> 40 | </g> 41 | <g> 42 | </g> 43 | <g> 44 | </g> 45 | <g> 46 | </g> 47 | <g> 48 | </g> 49 | <g> 50 | </g> 51 | </svg> 52 | -------------------------------------------------------------------------------- /data/img/intro/fish.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="iso-8859-1"?> 2 | <!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | viewBox="0 0 45.52 45.52" style="enable-background:new 0 0 45.52 45.52;" xml:space="preserve"> 6 | <g> 7 | <path style="fill:#698B9E;" d="M45.028,13.98c0.574-0.619,0.322-1.683-0.45-2.027c-1.798-0.8-1.061-3.459-2.564-3.318 8 | c-1.724,0.161-2.99-1.104-2.828-2.828c0.161-1.724-1.104-2.99-2.828-2.828c-1.724,0.161-0.044-2.519-2.828-2.828 9 | c0,0-1.945-0.751-2.13,1.111L31.371,8.52H20.164c-11.038,0-19.986,8.948-19.986,19.986l0,17.014l16.876,0 10 | c11.114,0,20.124-9.01,20.124-20.124l0-11.159l7.244,0.067C44.678,14.264,44.875,14.144,45.028,13.98z"/> 11 | <path style="fill:#5D7989;" d="M21.951,39.899h-2c0-7.72-6.28-14-14-14v-2C14.773,23.899,21.951,31.076,21.951,39.899z"/> 12 | <path style="fill:#5D7989;" d="M25.206,36.644h-2c0-7.72-6.28-14-14-14v-2C18.028,20.644,25.206,27.822,25.206,36.644z"/> 13 | <path style="fill:#5D7989;" d="M28.315,33.534h-2c0-7.72-6.28-14-14-14v-2C21.137,17.534,28.315,24.712,28.315,33.534z"/> 14 | <path style="fill:#5D7989;" d="M31.57,30.28h-2c0-7.72-6.28-14-14-14v-2C24.392,14.28,31.57,21.457,31.57,30.28z"/> 15 | <path style="fill:#546A79;" d="M14.824,9.263c-0.394-1.98-1.211-4.133-2.77-6.285c0,0-8.224,4.078-4.851,10.331 16 | C9.388,11.444,11.978,10.052,14.824,9.263z"/> 17 | <path style="fill:#546A79;" d="M36.819,29.131c-0.605,3.221-1.979,6.164-3.922,8.647c2.863,0.326,7.064,0.045,11.238-2.98 18 | C44.135,34.798,41.335,29.151,36.819,29.131z"/> 19 | <circle style="fill:#38454F;" cx="5.951" cy="33.384" r="2"/> 20 | </g> 21 | <g> 22 | </g> 23 | <g> 24 | </g> 25 | <g> 26 | </g> 27 | <g> 28 | </g> 29 | <g> 30 | </g> 31 | <g> 32 | </g> 33 | <g> 34 | </g> 35 | <g> 36 | </g> 37 | <g> 38 | </g> 39 | <g> 40 | </g> 41 | <g> 42 | </g> 43 | <g> 44 | </g> 45 | <g> 46 | </g> 47 | <g> 48 | </g> 49 | <g> 50 | </g> 51 | </svg> 52 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/recipes-nutrition.js: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "name": "Perfect Apple Pie", 4 | "author": "Gin Blanco", 5 | "image": "http://images.edge-generalmills.com/56459281-6fe6-4d9d-984f-385c9488d824.jpg", 6 | "description": "A classic apple pie takes a shortcut with easy Pillsbury® unroll-fill refrigerated pie crust.", 7 | "aggregateRating": { 8 | "@type": "AggregateRating", 9 | "ratingValue": "4.5", 10 | "reviewCount": "276", 11 | "bestRating": "5", 12 | "worstRating": "1" 13 | }, 14 | "prepTime": "PT30M", 15 | "totalTime": "PT3H", 16 | "recipeYield": "8", 17 | "nutrition": { 18 | "@type": "NutritionInformation", 19 | "servingSize": "1 medium slice", 20 | "calories": "230 calories", 21 | "fatContent": "1 g", 22 | "carbohydrateContent": "43 g", 23 | "cholesterolContent": "0 mg", 24 | "fiberContent": "1 g", 25 | "proteinContent": "1 g", 26 | "saturatedFatContent": "2 ½ g", 27 | "servingSize": "1 Serving", 28 | "sodiumContent": "200 mg", 29 | "sugarContent": "27 g", 30 | "transFatContent": "0 g" 31 | }, 32 | "recipeIngredient": [ 33 | "1 box Pillsbury™ refrigerated pie crusts, softened as directed on box", 34 | "6 cups thinly sliced, peeled apples (6 medium)", 35 | "3/4 cup sugar", 36 | "2 tablespoons all-purpose flour", 37 | "3/4 teaspoon ground cinnamon", 38 | "1/4 teaspoon salt", 39 | "1/8 teaspoon ground nutmeg", 40 | "1 tablespoon lemon juice" 41 | ], 42 | "recipeInstructions": [ 43 | "1 Heat oven to 425°F. Place 1 pie crust in ungreased 9-inch glass pie plate. Press firmly against side and bottom.", 44 | "2 In large bowl, gently mix filling ingredients; spoon into crust-lined pie plate. Top with second crust. Wrap excess top crust under bottom crust edge, pressing edges together to seal; flute. Cut slits or shapes in several places in top crust.", 45 | "3 Bake 40 to 45 minutes or until apples are tender and crust is golden brown. Cover edge of crust with 2- to 3-inch wide strips of foil after first 15 to 20 minutes of baking to prevent excessive browning. Cool on cooling rack at least 2 hours before serving." 46 | ] 47 | } -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/recipes-nutrition.js: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "name": "Perfect Apple Pie", 4 | "author": "Gin Blanco", 5 | "image": "http://images.edge-generalmills.com/56459281-6fe6-4d9d-984f-385c9488d824.jpg", 6 | "description": "A classic apple pie takes a shortcut with easy Pillsbury® unroll-fill refrigerated pie crust.", 7 | "aggregateRating": { 8 | "@type": "AggregateRating", 9 | "ratingValue": "4.5", 10 | "reviewCount": "276", 11 | "bestRating": "5", 12 | "worstRating": "1" 13 | }, 14 | "prepTime": "PT30M", 15 | "totalTime": "PT3H", 16 | "recipeYield": "8", 17 | "nutrition": { 18 | "@type": "NutritionInformation", 19 | "servingSize": "1 medium slice", 20 | "calories": "230 calories", 21 | "fatContent": "1 g", 22 | "carbohydrateContent": "43 g", 23 | "cholesterolContent": "0 mg", 24 | "fiberContent": "1 g", 25 | "proteinContent": "1 g", 26 | "saturatedFatContent": "2 ½ g", 27 | "servingSize": "1 Serving", 28 | "sodiumContent": "200 mg", 29 | "sugarContent": "27 g", 30 | "transFatContent": "0 g" 31 | }, 32 | "recipeIngredient": [ 33 | "1 box Pillsbury™ refrigerated pie crusts, softened as directed on box", 34 | "6 cups thinly sliced, peeled apples (6 medium)", 35 | "3/4 cup sugar", 36 | "2 tablespoons all-purpose flour", 37 | "3/4 teaspoon ground cinnamon", 38 | "1/4 teaspoon salt", 39 | "1/8 teaspoon ground nutmeg", 40 | "1 tablespoon lemon juice" 41 | ], 42 | "recipeInstructions": [ 43 | "1 Heat oven to 425°F. Place 1 pie crust in ungreased 9-inch glass pie plate. Press firmly against side and bottom.", 44 | "2 In large bowl, gently mix filling ingredients; spoon into crust-lined pie plate. Top with second crust. Wrap excess top crust under bottom crust edge, pressing edges together to seal; flute. Cut slits or shapes in several places in top crust.", 45 | "3 Bake 40 to 45 minutes or until apples are tender and crust is golden brown. Cover edge of crust with 2- to 3-inch wide strips of foil after first 15 to 20 minutes of baking to prevent excessive browning. Cool on cooling rack at least 2 hours before serving." 46 | ] 47 | } -------------------------------------------------------------------------------- /GETTINGSTARTED.md: -------------------------------------------------------------------------------- 1 | we must update it to our project. 2 | just steal-ed from other repository 3 | 4 | Install important stuff: 5 | From within the root directory: 6 | 7 | 1. npm install in / 8 | 9 | 10 | 11 | To get server properly connected: 12 | 13 | In the root directory: 14 | 1. heroku login 15 | 2. heroku create <servername> 16 | 3. heroku git:remote -a <servername> 17 | 4. git push heroku master 18 | 5. wait until done... your server will be hosted on something along the lines of: 19 | https://<servername>.herokuapp.com or in our case 20 | https://mealdotnext4.herokuapp.com 21 | 22 | 6. This url will be used to do request from client/mobile side. 23 | 24 | 25 | 26 | To get the mongoDB wired up, if you don't want go google (hosted using mlab): 27 | 28 | 1. Go to https://mlab.com/ 29 | 2. Create an account 30 | 3. Click create new MongoDB Deployment 31 | 4. Single-node sandbox (free 0.5GB one), add relevant info, create 32 | 5. Click on your new database 33 | 6. Go to users tab and add database user. Create user/pass 34 | 7. Look for the url under 35 | 36 | To connect using a driver via the standard MongoDB URI (what's this?): 37 | 38 | E.g mongodb://<dbuser>:<dbpassword>@ds031167.mlab.com:31167/mealdotnext 39 | 40 | 1. Go to /server/config/connection.js 41 | 2. Fill in relevant information to the variables (mongoUser, mongoPassword, mongoURI) 42 | 3. Done. 43 | 44 | 45 | 46 | Get access to Edamam API 47 | 48 | 1. https://developer.edamam.com/ 49 | 2. Create free account 50 | 3. Go to /server/config/config.js and put in your stuff. 51 | 52 | 53 | 54 | 55 | Endpoints 56 | 57 | 1. Read and understand what endpoints there are and what they do by going to 58 | api_documentation.md 59 | 2. Note that you will need to be authenticated to access most of them. 60 | Or you can go to /server/config/routes.js and remove isAuthenticated if you 61 | just want to test stuff out. Do this also for /server/config/routers/users.js 62 | 63 | 64 | Getting started on react native 65 | 66 | 0. Go to mobile/app/ Addmeal.js and MealList.js and change 67 | 1. https://github.com/exponentjs/xde 68 | 2. Install for whichever environment 69 | 3. Run program 70 | 4. Project -> open project-> mobile folder of this directory 71 | -------------------------------------------------------------------------------- /src/components/Signup/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text, View, Image, TouchableOpacity, TextInput,ImageBackground} from 'react-native'; 3 | import { Bubbles } from 'react-native-loader'; 4 | import styles from './styles'; 5 | 6 | export default class Signup extends React.Component { 7 | constructor() { 8 | super(); 9 | this.state = { 10 | username: '', 11 | password: '' 12 | } 13 | } 14 | onChange = (value) => { 15 | this.setState({ 16 | [event.target.name]: event.target.value 17 | }) 18 | } 19 | render() { 20 | const { navigate } = this.props.navigation; 21 | 22 | return ( 23 | (this.state.load == 0 ? 24 | <ImageBackground source={require('../../assets/images/Background.jpg')} style={styles.background}> 25 | <View style={styles.container}> 26 | <View style={styles.textBoxInput}> 27 | <TextInput underlineColorAndroid='rgba(0,0,0,0)' name="username" placeholderTextColor='#000' style={styles.signupInput} placeholder='Username' onChangeText={this.onChange} /> 28 | </View> 29 | <View style={styles.textBoxInput}> 30 | <TextInput underlineColorAndroid='rgba(0,0,0,0)' name="password" placeholderTextColor='#000' style={styles.signupInput} placeholder='Password' onChangeText={this.onChange} onSubmitEditing={this.onSubmit} secureTextEntry={true} /> 31 | </View> 32 | <View> 33 | <TouchableOpacity style={styles.signup} onPress={this.onSubmit}><Text style={styles.signupText}>Sign up</Text></TouchableOpacity> 34 | <TouchableOpacity style={styles.login} onPress={() => navigate('Login')}><Text style={styles.loginText}>Log in</Text></TouchableOpacity> 35 | </View> 36 | </View></ImageBackground> 37 | : 38 | <ImageBackground source={require('../../assets/images/Background.jpg')} style={style.background}> 39 | <View style={styles.container}> 40 | <Bubbles size={10} color="#0061b0" /> 41 | </View> 42 | </ImageBackground>) 43 | ); 44 | } 45 | } -------------------------------------------------------------------------------- /data/src/Recipe/index.html: -------------------------------------------------------------------------------- 1 | <ion-view title="Single Recipe" id="recipe" 2 | ng-repeat="recipe in recipes"> 3 | <ion-content padding="true" class="has-header"> 4 | <ion-item> 5 | <h2 id="singleRecipe-heading2" 6 | style="color:#000000;"> 7 | 8 | {{ recipe.name }} 9 | </h2> 10 | 11 | <hr /> 12 | 13 | <div id="singleRecipe-markdown2" 14 | style="color:#000000;"> 15 | <p> 16 | This sauce is, in one word, awesome!! 17 | </p> 18 | </div> 19 | </ion-item> 20 | 21 | <div> 22 | <img src="{{ recipe.imageURL }}" 23 | width="100%" height="auto" 24 | style="display: block; 25 | margin: 10px auto; max-width: 500px;"> 26 | </div> 27 | 28 | 29 | <ion-item class="item-icon-left assertive" 30 | id="styledSingleRecipe-list-item20"> 31 | <i class="icon ion-android-time"></i> 32 | Timing 33 | </ion-item> 34 | 35 | <ion-item id="styledSingleRecipe-list-item30"> 36 | Preparation Time 37 | {{ recipe.meta.prepTime }} 38 | </ion-item> 39 | 40 | <ion-item id="styledSingleRecipe-list-item31"> 41 | Cook Time 42 | {{ recipe.meta.totalTime }} 43 | </ion-item> 44 | 45 | <ion-item> 46 | <h4 id="singleRecipe-heading3" 47 | style="color:#000000;"> 48 | Ingredients 49 | </h4> 50 | <div id="singleRecipe-markdown4" 51 | style="color:#000000;"> 52 | 53 | <ul 54 | ng-repeat="ingredient in recipe.ingredients"> 55 | 56 | <li> 57 | {{ ingredient.quantity }} 58 | {{ ingredient.name }} - 59 | {{ ingredient.type }} 60 | </li> 61 | 62 | 63 | </ul> 64 | 65 | 66 | </div> 67 | </ion-item> 68 | 69 | <ion-item> 70 | <div id="directions"> 71 | <h4 id="singleRecipe-heading3" 72 | style="color:#000000;"> 73 | Directions 74 | </h4> 75 | 76 | <ul ng-repeat="step in recipe.steps"> 77 | 78 | <li> 79 | {{ step }} 80 | </li> 81 | 82 | </ul> 83 | 84 | </div> 85 | </ion-item> 86 | 87 | 88 | </ion-content> 89 | </ion-view> 90 | -------------------------------------------------------------------------------- /src/components/Login/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Text, View, Image, TouchableOpacity, TextInput, BackHandler, ImageBackground, CheckBox } from 'react-native'; 3 | // import { Bubbles, DoubleBounce, Bars, Pulse } from 'react-native-loader'; 4 | import styles from './styles'; 5 | 6 | export default class AuthComponent extends React.Component { 7 | constructor() { 8 | super(); 9 | this.state = { 10 | username: '', 11 | password: '' 12 | } 13 | } 14 | async componentDidMount() { 15 | BackHandler.addEventListener('hadrwareBackPress', this.handleBackHandler); 16 | } 17 | handleBackHandler() { 18 | BackHandler.exitApp(); 19 | } 20 | componentWillUnmount() { 21 | BackHandler.removeEventListener('hadrwareBackPress', this.handleBackHandler); 22 | 23 | } 24 | onChange = (value) => { 25 | this.setState({ 26 | [event.target.name]: event.target.value 27 | }) 28 | } 29 | render() { 30 | const { navigate } = this.props.navigation; 31 | 32 | return ( 33 | (this.state.load == 0 ? 34 | <ImageBackground source={require('../../assets/images/Background.jpg')} style={styles.background}> 35 | <View style={styles.container}> 36 | <View style={styles.textBoxInput}> 37 | <TextInput underlineColorAndroid='rgba(0,0,0,0)' placeholderTextColor='#000' style={styles.loginInput} placeholder='Username' name="username" onChangeText={this.onChange} /> 38 | </View> 39 | <View style={styles.textBoxInput}> 40 | <TextInput underlineColorAndroid='rgba(0,0,0,0)' placeholderTextColor='#000' style={styles.loginInput} placeholder='Password' name="password" onChangeText={this.onChange} onSubmitEditing={this.onSubmit} secureTextEntry={true} /> 41 | </View> 42 | <View> 43 | <TouchableOpacity style={styles.login} onPress={this.onSubmit}><Text style={styles.loginText}>Log in</Text></TouchableOpacity> 44 | <TouchableOpacity style={styles.register} onPress={() => navigate('Signup')}><Text style={styles.registerText}>Create a new account</Text></TouchableOpacity> 45 | </View> 46 | </View></ImageBackground> 47 | : 48 | <ImageBackground source={require('../../assets/images/Background.jpg')} style={style.background}> 49 | <View style={styles.container}> 50 | <Bubbles size={10} color="#0061b0" /> 51 | </View> 52 | </ImageBackground>) 53 | ); 54 | } 55 | } -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/free-recipes-list.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = [ 4 | { 5 | "id" : "1", 6 | "title" : "Pimento Cheeseburgers, Roasted Gold Potatoes", 7 | "img" : "https://planitdinner.net/uploads/8/8/9/d/0/2/889d028702ff76b383f7cc8ef203ba99/dsc_0969.list.jpg", 8 | "description" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! " 9 | }, 10 | { 11 | "id" : "2", 12 | "title" : "Shrimp and Green Chili Grits, Simple Salad and Basic Vinaigrette", 13 | "img" : "https://planitdinner.net/uploads/c/6/b/5/f/f/c6b5ff5f4529ea88ebff1f86a973d0b1/dsc_0976-2.display.jpg", 14 | "description" : "Who can resist Shrimp and Grits? I know I certainly can't!! This is outstanding - the kiddos cleaned their plates, as did the adults. " 15 | 16 | }, 17 | { 18 | "id" : "3", 19 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 20 | "img" : "https://planitdinner.net/uploads/f/b/7/a/a/d/fb7aad127e3ae8d4e3cd5878a7a154bf/dsc_0968-2.display.jpg", 21 | "description" : "This is a must-try! When everyone tried this, I heard comments like, 'this is the best thing I've ever tasted.' Well, does that convince you? And the Chimichangas are baked, not fried, so much healthier than the restaurants. Total deliciousness!!" 22 | }, 23 | { 24 | "id" : "4", 25 | "title" : "Slow-Cooker Pork Ragout, Buttered Pappardelle, Blistered Okra", 26 | "img" : "https://planitdinner.net/uploads/5/2/b/b/2/5/52bb259093bc7b56fd3402deb61624c3/dsc_0978.display.jpg", 27 | "description" : "Many of you have requested slow-cooker meals, and yes, I must agree that they are perfect for busy days. Set it and forget it! Boneless pork ribs turn out fork-tender, with a rich-tasting sauce, which is perfect over pasta or rice. " 28 | }, 29 | { 30 | "id" : "5", 31 | "title" : "Glazed Turkey Cutlets with Arugula, Carrot and Celery Salad, Orzo with Chives", 32 | "img" : "https://planitdinner.net/uploads/4/0/5/6/2/d/40562df60f6c37fbb03485c024c7193e/dsc_0969-2.display.jpg", 33 | "description" : "This is the ticket to those crazy weeknights, when you need something on the table in a hurry. If you've never eaten turkey cutlets, I urge you to give them a try. But of course, chicken breasts pounded thin would work as well. Who knew something so easy could be so delish?" 34 | }, 35 | { 36 | "id" : "6", 37 | "title" : "Bruschetta with Fresh Figs and Goat Cheese", 38 | "img" : "https://planitdinner.net/uploads/3/e/0/a/5/9/3e0a594e2cb190db6d32220819547f40/dsc_0967-5.display.jpg", 39 | "description" : "A perfect way to use the gorgeous figs available right now. This looks so elegant but it so easy to put together. Everyone raved...and I think you will as well. Enjoy!!" 40 | } 41 | ]; 42 | -------------------------------------------------------------------------------- /src/components/Home/index.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react'; 2 | import {View, StyleSheet, TouchableOpacity, Text } from 'react-native'; 3 | import { ListItem } from 'react-native-elements'; 4 | import { getStatusBarHeight } from 'react-native-status-bar-height'; 5 | import { SafeAreaView } from 'react-navigation'; 6 | 7 | import Directions from '../Directions'; 8 | import FreeRecipes from '../FreeRecipes'; 9 | import GroceryList from '../GroceryList'; 10 | import GroceryListDepartment from '../GroceryListDepartment'; 11 | import GroceryListSettings from '../GroceryListSettings'; 12 | 13 | import styles from './styles'; 14 | 15 | const ExampleRoutes = { 16 | Directions, 17 | FreeRecipes, 18 | GroceryList, 19 | GroceryListDepartment, 20 | GroceryListSettings 21 | }; 22 | 23 | const ExampleInfo = { 24 | Directions : { 25 | name : 'Directions' 26 | }, 27 | FreeRecipes : { 28 | name : 'FreeRecipes' 29 | }, 30 | GroceryList : { 31 | name : 'GroceryList' 32 | }, 33 | GroceryListDepartment : { 34 | name : 'GroceryListDepartment' 35 | }, 36 | GroceryListSettings : { 37 | name : 'GroceryListSettings' 38 | } 39 | }; 40 | 41 | class HomeScreen extends Component { 42 | render() { 43 | const { navigation } = this.props; 44 | 45 | return ( 46 | <View style={styles.container}> 47 | <SafeAreaView forceInset={{ bottom: 'always', horizontal: 'never' }}> 48 | <View style={{ backgroundColor: '#fff' }}> 49 | {Object.keys(ExampleRoutes).map((routeName) => ( 50 | <TouchableOpacity 51 | key={routeName} 52 | onPress={() => { 53 | let route = ExampleRoutes[routeName]; 54 | if (route.screen || route.path || route.params) { 55 | const { path, params, screen } = route; 56 | const { router } = screen; 57 | const action = 58 | path && router.getActionForPathAndParams(path, params); 59 | navigation.navigate(routeName, {}, action); 60 | } else { 61 | navigation.navigate(routeName); 62 | } 63 | }} 64 | > 65 | <SafeAreaView 66 | style={styles.itemContainer} 67 | forceInset={{ veritcal: 'never', bottom: 'never' }} 68 | > 69 | <View style={styles.item}> 70 | <Text style={styles.title}> 71 | {ExampleInfo[routeName].name} 72 | </Text> 73 | </View> 74 | </SafeAreaView> 75 | </TouchableOpacity> 76 | ))} 77 | </View> 78 | </SafeAreaView> 79 | </View> 80 | ); 81 | } 82 | } 83 | 84 | export default HomeScreen; -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/grocery.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "category_id" : "1", 4 | "name" : "BAKERY/BREAD", 5 | "items" : [ 6 | { 7 | "id" : "1", 8 | "name" : "hamburger buns", 9 | "recipeId" : ["1"], 10 | "type" : "simple", 11 | "units" : "4", 12 | "done" : "0", 13 | "delete" : "0" 14 | }, 15 | { 16 | "id" : "2", 17 | "name" : "small French baguette", 18 | "recipeId" : ["1"], 19 | "type" : "simple", 20 | "units" : "1", 21 | "done" : "0", 22 | "delete" : "0" 23 | } 24 | 25 | 26 | ] 27 | 28 | }, 29 | 30 | { 31 | "category_id" : "2", 32 | "name" : "BAKING", 33 | "items" : [ 34 | { 35 | "id" : "4", 36 | "name" : "all-purpose flour", 37 | "recipeId" : ["1"], 38 | "type" : "simple", 39 | "units" : "0.5 cup", 40 | "done" : "0", 41 | "delete" : "0" 42 | }, 43 | { 44 | "id" : "5", 45 | "name" : "granulated sugar", 46 | "recipeId" : ["1"], 47 | "type" : "simple", 48 | "units" : "1 pinch", 49 | "done" : "0", 50 | "delete" : "0" 51 | } 52 | 53 | 54 | ] 55 | 56 | }, 57 | { 58 | "category_id" : "3", 59 | "name" : "PANTRY STAPLES", 60 | "items" : [ 61 | { 62 | "id" : "6", 63 | "name" : "black pepper", 64 | "recipeId" : ["1", "2"], 65 | "type" : "simple", 66 | "units" : "1 teaspoon", 67 | "done" : "0", 68 | "delete" : "0" 69 | }, 70 | { 71 | "id" : "7", 72 | "name" : "extra-virgin olive oil", 73 | "recipeId" : ["1", "2", "3", "4"], 74 | "type" : "complex", 75 | "units" : "17 tablespoons + 0.25 cup", 76 | "done" : "0", 77 | "delete" : "0" 78 | }, 79 | { 80 | "id" : "8", 81 | "name" : "kosher salt", 82 | "recipeId" : ["5", "6", "7", "8"], 83 | "type" : "simple", 84 | "units" : "1 teaspoon", 85 | "done" : "0", 86 | "delete" : "0" 87 | }, 88 | { 89 | "id" : "9", 90 | "name" : "kosher salt and freshly ground black pepper", 91 | "recipeId" : ["1", "2", "3", "4"], 92 | "type" : "simple", 93 | "units" : "", 94 | "done" : "0", 95 | "delete" : "0" 96 | }, 97 | { 98 | "id" : "10", 99 | "name" : "olive oil", 100 | "recipeId" : ["1", "2", "3", "4"], 101 | "type" : "simple", 102 | "units" : "5 tablespoons", 103 | "done" : "0", 104 | "delete" : "0" 105 | }, 106 | { 107 | "id" : "11", 108 | "name" : "unsalted butter", 109 | "recipeId" : ["1", "2", "3"], 110 | "type" : "simple", 111 | "units" : "5 tablespoon", 112 | "done" : "0", 113 | "delete" : "0" 114 | } 115 | 116 | ] 117 | 118 | } 119 | ] -------------------------------------------------------------------------------- /src/components/GroceryList/GroceryListItem.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from "react"; 2 | import {StyleSheet, Text, TouchableOpacity, View} from "react-native"; 3 | import {ListItem} from 'react-native-elements'; 4 | import Collapsible from "react-native-collapsible"; 5 | import { Ionicons } from '@expo/vector-icons'; 6 | 7 | import {titleStyles} from './styles'; 8 | 9 | 10 | class GroceryListItem extends Component { 11 | 12 | state = { 13 | collapsed: true 14 | }; 15 | 16 | 17 | toggleExpanded = () => { 18 | this.setState({ 19 | collapsed: !this.state.collapsed 20 | }) 21 | }; 22 | 23 | // this.state.collapsed 24 | render() { 25 | return ( 26 | <View> 27 | <ListItem hideChevron={true} 28 | title={this.props.name} 29 | containerStyle={styles.listItemContainerStyle} 30 | leftIcon={<Ionicons style={listItemStyles.leftIcon} name= 'ios-arrow-down' color= '#808080'/>} 31 | onPress={this.toggleExpanded} 32 | /> 33 | <Collapsible collapsed={this.state.collapsed} align="center"> 34 | <View style={styles.content}> 35 | <Text> 36 | Bacon ipsum dolor amet chuck turducken landjaeger tongue spare 37 | ribs 38 | </Text> 39 | </View> 40 | </Collapsible> 41 | </View> 42 | ); 43 | } 44 | } 45 | 46 | export default GroceryListItem; 47 | 48 | const listItemStyles = { 49 | leftIcon: { 50 | margin: 5, 51 | paddingLeft: 7, 52 | paddingRight: 5, 53 | backgroundColor: 'red', 54 | fontSize: 40 55 | } 56 | }; 57 | 58 | const styles = StyleSheet.create({ 59 | container: { 60 | flex: 1, 61 | justifyContent: 'center', 62 | backgroundColor: '#F5FCFF', 63 | }, 64 | title: { 65 | textAlign: 'center', 66 | fontSize: 22, 67 | fontWeight: '300', 68 | marginBottom: 20, 69 | }, 70 | header: { 71 | backgroundColor: '#F5FCFF', 72 | padding: 10, 73 | }, 74 | headerText: { 75 | textAlign: 'center', 76 | fontSize: 16, 77 | fontWeight: '500', 78 | }, 79 | content: { 80 | padding: 20, 81 | backgroundColor: '#ff6666', 82 | }, 83 | active: { 84 | backgroundColor: 'rgba(255,255,255,1)', 85 | }, 86 | inactive: { 87 | backgroundColor: 'rgba(245,252,255,1)', 88 | }, 89 | selectors: { 90 | marginBottom: 10, 91 | flexDirection: 'row', 92 | justifyContent: 'center', 93 | }, 94 | selector: { 95 | backgroundColor: '#F5FCFF', 96 | padding: 10, 97 | }, 98 | activeSelector: { 99 | fontWeight: 'bold', 100 | }, 101 | selectTitle: { 102 | fontSize: 14, 103 | fontWeight: '500', 104 | padding: 10, 105 | }, 106 | 107 | listItemContainerStyle: { 108 | borderLeftWidth: 1, 109 | borderRightWidth: 1, 110 | borderColor: '#cbd2d9' 111 | }, 112 | 113 | }); -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/grocery.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "category_id" : "1", 4 | "name" : "BAKERY/BREAD", 5 | "items" : [ 6 | { 7 | "id" : "1", 8 | "name" : "hamburger buns", 9 | "recipeId" : ["1"], 10 | "type" : "simple", 11 | "units" : "4", 12 | "done" : "0", 13 | "delete" : "0" 14 | }, 15 | { 16 | "id" : "2", 17 | "name" : "small French baguette", 18 | "recipeId" : ["1"], 19 | "type" : "simple", 20 | "units" : "1", 21 | "done" : "0", 22 | "delete" : "0" 23 | } 24 | 25 | 26 | ] 27 | 28 | }, 29 | 30 | { 31 | "category_id" : "2", 32 | "name" : "BAKING", 33 | "items" : [ 34 | { 35 | "id" : "4", 36 | "name" : "all-purpose flour", 37 | "recipeId" : ["1"], 38 | "type" : "simple", 39 | "units" : "0.5 cup", 40 | "done" : "0", 41 | "delete" : "0" 42 | }, 43 | { 44 | "id" : "5", 45 | "name" : "granulated sugar", 46 | "recipeId" : ["1"], 47 | "type" : "simple", 48 | "units" : "1 pinch", 49 | "done" : "0", 50 | "delete" : "0" 51 | } 52 | 53 | 54 | ] 55 | 56 | }, 57 | { 58 | "category_id" : "3", 59 | "name" : "PANTRY STAPLES", 60 | "items" : [ 61 | { 62 | "id" : "6", 63 | "name" : "black pepper", 64 | "recipeId" : ["1", "2"], 65 | "type" : "simple", 66 | "units" : "1 teaspoon", 67 | "done" : "0", 68 | "delete" : "0" 69 | }, 70 | { 71 | "id" : "7", 72 | "name" : "extra-virgin olive oil", 73 | "recipeId" : ["1", "2", "3", "4"], 74 | "type" : "complex", 75 | "units" : "17 tablespoons + 0.25 cup", 76 | "done" : "0", 77 | "delete" : "0" 78 | }, 79 | { 80 | "id" : "8", 81 | "name" : "kosher salt", 82 | "recipeId" : ["5", "6", "7", "8"], 83 | "type" : "simple", 84 | "units" : "1 teaspoon", 85 | "done" : "0", 86 | "delete" : "0" 87 | }, 88 | { 89 | "id" : "9", 90 | "name" : "kosher salt and freshly ground black pepper", 91 | "recipeId" : ["1", "2", "3", "4"], 92 | "type" : "simple", 93 | "units" : "", 94 | "done" : "0", 95 | "delete" : "0" 96 | }, 97 | { 98 | "id" : "10", 99 | "name" : "olive oil", 100 | "recipeId" : ["1", "2", "3", "4"], 101 | "type" : "simple", 102 | "units" : "5 tablespoons", 103 | "done" : "0", 104 | "delete" : "0" 105 | }, 106 | { 107 | "id" : "11", 108 | "name" : "unsalted butter", 109 | "recipeId" : ["1", "2", "3"], 110 | "type" : "simple", 111 | "units" : "5 tablespoon", 112 | "done" : "0", 113 | "delete" : "0" 114 | } 115 | 116 | ] 117 | 118 | } 119 | ] -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/grocery.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = [ 4 | 5 | { 6 | "id" : "1", //department ID 7 | "name" : "BAKERY/BREAD", 8 | "items" : [ 9 | { 10 | "id" : "1", 11 | "name" : "hamburger buns", 12 | "recipeId" : ["1"], 13 | "type" : "simple", 14 | "units" : "4", 15 | "done" : "0", 16 | "delete" : "0" 17 | }, 18 | { 19 | "id" : "2", 20 | "name" : "small French baguette", 21 | "recipeId" : ["1"], 22 | "type" : "simple", 23 | "units" : "1", 24 | "done" : "0", 25 | "delete" : "0" 26 | } 27 | 28 | 29 | ] 30 | 31 | }, 32 | 33 | { 34 | "id" : "2", 35 | "name" : "BAKING", 36 | "items" : [ 37 | { 38 | "id" : "4", 39 | "name" : "all-purpose flour", 40 | "recipeId" : ["1"], 41 | "type" : "simple", 42 | "units" : "0.5 cup", 43 | "done" : "0", 44 | "delete" : "0" 45 | }, 46 | { 47 | "id" : "5", 48 | "name" : "granulated sugar", 49 | "recipeId" : ["1"], 50 | "type" : "simple", 51 | "units" : "1 pinch", 52 | "done" : "0", 53 | "delete" : "0" 54 | } 55 | 56 | 57 | ] 58 | 59 | }, 60 | { 61 | "id" : "3", 62 | "name" : "PANTRY STAPLES", 63 | "items" : [ 64 | { 65 | "id" : "6", 66 | "name" : "black pepper", 67 | "recipeId" : ["1", "2"], 68 | "type" : "simple", 69 | "units" : "1 teaspoon", 70 | "done" : "0", 71 | "delete" : "0" 72 | }, 73 | { 74 | "id" : "7", 75 | "name" : "extra-virgin olive oil", 76 | "recipeId" : ["1", "2", "3", "4"], 77 | "type" : "complex", 78 | "units" : "17 tablespoons + 0.25 cup", 79 | "done" : "0", 80 | "delete" : "0" 81 | }, 82 | { 83 | "id" : "8", 84 | "name" : "kosher salt", 85 | "recipeId" : ["5", "6", "7", "8"], 86 | "type" : "simple", 87 | "units" : "1 teaspoon", 88 | "done" : "0", 89 | "delete" : "0" 90 | }, 91 | { 92 | "id" : "9", 93 | "name" : "kosher salt and freshly ground black pepper", 94 | "recipeId" : ["1", "2", "3", "4"], 95 | "type" : "simple", 96 | "units" : "", 97 | "done" : "0", 98 | "delete" : "0" 99 | }, 100 | { 101 | "id" : "10", 102 | "name" : "olive oil", 103 | "recipeId" : ["1", "2", "3", "4"], 104 | "type" : "simple", 105 | "units" : "5 tablespoons", 106 | "done" : "0", 107 | "delete" : "0" 108 | }, 109 | { 110 | "id" : "11", 111 | "name" : "unsalted butter", 112 | "recipeId" : ["1", "2", "3"], 113 | "type" : "simple", 114 | "units" : "5 tablespoon", 115 | "done" : "0", 116 | "delete" : "0" 117 | } 118 | 119 | ] 120 | 121 | } 122 | 123 | ]; 124 | -------------------------------------------------------------------------------- /data/src/WeeklyMenu/WeeklyMenu.js: -------------------------------------------------------------------------------- 1 | import { 2 | StyleSheet, 3 | View, 4 | Dimensions, 5 | } from 'react-native'; 6 | 7 | import React from 'react'; 8 | import data from '../../data/json-db-sample/' 9 | 10 | const items = []; 11 | for (let i=0; i < data.recipe[0].directions.length; i++){ 12 | items.push( 13 | <Item link="/recipe/{recipe.id}" > 14 | <Image src="{recipe.img}" /> 15 | Pork Tenderloin with Roasted Cherries 16 | {weekday} 17 | {recipe.title} 18 | {recipe.description} 19 | </Item> 20 | <Separator /> 21 | ); 22 | } 23 | 24 | const WeeklyMenu = (props) => { 25 | 26 | return ( 27 | <List> 28 | <Title> 29 | Weekly Menu - September 5 - 11 {/* this is an example */} 30 | {/* maybe we should have some function that will convert date into that text */} 31 | Weekly Menu - {title} 32 | 33 | 34 | 35 | Happy Labor Day Weekend!! {/* this is an example */} 36 | {description} 37 | 38 | {/* other way */} 39 | 40 | 41 | {/* this is a loop */} 42 | 43 | {items} 44 | 45 | 46 | Pork Tenderloin with Roasted Cherries 47 | {weekday} 48 | {recipe.title} 49 | {recipe.description} 50 | 51 | 52 | 53 | 54 | 55 | Beef, Red Pepper and Snow Pea Stir-Fry 56 | {weekday} 57 | {recipe.title} 58 | {recipe.description} 59 | 60 | 61 | 62 | 63 | 64 | Meatball Sliders 65 | {weekday} 66 | {recipe.title} 67 | {recipe.description} 68 | 69 | 70 | 71 | 72 | 73 | Item title 74 | {weekday} 75 | {recipe.title} 76 | {recipe.description} 77 | 78 | 79 | 80 | 81 | 82 | Item title 83 | {weekday} 84 | {recipe.title} 85 | {recipe.description} 86 | 87 | 88 | 89 | 90 | 91 | Item title 92 | {weekday} 93 | {recipe.title} 94 | {recipe.description} 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 105 | 106 | ); 107 | }; 108 | 109 | export default WeeklyMenu; 110 | -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/simple-recipe-4.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | "title": "Basic Fruit Salad", 6 | "yields" : { 7 | "servings": "6" 8 | }, 9 | "ingredients": [ 10 | { 11 | "name" : "apple", 12 | "amounts" : { 13 | "amount" : "1", 14 | "unit" : "each", 15 | "quantity": 0.333333333333333, 16 | "displayQuantity": "1/3", 17 | "metricQuantity": 59, 18 | "metricDisplayQuantity": "59", 19 | "metricUnit": "ml", 20 | } 21 | }, 22 | { 23 | "name" : "banana", 24 | "amounts" : { 25 | "amount" : "1", 26 | "unit" : "each", 27 | "quantity": 0.333333333333333, 28 | "displayQuantity": "1/3", 29 | "metricQuantity": 59, 30 | "metricDisplayQuantity": "59", 31 | "metricUnit": "ml", 32 | } 33 | }, 34 | { 35 | "name" : "orange", 36 | "amounts" : { 37 | "amount" : "1", 38 | "unit" : "each", 39 | "quantity": 0.333333333333333, 40 | "displayQuantity": "1/3", 41 | "metricQuantity": 59, 42 | "metricDisplayQuantity": "59", 43 | "metricUnit": "ml", 44 | } 45 | }, 46 | { 47 | "name" : "grapes", 48 | "amounts" : { 49 | "amount" : "10", 50 | "unit" : "cup", 51 | "quantity": 0.333333333333333, 52 | "displayQuantity": "1/3", 53 | "metricQuantity": 59, 54 | "metricDisplayQuantity": "59", 55 | "metricUnit": "ml", 56 | } 57 | }, 58 | ], 59 | "directions": [ 60 | 61 | { 62 | "step" : "Cut the apple into cubes", 63 | "notes" : [ 64 | "Use whole apples", 65 | "Pears may be substituted, but produce a different flavor and mouthfeel" 66 | ] 67 | }, 68 | { 69 | "step" : "Cut the banana into slices", 70 | "notes" : [ 71 | "", 72 | "" 73 | ] 74 | }, 75 | { 76 | "step" : "Peel the orange, and divide into segments", 77 | "notes" : [ 78 | "", 79 | "" 80 | ] 81 | }, 82 | { 83 | "step" : "Combine all ingredients in a bowl", 84 | "notes" : [ 85 | "", 86 | "" 87 | ] 88 | }, 89 | { 90 | "step" : "Mix to combine", 91 | "notes" : [ 92 | "", 93 | "" 94 | ] 95 | }, 96 | 97 | ], 98 | "notes" : [ 99 | "This is a friendly recipe; giving, rather than throwing, is recommended.1", 100 | "This is a friendly recipe; giving, rather than throwing, is recommended.2", 101 | "This is a friendly recipe; giving, rather than throwing, is recommended.3" 102 | ] 103 | 104 | 105 | }; 106 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/recipes-extended.js: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Basic Fruit Salad", 3 | "yields" : { 4 | "servings": "6" 5 | }, 6 | "ingredients": [ 7 | { 8 | "name" : "apple", 9 | "amounts" : { 10 | "amount" : "1", 11 | "unit" : "each", 12 | "quantity": 0.333333333333333, 13 | "displayQuantity": "1/3", 14 | "metricQuantity": 59, 15 | "metricDisplayQuantity": "59", 16 | "metricUnit": "ml", 17 | } 18 | }, 19 | { 20 | "name" : "banana", 21 | "amounts" : { 22 | "amount" : "1", 23 | "unit" : "each", 24 | "quantity": 0.333333333333333, 25 | "displayQuantity": "1/3", 26 | "metricQuantity": 59, 27 | "metricDisplayQuantity": "59", 28 | "metricUnit": "ml", 29 | } 30 | }, 31 | { 32 | "name" : "orange", 33 | "amounts" : { 34 | "amount" : "1", 35 | "unit" : "each", 36 | "quantity": 0.333333333333333, 37 | "displayQuantity": "1/3", 38 | "metricQuantity": 59, 39 | "metricDisplayQuantity": "59", 40 | "metricUnit": "ml", 41 | } 42 | }, 43 | { 44 | "name" : "grapes", 45 | "amounts" : { 46 | "amount" : "10", 47 | "unit" : "cup", 48 | "quantity": 0.333333333333333, 49 | "displayQuantity": "1/3", 50 | "metricQuantity": 59, 51 | "metricDisplayQuantity": "59", 52 | "metricUnit": "ml", 53 | } 54 | }, 55 | ], 56 | "steps": [ 57 | 58 | { 59 | "step" : "Cut the apple into cubes", 60 | "notes" : [ 61 | "Use whole apples", 62 | "Pears may be substituted, but produce a different flavor and mouthfeel" 63 | ] 64 | }, 65 | { 66 | "step" : "Cut the banana into slices", 67 | "notes" : [ 68 | "", 69 | "" 70 | ] 71 | }, 72 | { 73 | "step" : "Peel the orange, and divide into segments", 74 | "notes" : [ 75 | "", 76 | "" 77 | ] 78 | }, 79 | { 80 | "step" : "Combine all ingredients in a bowl", 81 | "notes" : [ 82 | "", 83 | "" 84 | ] 85 | }, 86 | { 87 | "step" : "Mix to combine", 88 | "notes" : [ 89 | "", 90 | "" 91 | ] 92 | }, 93 | 94 | ], 95 | "notes" : [ 96 | "This is a friendly recipe; giving, rather than throwing, is recommended.1", 97 | "This is a friendly recipe; giving, rather than throwing, is recommended.2", 98 | "This is a friendly recipe; giving, rather than throwing, is recommended.3" 99 | ] 100 | 101 | } 102 | -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/recipes-extended.js: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Basic Fruit Salad", 3 | "yields" : { 4 | "servings": "6" 5 | }, 6 | "ingredients": [ 7 | { 8 | "name" : "apple", 9 | "amounts" : { 10 | "amount" : "1", 11 | "unit" : "each", 12 | "quantity": 0.333333333333333, 13 | "displayQuantity": "1/3", 14 | "metricQuantity": 59, 15 | "metricDisplayQuantity": "59", 16 | "metricUnit": "ml", 17 | } 18 | }, 19 | { 20 | "name" : "banana", 21 | "amounts" : { 22 | "amount" : "1", 23 | "unit" : "each", 24 | "quantity": 0.333333333333333, 25 | "displayQuantity": "1/3", 26 | "metricQuantity": 59, 27 | "metricDisplayQuantity": "59", 28 | "metricUnit": "ml", 29 | } 30 | }, 31 | { 32 | "name" : "orange", 33 | "amounts" : { 34 | "amount" : "1", 35 | "unit" : "each", 36 | "quantity": 0.333333333333333, 37 | "displayQuantity": "1/3", 38 | "metricQuantity": 59, 39 | "metricDisplayQuantity": "59", 40 | "metricUnit": "ml", 41 | } 42 | }, 43 | { 44 | "name" : "grapes", 45 | "amounts" : { 46 | "amount" : "10", 47 | "unit" : "cup", 48 | "quantity": 0.333333333333333, 49 | "displayQuantity": "1/3", 50 | "metricQuantity": 59, 51 | "metricDisplayQuantity": "59", 52 | "metricUnit": "ml", 53 | } 54 | }, 55 | ], 56 | "steps": [ 57 | 58 | { 59 | "step" : "Cut the apple into cubes", 60 | "notes" : [ 61 | "Use whole apples", 62 | "Pears may be substituted, but produce a different flavor and mouthfeel" 63 | ] 64 | }, 65 | { 66 | "step" : "Cut the banana into slices", 67 | "notes" : [ 68 | "", 69 | "" 70 | ] 71 | }, 72 | { 73 | "step" : "Peel the orange, and divide into segments", 74 | "notes" : [ 75 | "", 76 | "" 77 | ] 78 | }, 79 | { 80 | "step" : "Combine all ingredients in a bowl", 81 | "notes" : [ 82 | "", 83 | "" 84 | ] 85 | }, 86 | { 87 | "step" : "Mix to combine", 88 | "notes" : [ 89 | "", 90 | "" 91 | ] 92 | }, 93 | 94 | ], 95 | "notes" : [ 96 | "This is a friendly recipe; giving, rather than throwing, is recommended.1", 97 | "This is a friendly recipe; giving, rather than throwing, is recommended.2", 98 | "This is a friendly recipe; giving, rather than throwing, is recommended.3" 99 | ] 100 | 101 | } 102 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/weekly.json: -------------------------------------------------------------------------------- 1 | { 2 | "meta" : { 3 | "id" : "", 4 | "user_id" : "", 5 | "title" : "September 5 - 11", 6 | "created_at" : "09/02/16", 7 | "description" : "Happy Labor Day Weekend!! ", 8 | }, 9 | 10 | 11 | "items" : [ 12 | { 13 | "id" : "1", 14 | "title" : "Pimento Cheeseburgers, Roasted Gold Potatoes", 15 | "weekDay" : "monday", 16 | "img" : "https://planitdinner.net/uploads/8/8/9/d/0/2/889d028702ff76b383f7cc8ef203ba99/dsc_0969.list.jpg", 17 | "recipeDescription" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! " 18 | 19 | }, 20 | { 21 | "id" : "2", 22 | "title" : "Shrimp and Green Chili Grits, Simple Salad and Basic Vinaigrette", 23 | "weekDay" : "tuesday", 24 | "img" : "https://planitdinner.net/uploads/c/6/b/5/f/f/c6b5ff5f4529ea88ebff1f86a973d0b1/dsc_0976-2.display.jpg", 25 | "recipeDescription" : "Who can resist Shrimp and Grits? I know I certainly can't!! This is outstanding - the kiddos cleaned their plates, as did the adults. " 26 | 27 | }, 28 | { 29 | "id" : "3", 30 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 31 | "weekDay" : "wednesday", 32 | "img" : "https://planitdinner.net/uploads/f/b/7/a/a/d/fb7aad127e3ae8d4e3cd5878a7a154bf/dsc_0968-2.display.jpg", 33 | "recipeDescription" : "This is a must-try! When everyone tried this, I heard comments like, 'this is the best thing I've ever tasted.' Well, does that convince you? And the Chimichangas are baked, not fried, so much healthier than the restaurants. Total deliciousness!!" 34 | 35 | }, 36 | { 37 | "id" : "4", 38 | "title" : "Slow-Cooker Pork Ragout, Buttered Pappardelle, Blistered Okra", 39 | "weekDay" : "thursday", 40 | "img" : "https://planitdinner.net/uploads/5/2/b/b/2/5/52bb259093bc7b56fd3402deb61624c3/dsc_0978.display.jpg", 41 | "recipeDescription" : "Many of you have requested slow-cooker meals, and yes, I must agree that they are perfect for busy days. Set it and forget it! Boneless pork ribs turn out fork-tender, with a rich-tasting sauce, which is perfect over pasta or rice. " 42 | 43 | }, 44 | { 45 | "id" : "5", 46 | "title" : "Glazed Turkey Cutlets with Arugula, Carrot and Celery Salad, Orzo with Chives", 47 | "weekDay" : "friday", 48 | "img" : "https://planitdinner.net/uploads/4/0/5/6/2/d/40562df60f6c37fbb03485c024c7193e/dsc_0969-2.display.jpg", 49 | "recipeDescription" : "This is the ticket to those crazy weeknights, when you need something on the table in a hurry. If you've never eaten turkey cutlets, I urge you to give them a try. But of course, chicken breasts pounded thin would work as well. Who knew something so easy could be so delish?" 50 | 51 | }, 52 | { 53 | "id" : "6", 54 | "title" : "Bruschetta with Fresh Figs and Goat Cheese", 55 | "weekDay" : "weekend", 56 | "img" : "https://planitdinner.net/uploads/3/e/0/a/5/9/3e0a594e2cb190db6d32220819547f40/dsc_0967-5.display.jpg", 57 | "recipeDescription" : "A perfect way to use the gorgeous figs available right now. This looks so elegant but it so easy to put together. Everyone raved...and I think you will as well. Enjoy!!" 58 | 59 | } 60 | ] 61 | 62 | } -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/weekly.json: -------------------------------------------------------------------------------- 1 | { 2 | "meta" : { 3 | "id" : "", 4 | "user_id" : "", 5 | "title" : "September 5 - 11", 6 | "created_at" : "09/02/16", 7 | "description" : "Happy Labor Day Weekend!! ", 8 | }, 9 | 10 | 11 | "items" : [ 12 | { 13 | "id" : "1", 14 | "title" : "Pimento Cheeseburgers, Roasted Gold Potatoes", 15 | "weekDay" : "monday", 16 | "img" : "https://planitdinner.net/uploads/8/8/9/d/0/2/889d028702ff76b383f7cc8ef203ba99/dsc_0969.list.jpg", 17 | "recipeDescription" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! " 18 | 19 | }, 20 | { 21 | "id" : "2", 22 | "title" : "Shrimp and Green Chili Grits, Simple Salad and Basic Vinaigrette", 23 | "weekDay" : "tuesday", 24 | "img" : "https://planitdinner.net/uploads/c/6/b/5/f/f/c6b5ff5f4529ea88ebff1f86a973d0b1/dsc_0976-2.display.jpg", 25 | "recipeDescription" : "Who can resist Shrimp and Grits? I know I certainly can't!! This is outstanding - the kiddos cleaned their plates, as did the adults. " 26 | 27 | }, 28 | { 29 | "id" : "3", 30 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 31 | "weekDay" : "wednesday", 32 | "img" : "https://planitdinner.net/uploads/f/b/7/a/a/d/fb7aad127e3ae8d4e3cd5878a7a154bf/dsc_0968-2.display.jpg", 33 | "recipeDescription" : "This is a must-try! When everyone tried this, I heard comments like, 'this is the best thing I've ever tasted.' Well, does that convince you? And the Chimichangas are baked, not fried, so much healthier than the restaurants. Total deliciousness!!" 34 | 35 | }, 36 | { 37 | "id" : "4", 38 | "title" : "Slow-Cooker Pork Ragout, Buttered Pappardelle, Blistered Okra", 39 | "weekDay" : "thursday", 40 | "img" : "https://planitdinner.net/uploads/5/2/b/b/2/5/52bb259093bc7b56fd3402deb61624c3/dsc_0978.display.jpg", 41 | "recipeDescription" : "Many of you have requested slow-cooker meals, and yes, I must agree that they are perfect for busy days. Set it and forget it! Boneless pork ribs turn out fork-tender, with a rich-tasting sauce, which is perfect over pasta or rice. " 42 | 43 | }, 44 | { 45 | "id" : "5", 46 | "title" : "Glazed Turkey Cutlets with Arugula, Carrot and Celery Salad, Orzo with Chives", 47 | "weekDay" : "friday", 48 | "img" : "https://planitdinner.net/uploads/4/0/5/6/2/d/40562df60f6c37fbb03485c024c7193e/dsc_0969-2.display.jpg", 49 | "recipeDescription" : "This is the ticket to those crazy weeknights, when you need something on the table in a hurry. If you've never eaten turkey cutlets, I urge you to give them a try. But of course, chicken breasts pounded thin would work as well. Who knew something so easy could be so delish?" 50 | 51 | }, 52 | { 53 | "id" : "6", 54 | "title" : "Bruschetta with Fresh Figs and Goat Cheese", 55 | "weekDay" : "weekend", 56 | "img" : "https://planitdinner.net/uploads/3/e/0/a/5/9/3e0a594e2cb190db6d32220819547f40/dsc_0967-5.display.jpg", 57 | "recipeDescription" : "A perfect way to use the gorgeous figs available right now. This looks so elegant but it so easy to put together. Everyone raved...and I think you will as well. Enjoy!!" 58 | 59 | } 60 | ] 61 | 62 | } -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/free/weekly-menu.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = { 4 | 5 | "meta" : { 6 | "id" : "", 7 | "user_id" : "", 8 | "title" : "September 5 - 11", 9 | "created_at" : "09/02/16", 10 | "description" : "Happy Labor Day Weekend!!" 11 | }, 12 | 13 | 14 | "items" : [ 15 | { 16 | "id" : "1", 17 | "title" : "Pimento Cheeseburgers, Roasted Gold Potatoes", 18 | "weekDay" : "monday", 19 | "img" : "https://planitdinner.net/uploads/8/8/9/d/0/2/889d028702ff76b383f7cc8ef203ba99/dsc_0969.list.jpg", 20 | "description" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! " 21 | 22 | }, 23 | { 24 | "id" : "2", 25 | "title" : "Shrimp and Green Chili Grits, Simple Salad and Basic Vinaigrette", 26 | "weekDay" : "tuesday", 27 | "img" : "https://planitdinner.net/uploads/c/6/b/5/f/f/c6b5ff5f4529ea88ebff1f86a973d0b1/dsc_0976-2.display.jpg", 28 | "description" : "Who can resist Shrimp and Grits? I know I certainly can't!! This is outstanding - the kiddos cleaned their plates, as did the adults. " 29 | 30 | }, 31 | { 32 | "id" : "3", 33 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 34 | "weekDay" : "wednesday", 35 | "img" : "https://planitdinner.net/uploads/f/b/7/a/a/d/fb7aad127e3ae8d4e3cd5878a7a154bf/dsc_0968-2.display.jpg", 36 | "description" : "This is a must-try! When everyone tried this, I heard comments like, 'this is the best thing I've ever tasted.' Well, does that convince you? And the Chimichangas are baked, not fried, so much healthier than the restaurants. Total deliciousness!!" 37 | 38 | }, 39 | { 40 | "id" : "4", 41 | "title" : "Slow-Cooker Pork Ragout, Buttered Pappardelle, Blistered Okra", 42 | "weekDay" : "thursday", 43 | "img" : "https://planitdinner.net/uploads/5/2/b/b/2/5/52bb259093bc7b56fd3402deb61624c3/dsc_0978.display.jpg", 44 | "description" : "Many of you have requested slow-cooker meals, and yes, I must agree that they are perfect for busy days. Set it and forget it! Boneless pork ribs turn out fork-tender, with a rich-tasting sauce, which is perfect over pasta or rice. " 45 | 46 | }, 47 | { 48 | "id" : "5", 49 | "title" : "Glazed Turkey Cutlets with Arugula, Carrot and Celery Salad, Orzo with Chives", 50 | "weekDay" : "friday", 51 | "img" : "https://planitdinner.net/uploads/4/0/5/6/2/d/40562df60f6c37fbb03485c024c7193e/dsc_0969-2.display.jpg", 52 | "description" : "This is the ticket to those crazy weeknights, when you need something on the table in a hurry. If you've never eaten turkey cutlets, I urge you to give them a try. But of course, chicken breasts pounded thin would work as well. Who knew something so easy could be so delish?" 53 | 54 | }, 55 | { 56 | "id" : "6", 57 | "title" : "Bruschetta with Fresh Figs and Goat Cheese", 58 | "weekDay" : "weekend", 59 | "img" : "https://planitdinner.net/uploads/3/e/0/a/5/9/3e0a594e2cb190db6d32220819547f40/dsc_0967-5.display.jpg", 60 | "description" : "A perfect way to use the gorgeous figs available right now. This looks so elegant but it so easy to put together. Everyone raved...and I think you will as well. Enjoy!!" 61 | 62 | } 63 | ] 64 | 65 | 66 | }; 67 | -------------------------------------------------------------------------------- /data/img/intro/tomato.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 15 | 24 | 27 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/complex3.json: -------------------------------------------------------------------------------- 1 | 2 | 3 | { 4 | "id": "2", 5 | //"name": "Montreal Style Poutine", 6 | "imageURL": "http://img.sndimg.com/food/image/upload/h_479,w_639,c_fit/v1/img/recipes/51/78/46/BKN9rVETnqVjW3zddIJ1_0S9A4664.jpg", 7 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 8 | 9 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 10 | "ingredients": [ 11 | { 12 | 13 | "unit_type" : "simple", 14 | "quantity" : "3", 15 | "unit_name" : "medium russet potatoes, sliced into sticks", 16 | 17 | "category" : { 18 | "id" : "2", 19 | "name" : "Baking", 20 | } 21 | 22 | 23 | }, 24 | { 25 | 26 | "unit_type" : "simple", 27 | "quantity" : "2", 28 | "unit_name" : "tablespoons vegetable oil, divided", 29 | 30 | "category" : { 31 | "id" : "2", 32 | "name" : "Baking", 33 | } 34 | 35 | 36 | }, 37 | { 38 | 39 | "unit_type" : "simple", 40 | "quantity" : "1", 41 | "unit_name" : "salt & freshly ground black pepper, to taste", 42 | 43 | "category" : { 44 | "id" : "2", 45 | "name" : "Baking", 46 | } 47 | 48 | 49 | }, 50 | { 51 | 52 | "unit_type" : "simple", 53 | "quantity" : "2 chopped", 54 | "unit_name" : "scallions", 55 | 56 | "category" : { 57 | "id" : "1", 58 | "name" : "Meat", 59 | } 60 | 61 | 62 | }, 63 | { 64 | 65 | "unit_type" : "simple", 66 | "quantity" : "1", 67 | "unit_name" : "ounces cheese curds or 6 ounces fresh mozzarella cheese, diced", 68 | 69 | "category" : { 70 | "id" : "4", 71 | "name" : "Drinks", 72 | } 73 | 74 | 75 | } 76 | ], 77 | "steps": [ 78 | "", 79 | "", 80 | "", 81 | "" 82 | ], 83 | "meta": [{ 84 | "prepTime" :"PT30M", 85 | "totalTime" :"PT3H", 86 | "recipeYield" :"8", 87 | "description" : "", 88 | "notes" : "" 89 | }] 90 | } -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/complex3.json: -------------------------------------------------------------------------------- 1 | 2 | 3 | { 4 | "id": "2", 5 | //"name": "Montreal Style Poutine", 6 | "imageURL": "http://img.sndimg.com/food/image/upload/h_479,w_639,c_fit/v1/img/recipes/51/78/46/BKN9rVETnqVjW3zddIJ1_0S9A4664.jpg", 7 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 8 | 9 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 10 | "ingredients": [ 11 | { 12 | 13 | "unit_type" : "simple", 14 | "quantity" : "3", 15 | "unit_name" : "medium russet potatoes, sliced into sticks", 16 | 17 | "category" : { 18 | "id" : "2", 19 | "name" : "Baking", 20 | } 21 | 22 | 23 | }, 24 | { 25 | 26 | "unit_type" : "simple", 27 | "quantity" : "2", 28 | "unit_name" : "tablespoons vegetable oil, divided", 29 | 30 | "category" : { 31 | "id" : "2", 32 | "name" : "Baking", 33 | } 34 | 35 | 36 | }, 37 | { 38 | 39 | "unit_type" : "simple", 40 | "quantity" : "1", 41 | "unit_name" : "salt & freshly ground black pepper, to taste", 42 | 43 | "category" : { 44 | "id" : "2", 45 | "name" : "Baking", 46 | } 47 | 48 | 49 | }, 50 | { 51 | 52 | "unit_type" : "simple", 53 | "quantity" : "2 chopped", 54 | "unit_name" : "scallions", 55 | 56 | "category" : { 57 | "id" : "1", 58 | "name" : "Meat", 59 | } 60 | 61 | 62 | }, 63 | { 64 | 65 | "unit_type" : "simple", 66 | "quantity" : "1", 67 | "unit_name" : "ounces cheese curds or 6 ounces fresh mozzarella cheese, diced", 68 | 69 | "category" : { 70 | "id" : "4", 71 | "name" : "Drinks", 72 | } 73 | 74 | 75 | } 76 | ], 77 | "steps": [ 78 | "", 79 | "", 80 | "", 81 | "" 82 | ], 83 | "meta": [{ 84 | "prepTime" :"PT30M", 85 | "totalTime" :"PT3H", 86 | "recipeYield" :"8", 87 | "description" : "", 88 | "notes" : "" 89 | }] 90 | } -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/jsons/nutritions.txt: -------------------------------------------------------------------------------- 1 | 'showServingUnitQuantity' : false, 2 | 'itemName' : 'Bleu Cheese Dressing', 3 | 'ingredientList' : 'Bleu Cheese Dressing', 4 | 5 | 'decimalPlacesForQuantityTextbox' : 2, 6 | 'valueServingUnitQuantity' : 1, 7 | 8 | 'allowFDARounding' : true, 9 | 'decimalPlacesForNutrition' : 2, 10 | 11 | 'showPolyFat' : false, 12 | 'showMonoFat' : false, 13 | 14 | 'valueCalories' : 450, 15 | 'valueFatCalories' : 430, 16 | 'valueTotalFat' : 48, 17 | 'valueSatFat' : 6, 18 | 'valueTransFat' : 0, 19 | 'valueCholesterol' : 30, 20 | 'valueSodium' : 780, 21 | 'valueTotalCarb' : 3, 22 | 'valueFibers' : 0, 23 | 'valueSugars' : 3, 24 | 'valueProteins' : 3, 25 | 'valueVitaminA' : 1.22, 26 | 'valueVitaminC' : 4.22, 27 | 'valueCalcium' : 7.22, 28 | 'valueIron' : 11.22 29 | 30 | ------------- 31 | 32 | 'ingredientList' : 'Enriched Bleached Wheat Flour (Bleached Flour, Malted Barley Flour, Niacin, Iron, Thiamin Mononitrate, Riboflavin, Folic Acid), Sugar, Vegetable Oil (contains one or more of the following oils: Cottonseed Oil, Palm Oil, Soybean Oil), Water, Hydrogenated Vegetable Oil (Palm Kernel Oil, Palm Oil), High Fructose Corn Syrup, Cocoa Powder (Processed With Alkali), contains 2% or less of the following: Eggs, Nonfat Milk, Glycerin, Soy Flour, Corn Syrup Solids, Leavening (Sodium Acid Pyrophosphate, Baking Soda, Sodium Aluminum Phosphate), Preservatives (Potassium Sorbate, Sodium Propionate, Calcium Propionate), Salt, Distilled Monoglycerides, Dextrose, Food Starch-Modified (Corn and/or Wheat), Soy, Lecithin, Natural and Artificial Flavor, Mono- and Diglycerides, Spices, Tapioca Starch, Wheat Starch, Cellulose Gum, Guar Gum, Karaya Gum, colored with Extracts of Annatto and Turmeric, Artificial Color.', 33 | 34 | 'showPolyFat' : false, 35 | 'showMonoFat' : false, 36 | 'showTransFat' : false, 37 | 'showFibers' : false, 38 | 'showVitaminA' : false, 39 | 'showVitaminC' : false, 40 | 'showCalcium' : false, 41 | 'showIron' : false, 42 | 43 | 'valueServingUnitQuantity' : 6, 44 | 'valueServingSizeUnit' : 'DONUTS', 45 | 46 | 'valueCalories' : 400, 47 | 'valueFatCalories' : 220, 48 | 'valueTotalFat' : 24, 49 | 'valueSatFat' : 15, 50 | 'valueCholesterol' : 25, 51 | 'valueSodium' : 430, 52 | 'valueTotalCarb' : 44, 53 | 'valueSugars' : 24, 54 | 'valueProteins' : 4 55 | 56 | ---- 57 | 'ingredientList' : 'Enriched Bleached Wheat Flour (Bleached Flour, Malted Barley Flour, Niacin, Iron, Thiamin Mononitrate, Riboflavin, Folic Acid), Sugar, Vegetable Oil (contains one or more of the following oils: Cottonseed Oil, Palm Oil, Soybean Oil), Water, Hydrogenated Vegetable Oil (Palm Kernel Oil, Palm Oil), High Fructose Corn Syrup, Cocoa Powder (Processed With Alkali), contains 2% or less of the following: Eggs, Nonfat Milk, Glycerin, Soy Flour, Corn Syrup Solids, Leavening (Sodium Acid Pyrophosphate, Baking Soda, Sodium Aluminum Phosphate), Preservatives (Potassium Sorbate, Sodium Propionate, Calcium Propionate), Salt, Distilled Monoglycerides, Dextrose, Food Starch-Modified (Corn and/or Wheat), Soy, Lecithin, Natural and Artificial Flavor, Mono- and Diglycerides, Spices, Tapioca Starch, Wheat Starch, Cellulose Gum, Guar Gum, Karaya Gum, colored with Extracts of Annatto and Turmeric, Artificial Color.', 58 | 59 | 'showPolyFat' : false, 60 | 'showMonoFat' : false, 61 | 'showTransFat' : false, 62 | 'showFibers' : false, 63 | 'showVitaminA' : false, 64 | 'showVitaminC' : false, 65 | 'showCalcium' : false, 66 | 'showIron' : false, 67 | 68 | 'valueServingUnitQuantity' : 6, 69 | 'valueServingSizeUnit' : 'DONUTS', 70 | 71 | 'valueCalories' : 400, 72 | 'valueFatCalories' : 220, 73 | 'valueTotalFat' : 24, 74 | 'valueSatFat' : 15, 75 | 'valueCholesterol' : 25, 76 | 'valueSodium' : 430, 77 | 'valueTotalCarb' : 44, 78 | 'valueSugars' : 24, 79 | 'valueProteins' : 4 -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/jsons/nutritions.txt: -------------------------------------------------------------------------------- 1 | 'showServingUnitQuantity' : false, 2 | 'itemName' : 'Bleu Cheese Dressing', 3 | 'ingredientList' : 'Bleu Cheese Dressing', 4 | 5 | 'decimalPlacesForQuantityTextbox' : 2, 6 | 'valueServingUnitQuantity' : 1, 7 | 8 | 'allowFDARounding' : true, 9 | 'decimalPlacesForNutrition' : 2, 10 | 11 | 'showPolyFat' : false, 12 | 'showMonoFat' : false, 13 | 14 | 'valueCalories' : 450, 15 | 'valueFatCalories' : 430, 16 | 'valueTotalFat' : 48, 17 | 'valueSatFat' : 6, 18 | 'valueTransFat' : 0, 19 | 'valueCholesterol' : 30, 20 | 'valueSodium' : 780, 21 | 'valueTotalCarb' : 3, 22 | 'valueFibers' : 0, 23 | 'valueSugars' : 3, 24 | 'valueProteins' : 3, 25 | 'valueVitaminA' : 1.22, 26 | 'valueVitaminC' : 4.22, 27 | 'valueCalcium' : 7.22, 28 | 'valueIron' : 11.22 29 | 30 | ------------- 31 | 32 | 'ingredientList' : 'Enriched Bleached Wheat Flour (Bleached Flour, Malted Barley Flour, Niacin, Iron, Thiamin Mononitrate, Riboflavin, Folic Acid), Sugar, Vegetable Oil (contains one or more of the following oils: Cottonseed Oil, Palm Oil, Soybean Oil), Water, Hydrogenated Vegetable Oil (Palm Kernel Oil, Palm Oil), High Fructose Corn Syrup, Cocoa Powder (Processed With Alkali), contains 2% or less of the following: Eggs, Nonfat Milk, Glycerin, Soy Flour, Corn Syrup Solids, Leavening (Sodium Acid Pyrophosphate, Baking Soda, Sodium Aluminum Phosphate), Preservatives (Potassium Sorbate, Sodium Propionate, Calcium Propionate), Salt, Distilled Monoglycerides, Dextrose, Food Starch-Modified (Corn and/or Wheat), Soy, Lecithin, Natural and Artificial Flavor, Mono- and Diglycerides, Spices, Tapioca Starch, Wheat Starch, Cellulose Gum, Guar Gum, Karaya Gum, colored with Extracts of Annatto and Turmeric, Artificial Color.', 33 | 34 | 'showPolyFat' : false, 35 | 'showMonoFat' : false, 36 | 'showTransFat' : false, 37 | 'showFibers' : false, 38 | 'showVitaminA' : false, 39 | 'showVitaminC' : false, 40 | 'showCalcium' : false, 41 | 'showIron' : false, 42 | 43 | 'valueServingUnitQuantity' : 6, 44 | 'valueServingSizeUnit' : 'DONUTS', 45 | 46 | 'valueCalories' : 400, 47 | 'valueFatCalories' : 220, 48 | 'valueTotalFat' : 24, 49 | 'valueSatFat' : 15, 50 | 'valueCholesterol' : 25, 51 | 'valueSodium' : 430, 52 | 'valueTotalCarb' : 44, 53 | 'valueSugars' : 24, 54 | 'valueProteins' : 4 55 | 56 | ---- 57 | 'ingredientList' : 'Enriched Bleached Wheat Flour (Bleached Flour, Malted Barley Flour, Niacin, Iron, Thiamin Mononitrate, Riboflavin, Folic Acid), Sugar, Vegetable Oil (contains one or more of the following oils: Cottonseed Oil, Palm Oil, Soybean Oil), Water, Hydrogenated Vegetable Oil (Palm Kernel Oil, Palm Oil), High Fructose Corn Syrup, Cocoa Powder (Processed With Alkali), contains 2% or less of the following: Eggs, Nonfat Milk, Glycerin, Soy Flour, Corn Syrup Solids, Leavening (Sodium Acid Pyrophosphate, Baking Soda, Sodium Aluminum Phosphate), Preservatives (Potassium Sorbate, Sodium Propionate, Calcium Propionate), Salt, Distilled Monoglycerides, Dextrose, Food Starch-Modified (Corn and/or Wheat), Soy, Lecithin, Natural and Artificial Flavor, Mono- and Diglycerides, Spices, Tapioca Starch, Wheat Starch, Cellulose Gum, Guar Gum, Karaya Gum, colored with Extracts of Annatto and Turmeric, Artificial Color.', 58 | 59 | 'showPolyFat' : false, 60 | 'showMonoFat' : false, 61 | 'showTransFat' : false, 62 | 'showFibers' : false, 63 | 'showVitaminA' : false, 64 | 'showVitaminC' : false, 65 | 'showCalcium' : false, 66 | 'showIron' : false, 67 | 68 | 'valueServingUnitQuantity' : 6, 69 | 'valueServingSizeUnit' : 'DONUTS', 70 | 71 | 'valueCalories' : 400, 72 | 'valueFatCalories' : 220, 73 | 'valueTotalFat' : 24, 74 | 'valueSatFat' : 15, 75 | 'valueCholesterol' : 25, 76 | 'valueSodium' : 430, 77 | 'valueTotalCarb' : 44, 78 | 'valueSugars' : 24, 79 | 'valueProteins' : 4 -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/from-recipe-api-server/search/courses.js: -------------------------------------------------------------------------------- 1 | 2 | var courses = [ 3 | { 4 | // "id":"course-Main Dishes", 5 | "name":"Main Dishes", 6 | "type":"course", 7 | // "description":"Main Dishes", 8 | // "searchValue":"course^course-Main Dishes", 9 | // "localesAvailableIn":["en-US"] 10 | }, 11 | { 12 | // "id":"course-Desserts", 13 | "name":"Desserts", 14 | "type":"course", 15 | // "description":"Desserts", 16 | // "searchValue":"course^course-Desserts", 17 | // "localesAvailableIn":["en-US"] 18 | }, 19 | { 20 | // "id":"course-Side Dishes", 21 | "name":"Side Dishes", 22 | "type":"course", 23 | // "description":"Side Dishes", 24 | // "searchValue":"course^course-Side Dishes", 25 | // "localesAvailableIn":["en-US"] 26 | }, 27 | { 28 | // "id":"course-Appetizers", 29 | "name":"Appetizers", 30 | "type":"course", 31 | // "description":"Appetizers", 32 | // "searchValue":"course^course-Appetizers", 33 | // "localesAvailableIn":["en-US"] 34 | }, 35 | { 36 | // "id":"course-Salads", 37 | "name":"Salads", 38 | "type":"course", 39 | // "description":"Salads", 40 | // "searchValue":"course^course-Salads", 41 | // "localesAvailableIn":["en-US"] 42 | }, 43 | { 44 | // "id":"course-Breakfast and Brunch", 45 | "name":"Breakfast and Brunch", 46 | "type":"course", 47 | // "description":"Breakfast and Brunch", 48 | // "searchValue":"course^course-Breakfast and Brunch", 49 | // "localesAvailableIn":["en-US"] 50 | }, 51 | { 52 | // "id":"course-Breads", 53 | "name":"Breads", 54 | "type":"course", 55 | // "description":"Breads", 56 | // "searchValue":"course^course-Breads", 57 | // "localesAvailableIn":["en-US"] 58 | }, 59 | { 60 | // "id":"course-Soups", 61 | "name":"Soups", 62 | "type":"course", 63 | // "description":"Soups", 64 | // "searchValue":"course^course-Soups", 65 | // "localesAvailableIn":["en-US"] 66 | }, 67 | { 68 | // "id":"course-Beverages", 69 | "name":"Beverages", 70 | "type":"course", 71 | // "description":"Beverages", 72 | // "searchValue":"course^course-Beverages", 73 | // "localesAvailableIn":["en-US"] 74 | }, 75 | { 76 | // "id":"course-Condiments and Sauces", 77 | "name":"Condiments and Sauces", 78 | "type":"course", 79 | // "description":"Condiments and Sauces", 80 | // "searchValue":"course^course-Condiments and Sauces", 81 | // "localesAvailableIn":["en-US"] 82 | }, 83 | { 84 | // "id":"course-Cocktails", 85 | "name":"Cocktails", 86 | "type":"course", 87 | // "description":"Cocktails", 88 | // "searchValue":"course^course-Cocktails", 89 | // "localesAvailableIn":["en-US"] 90 | }, 91 | { 92 | // "id":"course-Snacks", 93 | "name":"Snacks", 94 | "type":"course", 95 | // "description":"Snacks", 96 | // "searchValue":"course^course-Snacks", 97 | // "localesAvailableIn":["en-US"] 98 | }, 99 | { 100 | // "id":"course-Lunch", 101 | "name":"Lunch", 102 | "type":"course", 103 | // "description":"Lunch", 104 | // "searchValue":"course^course-Lunch", 105 | // "localesAvailableIn":["en-US"] 106 | } 107 | ]; 108 | -------------------------------------------------------------------------------- /data/img/intro/cheese.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 17 | 23 | 25 | 27 | 29 | 31 | 33 | 35 | 37 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /data/img/intro/doughnut.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 12 | 15 | 19 | 23 | 25 | 28 | 31 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /data/img/intro/salad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 16 | 25 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /data/json-db-sample/old-n-unsorted-json/complex4.json: -------------------------------------------------------------------------------- 1 | Slow Cooker Beef Bolognaise and Simple Green Beans 2 | 3 | { 4 | "id": "2", 5 | //"name": "Montreal Style Poutine", 6 | "imageURL": "http://img.sndimg.com/food/image/upload/h_479,w_639,c_fit/v1/img/recipes/51/78/46/BKN9rVETnqVjW3zddIJ1_0S9A4664.jpg", 7 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 8 | 9 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 10 | "ingredients": [ 11 | { 12 | 13 | "unit_type" : "simple", 14 | "quantity" : "3", 15 | "unit_name" : "medium russet potatoes, sliced into sticks", 16 | 17 | "category" : { 18 | "id" : "2", 19 | "name" : "Baking", 20 | } 21 | 22 | 23 | }, 24 | { 25 | 26 | "unit_type" : "simple", 27 | "quantity" : "2", 28 | "unit_name" : "tablespoons vegetable oil, divided", 29 | 30 | "category" : { 31 | "id" : "2", 32 | "name" : "Baking", 33 | } 34 | 35 | 36 | }, 37 | { 38 | 39 | "unit_type" : "simple", 40 | "quantity" : "1", 41 | "unit_name" : "salt & freshly ground black pepper, to taste", 42 | 43 | "category" : { 44 | "id" : "2", 45 | "name" : "Baking", 46 | } 47 | 48 | 49 | }, 50 | { 51 | 52 | "unit_type" : "simple", 53 | "quantity" : "2 chopped", 54 | "unit_name" : "scallions", 55 | 56 | "category" : { 57 | "id" : "1", 58 | "name" : "Meat", 59 | } 60 | 61 | 62 | }, 63 | { 64 | 65 | "unit_type" : "simple", 66 | "quantity" : "1", 67 | "unit_name" : "ounces cheese curds or 6 ounces fresh mozzarella cheese, diced", 68 | 69 | "category" : { 70 | "id" : "4", 71 | "name" : "Drinks", 72 | } 73 | 74 | 75 | } 76 | ], 77 | "steps": [ 78 | "Set the oven to 400 degrees F.", 79 | "Pour 1 tablespoon of vegetable oil onto a baking sheet. Spread the oil around, then spread out the sticks of sliced potato.", 80 | "Meanwhile, prepare the gravy. Melt the butter in a saucepan on medium heat.", 81 | "Dice the cheese." 82 | ], 83 | "meta": [{ 84 | "prepTime" :"PT10M", 85 | "totalTime" :"", 86 | "recipeYield" :"4", 87 | "description" : "Pull out the slow cooker! This is a fabulous sauce and is packed with flavor! If spaghetti with meat sauce is a favorite at your house like it is at mine, double the recipe. It keeps in the freezer for months. Our family prefers spaghetti, but I really like rigatoni. The holes grab onto the sauce! A few green beans or a side salad and you’re set!", 88 | "notes" : "KID NOTE: After they got over the fact that there were carrots in the ‘spaghetti sauce’, it was smooth sailing and clean plates all around!
89 | VEGETARIAN TIP: Omit the beef and add a pound of chopped baby bella mushrooms.
90 | GLUTEN MODIFICATIONS: Use brown rice pasta." 91 | }] 92 | } -------------------------------------------------------------------------------- /src/assets/data/json-db-sample/old-n-unsorted-json/complex4.json: -------------------------------------------------------------------------------- 1 | Slow Cooker Beef Bolognaise and Simple Green Beans 2 | 3 | { 4 | "id": "2", 5 | //"name": "Montreal Style Poutine", 6 | "imageURL": "http://img.sndimg.com/food/image/upload/h_479,w_639,c_fit/v1/img/recipes/51/78/46/BKN9rVETnqVjW3zddIJ1_0S9A4664.jpg", 7 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 8 | 9 | "title" : "Baked Chicken Chimichangas, Borracho Beans", 10 | "ingredients": [ 11 | { 12 | 13 | "unit_type" : "simple", 14 | "quantity" : "3", 15 | "unit_name" : "medium russet potatoes, sliced into sticks", 16 | 17 | "category" : { 18 | "id" : "2", 19 | "name" : "Baking", 20 | } 21 | 22 | 23 | }, 24 | { 25 | 26 | "unit_type" : "simple", 27 | "quantity" : "2", 28 | "unit_name" : "tablespoons vegetable oil, divided", 29 | 30 | "category" : { 31 | "id" : "2", 32 | "name" : "Baking", 33 | } 34 | 35 | 36 | }, 37 | { 38 | 39 | "unit_type" : "simple", 40 | "quantity" : "1", 41 | "unit_name" : "salt & freshly ground black pepper, to taste", 42 | 43 | "category" : { 44 | "id" : "2", 45 | "name" : "Baking", 46 | } 47 | 48 | 49 | }, 50 | { 51 | 52 | "unit_type" : "simple", 53 | "quantity" : "2 chopped", 54 | "unit_name" : "scallions", 55 | 56 | "category" : { 57 | "id" : "1", 58 | "name" : "Meat", 59 | } 60 | 61 | 62 | }, 63 | { 64 | 65 | "unit_type" : "simple", 66 | "quantity" : "1", 67 | "unit_name" : "ounces cheese curds or 6 ounces fresh mozzarella cheese, diced", 68 | 69 | "category" : { 70 | "id" : "4", 71 | "name" : "Drinks", 72 | } 73 | 74 | 75 | } 76 | ], 77 | "steps": [ 78 | "Set the oven to 400 degrees F.", 79 | "Pour 1 tablespoon of vegetable oil onto a baking sheet. Spread the oil around, then spread out the sticks of sliced potato.", 80 | "Meanwhile, prepare the gravy. Melt the butter in a saucepan on medium heat.", 81 | "Dice the cheese." 82 | ], 83 | "meta": [{ 84 | "prepTime" :"PT10M", 85 | "totalTime" :"", 86 | "recipeYield" :"4", 87 | "description" : "Pull out the slow cooker! This is a fabulous sauce and is packed with flavor! If spaghetti with meat sauce is a favorite at your house like it is at mine, double the recipe. It keeps in the freezer for months. Our family prefers spaghetti, but I really like rigatoni. The holes grab onto the sauce! A few green beans or a side salad and you’re set!", 88 | "notes" : "KID NOTE: After they got over the fact that there were carrots in the ‘spaghetti sauce’, it was smooth sailing and clean plates all around!
89 | VEGETARIAN TIP: Omit the beef and add a pound of chopped baby bella mushrooms.
90 | GLUTEN MODIFICATIONS: Use brown rice pasta." 91 | }] 92 | } -------------------------------------------------------------------------------- /data/json-db-sample/app-ready-samples/menu/Readme.md: -------------------------------------------------------------------------------- 1 | * Weekly Menu 2 | have one big array that have all the data related to whole project 3 | 4 | Sample: 5 | 6 | ``"meta" : { 7 | "id" : "1", 8 | "user_id" : "", 9 | "title" : "September 5 - 11", 10 | "created_at" : "09/02/16", 11 | 12 | "description" : "Happy Labor Day Weekend!! " 13 | 14 | }, 15 | 16 | 17 | "items" : [ 18 | { 19 | "id" : "1", 20 | "weekDay" : "monday", 21 | "recipes" : [{ 22 | "id": "1", 23 | "name": "Crock Pot Roast", 24 | "img": "http://img.sndimg.com/food/image/upload/w_266/v1/img/recipes/27/20/8/picVfzLZo.jpg", 25 | "originalURL": "http://www.food.com/recipe/to-die-for-crock-pot-roast-27208", 26 | 27 | "title" : "Shrimp and Green Chili Grits, Simple Salad and Basic Vinaigrette", 28 | "ingredients": [ 29 | { 30 | 31 | "unit_type" : "simple", 32 | "quantity" : "1", 33 | 34 | "unit_name" : "beef roast", 35 | 36 | "department" : { 37 | "id" : "1", 38 | "name" : "Meat" 39 | 40 | } 41 | 42 | 43 | 44 | }, 45 | { 46 | 47 | "unit_type" : "simple", 48 | "quantity" : "1 package", 49 | "name" : "brown gravy mix", 50 | 51 | "department" : { 52 | "id" : "2", 53 | 54 | "name" : "Baking" 55 | 56 | } 57 | 58 | 59 | }, 60 | { 61 | 62 | "unit_type" : "simple", 63 | "quantity" : "1 package", 64 | "unit_name" : "dried Italian salad dressing mix", 65 | 66 | "department" : { 67 | "id" : "3", 68 | "name" : "Condiments" 69 | 70 | } 71 | 72 | 73 | }, 74 | { 75 | 76 | "unit_type" : "simple", 77 | "quantity" : "1 package", 78 | "unit_name" : "dry ranch dressing mix", 79 | 80 | "department" : { 81 | "id" : "3", 82 | 83 | "name" : "Condiments" 84 | 85 | } 86 | 87 | }, 88 | { 89 | 90 | "unit_type" : "simple", 91 | "quantity" : "1/2 cup", 92 | "unit_name" : "water", 93 | 94 | "department" : { 95 | "id" : "4", 96 | "name" : "Drinks" 97 | 98 | } 99 | 100 | 101 | } 102 | ], 103 | "steps": [ 104 | "Place beef roast in crock pot.", 105 | "Mix the dried mixes together in a bowl and sprinkle over the roast.", 106 | "Pour the water around the roast.", 107 | "Cook on low for 7-9 hours." 108 | ], 109 | "meta": [{ 110 | "prepTime" :"30min", 111 | "totalTime" :"3h", 112 | "recipeYield" :"8", 113 | 114 | "description" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! ", 115 | "notes" : "" 116 | 117 | } 118 | ] 119 | } 120 | ], 121 | 122 | "nutritions": { 123 | "calories" : 450, 124 | "fat_calories" : 430, 125 | "total_fat" : 48, 126 | "sat_fat" : 6, 127 | "trans_fat" : 0, 128 | "cholesterol" : 30, 129 | "sodium" : 780, 130 | "total_carb" : 3, 131 | "fibers" : 0, 132 | "sugars" : 3, 133 | "proteins" : 3, 134 | "vitamins" : { 135 | "a" : 1.22, 136 | "c" : 4.22 137 | }, 138 | "calcium" : 7.22, 139 | "iron" : 11.22 140 | }, 141 | 142 | "title" : "Pimento Cheeseburgers, Roasted Gold Potatoes", 143 | 144 | "img" : "https://planitdinner.net/uploads/8/8/9/d/0/2/889d028702ff76b383f7cc8ef203ba99/dsc_0969.list.jpg", 145 | "recipeDescription" : "Don't get me started on these bad boys! Awesome! Yes, that's a good description! " 146 | 147 | } 148 | -------------------------------------------------------------------------------- /data/src/Intro/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 13 | 17 | 18 | 19 | 20 | 24 | 28 | 29 | 30 | 31 | 32 | 33 |
34 | 35 |
36 | Weekly Menu 37 |
38 | 43 | 44 |
45 | 46 | 47 |
48 |
49 |

Explore

50 |

Bla bla awesome recipes inside

51 | 52 |
53 | 54 |
55 |
56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |

Thank you for choosing the Awesome App!

64 | 67 |

68 | We've worked super hard to make you happy. 69 |

70 |

71 | But if you are angry, too bad. 72 |

73 | 74 | 75 |
76 | 77 | 78 |

Weekly Menu

79 | 80 |
81 |
Just three steps:
82 |
    83 |
  1. Be awesome
  2. 84 |
  3. Stay awesome
  4. 85 |
  5. There is no step 3
  6. 86 |
87 |
88 |
89 | 90 | 91 | 92 |

Grocery List

93 |

94 | So cool 95 |

96 |
97 | 98 | 99 |

Recipe Calendar

100 |

101 | So cool 102 |

103 |
104 | 105 |
106 | 107 | 108 | 109 | 110 | 111 | 116 | 117 | 141 | 142 | 143 | 144 |
145 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React Native Recipe App 2 | 3 | Some details was structured and published on Medium: 4 | - https://medium.com/quick-code/if-you-have-recipe-based-website-and-want-to-have-an-application-too-5da1a17737d8 5 | - https://medium.com/quick-code/how-i-plan-to-get-from-app-idea-into-working-prototype-food-tech-92f1fdcc432a 6 | 7 | 8 | 9 | 10 | ## Table of Contents 11 | 12 | * [Updating to New Releases](#updating-to-new-releases) 13 | * [Release 2 - Authentication](#) 14 | 15 | ## Updating to New Releases 16 | 17 | 18 | ## Release 2 - Authentication 19 | 20 | - Facebook login button first version 21 | - Auth with tokens can be handled with help of our Recipe API. 22 | 23 | ## Release 3 - Payments 24 | 25 | - Connect Paddle.js, enable recurring payments. 26 | - In-app purchases 27 | - Enable Recurly is a next priority thing 28 | 29 | ## Recipe App React Native Live 30 | 31 | [Snack Expo Link](https://snack.expo.io/@sofianed/recipe-app) 32 | 33 | 34 | ## App Overview 35 | 36 | 37 | - Data can be stored as JSON or call server from option#3 38 | - For UI we will use some creative and free ui template — react based 39 | 40 | 41 | Basic functionality: 42 | 43 | - Screen with recipes list 44 | - Recipe details 45 | - Basic grocery list 46 | - Login screen. 47 | 48 | 49 | 50 | [comment]: <> Shopmate keeps track of items for a grocery shopping list. Each added item is displayed in the main user page. If items are favorited, they will be displayed under the favorites page. 51 | [comment]: <> Items displayed on users board, can be clicked to open a show page for more information or be edited if necessary. 52 | [comment]: <> This application features authentication of a user after registration and login. User will only see the navigation bar if currently in session. 53 | 54 | ## Build with 55 | - React Native 56 | 57 | 58 | ## Wireframes from Ionic app development 59 | 60 | [comment]: <> [Wireframe File] (https://google.com) 61 | 62 | #### styled recipe screen 63 | ![styled recipe screen](https://github.com/ChickenKyiv/creative/blob/master/app/1_slfggOuPcZ10E0xm2MZKfw.png) 64 | 65 | #### recipe calendar 66 | ![recipe calendar](https://github.com/ChickenKyiv/creative/blob/master/app/1_2sthKHDI4MT5a0cIFDhGfA.png) 67 | 68 | #### grocery list settings 69 | ![grocery list settings](https://github.com/ChickenKyiv/creative/blob/master/app/1_6FESeKqa4QMxy0_G5UkOuQ.png) 70 | 71 | #### login 72 | ![login](https://github.com/ChickenKyiv/creative/blob/master/app/1_7JdBzPnDtKvDveXd8VT6Ww.png) 73 | 74 | #### Styled recipe screen 75 | ![Styled recipe screen](https://github.com/ChickenKyiv/creative/blob/master/app/1_BOKv1qUDyxiRkyJumsGldw.png) 76 | #### styled recipe 77 | ![styled recipe](https://github.com/ChickenKyiv/creative/blob/master/app/1_Gp6Y81Qa-BxjDNZM8sOEsQ.png) 78 | #### menu 79 | ![menu](https://github.com/ChickenKyiv/creative/blob/master/app/1_JwzRULKEXkj_s3_1YZTD5w.png) 80 | #### weekly menu 81 | ![weekly menu](https://github.com/ChickenKyiv/creative/blob/master/app/1_M_SryfXo-g7sUCkb8onMoQ.png) 82 | #### directions 83 | ![directions](https://github.com/ChickenKyiv/creative/blob/master/app/1_Nuje-74uy-afl_Jj_a0hLg.png) 84 | #### single recipe 85 | ![single recipe](https://github.com/ChickenKyiv/creative/blob/master/app/1_QgbcEQEfNZykDqDdQgK2zQ.png 86 | ) 87 | #### Dry Goods ingredient category example 88 | ![Dry Goods ingredient category example](https://github.com/ChickenKyiv/creative/blob/master/app/1_VCb2IRNZKeOMFomSNl822g.png) 89 | 90 | #### single recipe 91 | ![single recipe](https://github.com/ChickenKyiv/creative/blob/master/app/1_VgBsGsmnh8KVbLl5zXrRVg.png) 92 | 93 | #### free recipe list 94 | ![free recipe list](https://github.com/ChickenKyiv/creative/blob/master/app/1_ZxOtsHs2uy7Dr-cFYPfHNw.png) 95 | 96 | #### login 97 | ![login](https://github.com/ChickenKyiv/creative/blob/master/app/1_nP7z3x6XyMVtqzn2GKtzKA.png) 98 | 99 | #### recipe screen 100 | ![recipe screen](https://github.com/ChickenKyiv/creative/blob/master/app/1_VgBsGsmnh8KVbLl5zXrRVg.png) 101 | 102 | #### grocery list 103 | ![grocery list](https://github.com/ChickenKyiv/creative/blob/master/app/1_nprlmKfB0mK3iGEMyBzxUQ.png) 104 | 105 | #### recipe 106 | ![recipe](https://github.com/ChickenKyiv/creative/blob/master/app/1_oeHStaREVxroqXwrWi378w.png) 107 | 108 | #### ingredients 109 | ![ingredients](https://github.com/ChickenKyiv/creative/blob/master/app/1_rEI_KD1wAwgyVPmDKD1jtQ.png) 110 | 111 | 112 | 113 | 114 | ## User Stories 115 | 116 | User can: 117 | * Create an account 118 | * Successfully login 119 | * Add items to the shopping list 120 | * Edit items previously created 121 | * Delete items from grocery list 122 | * Mark items as purchased 123 | * Mark items as favorites 124 | * View all favorite items in one page 125 | * Click on item to get more information about item 126 | * User can logout 127 | 128 | ## Unsolved Features (during process) 129 | 130 | * 131 | * 132 | 133 | ## Stretch Goals (wish list) 134 | 135 | * A view of commonly purchased items 136 | * An option where user could mark as purchased multiple items 137 | * An option where user can add items to grocery list from favorited or commonly purchased items 138 | * Create a family option where family members can contribute to the list 139 | * Use API to get detailed data for grocery items 140 | 141 | ## Models Used 142 | 143 | 144 | 145 | ### Copyrights 146 | Art used: 147 | -------------------------------------------------------------------------------- /src/components/GroceryListSettings/index.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { View, Text, Switch, ScrollView} from 'react-native'; 3 | import { Button, List, ListItem } from 'react-native-elements'; 4 | import { Dropdown } from 'react-native-material-dropdown'; 5 | import CheckBox from 'react-native-checkbox'; 6 | 7 | import styles from './styles'; 8 | 9 | class GroceryListSettings extends Component { 10 | render() { 11 | 12 | let data = [{ 13 | value: '1', 14 | }, { 15 | value: '2', 16 | }, { 17 | value: '3', 18 | }, 19 | { 20 | value: '4', 21 | }]; 22 | 23 | return ( 24 | 25 |