├── src ├── react-app-env.d.ts ├── data │ ├── ProductStore.js │ ├── CartStore.js │ ├── FavouritesStore.js │ └── fetcher.js ├── pages │ ├── CategoryProducts.module.css │ ├── CartProducts.module.css │ ├── Home.module.css │ ├── Product.module.css │ ├── Home.js │ ├── FavouriteProducts.js │ ├── CategoryProducts.js │ ├── CartProducts.js │ └── Product.js ├── index.js ├── components │ ├── ProductCard.module.css │ └── ProductCard.js ├── App.js └── theme │ └── variables.css ├── ios ├── App │ ├── App │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── Splash.imageset │ │ │ │ ├── splash-2732x2732.png │ │ │ │ ├── splash-2732x2732-1.png │ │ │ │ ├── splash-2732x2732-2.png │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── AppIcon-20x20@1x.png │ │ │ │ ├── AppIcon-20x20@2x.png │ │ │ │ ├── AppIcon-20x20@3x.png │ │ │ │ ├── AppIcon-29x29@1x.png │ │ │ │ ├── AppIcon-29x29@2x.png │ │ │ │ ├── AppIcon-29x29@3x.png │ │ │ │ ├── AppIcon-40x40@1x.png │ │ │ │ ├── AppIcon-40x40@2x.png │ │ │ │ ├── AppIcon-40x40@3x.png │ │ │ │ ├── AppIcon-512@2x.png │ │ │ │ ├── AppIcon-60x60@2x.png │ │ │ │ ├── AppIcon-60x60@3x.png │ │ │ │ ├── AppIcon-76x76@1x.png │ │ │ │ ├── AppIcon-76x76@2x.png │ │ │ │ ├── AppIcon-20x20@2x-1.png │ │ │ │ ├── AppIcon-29x29@2x-1.png │ │ │ │ ├── AppIcon-40x40@2x-1.png │ │ │ │ ├── AppIcon-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── config.xml │ │ ├── capacitor.config.json │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ ├── Info.plist │ │ └── AppDelegate.swift │ ├── App.xcodeproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── project.pbxproj │ ├── App.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Podfile └── .gitignore ├── public ├── assets │ ├── icon │ │ ├── icon.png │ │ └── favicon.png │ └── shapes.svg ├── manifest.json ├── index.html └── products │ ├── cushions.json │ ├── office_chairs.json │ ├── chairs.json │ ├── coffee_tables.json │ ├── floor_lamps.json │ ├── beds.json │ └── armchairs.json ├── ionic.config.json ├── capacitor.config.json ├── .gitignore ├── README.md └── package.json /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /public/assets/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/public/assets/icon/icon.png -------------------------------------------------------------------------------- /public/assets/icon/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/public/assets/icon/favicon.png -------------------------------------------------------------------------------- /src/data/ProductStore.js: -------------------------------------------------------------------------------- 1 | import { Store } from "pullstate"; 2 | 3 | export const ProductStore = new Store({ 4 | 5 | products: [] 6 | }); -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic-ecommerce-example", 3 | "integrations": { 4 | "capacitor": {} 5 | }, 6 | "type": "react" 7 | } 8 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-60x60@3x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@1x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-76x76@2x.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-20x20@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-29x29@2x-1.png -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-40x40@2x-1.png -------------------------------------------------------------------------------- /src/pages/CategoryProducts.module.css: -------------------------------------------------------------------------------- 1 | .categoryPage ion-toolbar { 2 | 3 | --border-style: none; 4 | } 5 | 6 | .search { 7 | 8 | --background: rgb(240, 240, 240); 9 | --color: black; 10 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alanmontgomery/ionic-ecommerce-example/HEAD/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/App/App/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById('root') 10 | ); 11 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | # NPM renames .gitignore to .npmignore 2 | # In order to prevent that, we remove the initial "." 3 | # And the CLI then renames it 4 | 5 | App/build 6 | App/Pods 7 | App/public 8 | App/Podfile.lock 9 | xcuserdata 10 | 11 | # Cordova plugins for Capacitor 12 | capacitor-cordova-ios-plugins 13 | 14 | -------------------------------------------------------------------------------- /capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "io.ionic.starter", 3 | "appName": "ionic-ecommerce-example", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "build", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchShowDuration": 0 10 | } 11 | }, 12 | "cordova": {} 13 | } 14 | -------------------------------------------------------------------------------- /ios/App/App.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/App/App/capacitor.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "appId": "io.ionic.starter", 3 | "appName": "ionic-ecommerce-example", 4 | "bundledWebRuntime": false, 5 | "npmClient": "npm", 6 | "webDir": "build", 7 | "plugins": { 8 | "SplashScreen": { 9 | "launchShowDuration": 0 10 | } 11 | }, 12 | "cordova": {} 13 | } 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | .vscode 21 | .idea 22 | 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # Optional eslint cache 28 | .eslintcache 29 | -------------------------------------------------------------------------------- /src/data/CartStore.js: -------------------------------------------------------------------------------- 1 | import { Store } from "pullstate"; 2 | 3 | export const CartStore = new Store({ 4 | 5 | total: 0, 6 | product_ids: [] 7 | }); 8 | 9 | export const addToCart = (categorySlug, productID) => { 10 | 11 | CartStore.update(s => { s.product_ids = [ ...s.product_ids, `${ categorySlug }/${ parseInt(productID) }` ]; }); 12 | } 13 | 14 | export const removeFromCart = productIndex => { 15 | 16 | CartStore.update(s => { s.product_ids.splice(productIndex, 1) }); 17 | } -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Ionic App", 3 | "name": "My Ionic App", 4 | "icons": [ 5 | { 6 | "src": "assets/icon/favicon.png", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "assets/icon/icon.png", 12 | "type": "image/png", 13 | "sizes": "512x512", 14 | "purpose": "maskable" 15 | } 16 | ], 17 | "start_url": ".", 18 | "display": "standalone", 19 | "theme_color": "#ffffff", 20 | "background_color": "#ffffff" 21 | } 22 | -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/Splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "splash-2732x2732-2.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "splash-2732x2732-1.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "splash-2732x2732.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /src/data/FavouritesStore.js: -------------------------------------------------------------------------------- 1 | import { Store } from "pullstate"; 2 | 3 | export const FavouritesStore = new Store({ 4 | 5 | total: 0, 6 | product_ids: [] 7 | }); 8 | 9 | export const addToFavourites = (categorySlug, productID) => { 10 | FavouritesStore.update(s => { 11 | if (s.product_ids.find(id => id === `${ categorySlug }/${ parseInt(productID) }`)) { 12 | s.product_ids = s.product_ids.filter(id => id !== `${ categorySlug }/${ parseInt(productID) }`); 13 | } else { 14 | s.product_ids = [ ...s.product_ids, `${ categorySlug }/${ parseInt(productID) }` ]; 15 | } 16 | }); 17 | } -------------------------------------------------------------------------------- /ios/App/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '11.0' 2 | use_frameworks! 3 | 4 | # workaround to avoid Xcode caching of Pods that requires 5 | # Product -> Clean Build Folder after new Cordova plugins installed 6 | # Requires CocoaPods 1.6 or newer 7 | install! 'cocoapods', :disable_input_output_paths => true 8 | 9 | def capacitor_pods 10 | # Automatic Capacitor Pod dependencies, do not delete 11 | pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' 12 | pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' 13 | 14 | # Do not delete 15 | end 16 | 17 | target 'App' do 18 | capacitor_pods 19 | # Add your Pods here 20 | end 21 | -------------------------------------------------------------------------------- /src/pages/CartProducts.module.css: -------------------------------------------------------------------------------- 1 | .cartCheckout { 2 | 3 | display: flex; 4 | flex-direction: row; 5 | justify-content: space-between; 6 | align-items: center; 7 | align-content: center; 8 | margin: 1rem; 9 | } 10 | 11 | .cartFooter { 12 | 13 | border-top: 2px solid rgb(200, 200, 200); 14 | background-color: white; 15 | } 16 | 17 | .cartCheckout ion-card-subtitle { 18 | 19 | font-size: 1.3rem; 20 | } 21 | 22 | .cartItem ion-avatar { 23 | 24 | height: 4rem; 25 | width: 4rem; 26 | } 27 | 28 | .cartSlider:not(:nth-child(1)) { 29 | 30 | border-top: 2px solid rgb(236, 236, 236); 31 | } 32 | 33 | .cartActions { 34 | 35 | display: flex; 36 | flex-direction: column; 37 | } -------------------------------------------------------------------------------- /src/pages/Home.module.css: -------------------------------------------------------------------------------- 1 | .homePage ion-toolbar { 2 | 3 | --border-style: none; 4 | } 5 | 6 | .logo { 7 | 8 | margin-top: 0.25rem; 9 | color: var(--ion-color-primary); 10 | } 11 | 12 | .categoryCard, 13 | .categoryCardContent { 14 | 15 | display: flex; 16 | flex-direction: column; 17 | justify-content: center; 18 | align-content: center; 19 | align-items: center; 20 | } 21 | 22 | .categoryCardContent ion-button { 23 | 24 | height: 1.5rem; 25 | font-size: 0.8rem; 26 | } 27 | 28 | .categoryCardContent { 29 | 30 | background-color: rgb(238, 238, 238); 31 | } 32 | 33 | .categoryCardContent ion-card-subtitle { 34 | 35 | /* color: rgb(78, 78, 78); */ 36 | } 37 | 38 | .categoryCard img { 39 | 40 | /* border-radius: 5px; */ 41 | padding: 1rem; 42 | } -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /public/assets/shapes.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/pages/Product.module.css: -------------------------------------------------------------------------------- 1 | .categoryPage ion-toolbar { 2 | 3 | --border-style: none; 4 | } 5 | 6 | .categoryCard { 7 | 8 | display: flex; 9 | flex-direction: column; 10 | justify-content: center; 11 | align-content: center; 12 | align-items: center; 13 | text-align: center; 14 | } 15 | 16 | .productCardActions { 17 | 18 | display: flex; 19 | flex-direction: row; 20 | justify-content: space-between; 21 | width: 100%; 22 | margin-bottom: 1rem; 23 | } 24 | 25 | .productCardAction { 26 | 27 | font-size: 1.1rem; 28 | } 29 | 30 | .productCardHeader { 31 | 32 | min-height: 17rem; 33 | } 34 | 35 | .productCardHeader p { 36 | 37 | font-size: 1.2rem; 38 | padding: 0; 39 | margin: 0; 40 | margin-top: 0.75rem; 41 | } 42 | 43 | .categoryCardContent { 44 | 45 | display: flex; 46 | flex-direction: column; 47 | text-align: center; 48 | } 49 | 50 | .categoryCardContent ion-button { 51 | 52 | font-size: 0.8rem; 53 | } 54 | 55 | .categoryCardContent p { 56 | 57 | font-size: 1.5rem; 58 | padding: 0; 59 | margin: 0; 60 | } 61 | 62 | .productPrice { 63 | 64 | display: flex; 65 | flex-direction: row; 66 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Ionic E-Commerce App 6 | 7 | 8 | 9 | 10 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ionic-ecommerce-example 2 | 3 | An example of an E-Commerce shop in Ionic React 4 | 5 | ## _Updated to Ionic 6+, Capacitor 4+ and React 18+_ 6 | 7 | ![Ionic React E-Commerce App](https://repository-images.githubusercontent.com/355272810/38c79000-b5db-11eb-85d3-cf740d9c7507) 8 | 9 | ### Included in this Ionic React Template/UI 10 | 11 | - Data fetching from JSON files 12 | - Global state management with Pullstate 13 | - Custom animations 14 | - Fully functional add-to-cart and add-to-favourites 15 | - Total calculation in checkout 16 | - Ability to remove from cart 17 | - Category, Products, Single product, Cart, Favourites pages 18 | - Use of stock Ionic components 19 | - CSS Modules 20 | - Ionic CSS utilities 21 | 22 | ### To run 23 | 24 | ```javascript 25 | npm install 26 | ionic serve 27 | ``` 28 | 29 | Alternatively, you can add the iOS, Android platform and run natively. 30 | 31 | # Are you on Twitter? Lets connect [@93alan](https://twitter.com/93alan) 32 | 33 | # Have you checked out Ionic React Hub yet? [Ionic React Hub](https://ionicreacthub.com) 34 | 35 | If you'd like to support, you can buy me a coffee ☕️ 36 | -------------------------------------------------------------------------------- /src/components/ProductCard.module.css: -------------------------------------------------------------------------------- 1 | .categoryPage ion-toolbar { 2 | 3 | --border-style: none; 4 | } 5 | 6 | .categoryCard { 7 | 8 | display: flex; 9 | flex-direction: column; 10 | justify-content: center; 11 | align-content: center; 12 | align-items: center; 13 | /* min-height: 20rem !important; */ 14 | } 15 | 16 | .productCardActions { 17 | 18 | display: flex; 19 | flex-direction: row; 20 | justify-content: space-between; 21 | width: 100%; 22 | margin-bottom: 1rem; 23 | } 24 | 25 | .productCardAction { 26 | 27 | font-size: 1.1rem; 28 | } 29 | 30 | .productCardHeader { 31 | 32 | min-height: 17rem; 33 | } 34 | 35 | .productCardHeader p { 36 | 37 | font-size: 0.8rem; 38 | padding: 0; 39 | margin: 0; 40 | margin-top: 0.75rem; 41 | } 42 | 43 | .categoryCardContent { 44 | 45 | display: flex; 46 | flex-direction: column; 47 | } 48 | 49 | .categoryCardContent ion-button { 50 | 51 | height: 1.5rem; 52 | font-size: 0.8rem; 53 | } 54 | 55 | .categoryCardContent p { 56 | 57 | font-size: 0.8rem; 58 | padding: 0; 59 | margin: 0; 60 | } 61 | 62 | .categoryCard img { 63 | 64 | /* border-radius: 5px; */ 65 | /* padding: 1rem; */ 66 | } 67 | 68 | .productPrice { 69 | 70 | display: flex; 71 | flex-direction: row; 72 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic-ecommerce-example", 3 | "homepage": ".", 4 | "version": "0.0.1", 5 | "private": true, 6 | "dependencies": { 7 | "@capacitor/core": "^4.1.0", 8 | "@capacitor/ios": "^4.1.0", 9 | "@ionic/react": "^6.2.4", 10 | "@ionic/react-router": "^6.2.4", 11 | "animate.css": "^4.1.1", 12 | "ionicons": "^5.4.0", 13 | "pullstate": "^1.24.0", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "react-router": "^5.0.1", 17 | "react-router-dom": "^5.0.1", 18 | "react-scripts": "^5.0.1", 19 | "reselect": "^4.1.6" 20 | }, 21 | "scripts": { 22 | "start": "react-scripts start", 23 | "build": "react-scripts build", 24 | "test": "react-scripts test", 25 | "eject": "react-scripts eject", 26 | "predeploy": "npm run build", 27 | "deploy": "gh-pages -d build" 28 | }, 29 | "eslintConfig": { 30 | "extends": [ 31 | "react-app", 32 | "react-app/jest" 33 | ] 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.2%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | }, 47 | "devDependencies": { 48 | "@capacitor/cli": "4.1.0", 49 | "@ionic/cli": "6.20.1" 50 | }, 51 | "description": "An Ionic project" 52 | } 53 | -------------------------------------------------------------------------------- /src/data/fetcher.js: -------------------------------------------------------------------------------- 1 | import { ProductStore } from "./ProductStore"; 2 | 3 | export const fetchData = async () => { 4 | 5 | const json = ["beds.json", "armchairs.json", "coffee_tables.json", "cushions.json", "floor_lamps.json", "office_chairs.json"]; 6 | 7 | var products = []; 8 | 9 | json.forEach( async category => { 10 | 11 | const products = await fetchProducts(category); 12 | 13 | let categoryName = category.replace(".json", ""); 14 | categoryName = categoryName.replace("_", " "); 15 | categoryName = uppercaseWords(categoryName); 16 | 17 | const productCategory = { 18 | 19 | name: categoryName, 20 | slug: category.replace(".json", ""), 21 | cover: products[6].image, 22 | products 23 | }; 24 | 25 | ProductStore.update(s => { s.products = [ ...s.products, productCategory ]; }); 26 | }); 27 | 28 | return products; 29 | } 30 | 31 | const fetchProducts = async category => { 32 | 33 | const response = await fetch(`products/${ category }`); 34 | const data = await response.json(); 35 | 36 | // Set a product id 37 | await data.forEach((d, i) => { 38 | 39 | d.id = i + 1; 40 | }); 41 | 42 | return data; 43 | } 44 | 45 | const uppercaseWords = words => { 46 | 47 | words = words.toLowerCase() 48 | .split(' ') 49 | .map((s) => s.charAt(0).toUpperCase() + s.substring(1)) 50 | .join(' '); 51 | 52 | return words; 53 | } -------------------------------------------------------------------------------- /ios/App/App/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import { Redirect, Route } from 'react-router-dom'; 2 | import { IonApp, IonRouterOutlet } from '@ionic/react'; 3 | import { IonReactRouter } from '@ionic/react-router'; 4 | import { setupIonicReact } from '@ionic/react'; 5 | import Home from './pages/Home'; 6 | 7 | /* Core CSS required for Ionic components to work properly */ 8 | import '@ionic/react/css/core.css'; 9 | 10 | /* Basic CSS for apps built with Ionic */ 11 | import '@ionic/react/css/normalize.css'; 12 | import '@ionic/react/css/structure.css'; 13 | import '@ionic/react/css/typography.css'; 14 | 15 | /* Optional CSS utils that can be commented out */ 16 | import '@ionic/react/css/padding.css'; 17 | import '@ionic/react/css/float-elements.css'; 18 | import '@ionic/react/css/text-alignment.css'; 19 | import '@ionic/react/css/text-transformation.css'; 20 | import '@ionic/react/css/flex-utils.css'; 21 | import '@ionic/react/css/display.css'; 22 | 23 | /* Theme variables */ 24 | import './theme/variables.css'; 25 | import { useEffect } from 'react'; 26 | import { fetchData } from './data/fetcher'; 27 | import CategoryProducts from './pages/CategoryProducts'; 28 | import Product from './pages/Product'; 29 | import FavouriteProducts from './pages/FavouriteProducts'; 30 | import CartProducts from './pages/CartProducts'; 31 | 32 | setupIonicReact({}); 33 | 34 | const App = () => { 35 | 36 | useEffect(() => { 37 | 38 | fetchData(); 39 | }, []); 40 | 41 | return ( 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 | 73 | export default App; 74 | -------------------------------------------------------------------------------- /src/pages/Home.js: -------------------------------------------------------------------------------- 1 | import { useState } from 'react'; 2 | import { IonBadge, IonButton, IonButtons, IonCard, IonCardContent, IonCardSubtitle, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonPage, IonRow, IonTitle, IonToolbar } from '@ionic/react'; 3 | 4 | import styles from "./Home.module.css"; 5 | import { cart, heart } from 'ionicons/icons'; 6 | 7 | import { ProductStore } from '../data/ProductStore'; 8 | import { FavouritesStore } from '../data/FavouritesStore'; 9 | import { CartStore } from '../data/CartStore'; 10 | 11 | const Home = () => { 12 | 13 | const products = ProductStore.useState(s => s.products); 14 | const favourites = FavouritesStore.useState(s => s.product_ids); 15 | const shopCart = CartStore.useState(s => s.product_ids); 16 | 17 | return ( 18 | 19 | 20 | 21 | Categories 22 | 23 | 24 | Ionic Furniture 25 | 26 | 27 | 28 | 29 | { favourites.length } 30 | 31 | 32 | 33 | 34 | 35 | 36 | { shopCart.length } 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | Categories 50 | 51 | 52 | 53 | 54 | 55 | 56 | { products.map((category, index) => { 57 | 58 | return ( 59 | 60 | 61 | 62 | category cover 63 | 64 | 65 | { category.name } 66 | 67 | 68 | 69 | ) 70 | })} 71 | 72 | 73 | 74 | 75 | ); 76 | }; 77 | 78 | export default Home; -------------------------------------------------------------------------------- /ios/App/App/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ionic-ecommerce-example 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleURLTypes 22 | 23 | 24 | CFBundleURLName 25 | com.getcapacitor.capacitor 26 | CFBundleURLSchemes 27 | 28 | capacitor 29 | 30 | 31 | 32 | CFBundleVersion 33 | 1 34 | LSRequiresIPhoneOS 35 | 36 | NSAppTransportSecurity 37 | 38 | NSAllowsArbitraryLoads 39 | 40 | 41 | NSCameraUsageDescription 42 | To Take Photos and Video 43 | NSLocationAlwaysUsageDescription 44 | Always allow Geolocation? 45 | NSLocationWhenInUseUsageDescription 46 | Allow Geolocation? 47 | NSMicrophoneUsageDescription 48 | To Record Audio With Video 49 | NSPhotoLibraryAddUsageDescription 50 | Store camera photos to camera 51 | NSPhotoLibraryUsageDescription 52 | To Pick Photos from Library 53 | UILaunchStoryboardName 54 | LaunchScreen 55 | UIMainStoryboardFile 56 | Main 57 | UIRequiredDeviceCapabilities 58 | 59 | armv7 60 | 61 | UISupportedInterfaceOrientations 62 | 63 | UIInterfaceOrientationPortrait 64 | UIInterfaceOrientationLandscapeLeft 65 | UIInterfaceOrientationLandscapeRight 66 | 67 | UISupportedInterfaceOrientations~ipad 68 | 69 | UIInterfaceOrientationPortrait 70 | UIInterfaceOrientationPortraitUpsideDown 71 | UIInterfaceOrientationLandscapeLeft 72 | UIInterfaceOrientationLandscapeRight 73 | 74 | UIViewControllerBasedStatusBarAppearance 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /src/theme/variables.css: -------------------------------------------------------------------------------- 1 | /* Ionic Variables and Theming. For more info, please see: 2 | http://ionicframework.com/docs/theming/ */ 3 | 4 | /** Ionic CSS Variables **/ 5 | :root { 6 | /** primary **/ 7 | --ion-color-primary: #3880ff; 8 | --ion-color-primary-rgb: 56, 128, 255; 9 | --ion-color-primary-contrast: #ffffff; 10 | --ion-color-primary-contrast-rgb: 255, 255, 255; 11 | --ion-color-primary-shade: #3171e0; 12 | --ion-color-primary-tint: #4c8dff; 13 | 14 | /** secondary **/ 15 | --ion-color-secondary: #3dc2ff; 16 | --ion-color-secondary-rgb: 61, 194, 255; 17 | --ion-color-secondary-contrast: #ffffff; 18 | --ion-color-secondary-contrast-rgb: 255, 255, 255; 19 | --ion-color-secondary-shade: #36abe0; 20 | --ion-color-secondary-tint: #50c8ff; 21 | 22 | /** tertiary **/ 23 | --ion-color-tertiary: #5260ff; 24 | --ion-color-tertiary-rgb: 82, 96, 255; 25 | --ion-color-tertiary-contrast: #ffffff; 26 | --ion-color-tertiary-contrast-rgb: 255, 255, 255; 27 | --ion-color-tertiary-shade: #4854e0; 28 | --ion-color-tertiary-tint: #6370ff; 29 | 30 | /** success **/ 31 | --ion-color-success: #2dd36f; 32 | --ion-color-success-rgb: 45, 211, 111; 33 | --ion-color-success-contrast: #ffffff; 34 | --ion-color-success-contrast-rgb: 255, 255, 255; 35 | --ion-color-success-shade: #28ba62; 36 | --ion-color-success-tint: #42d77d; 37 | 38 | /** warning **/ 39 | --ion-color-warning: #ffc409; 40 | --ion-color-warning-rgb: 255, 196, 9; 41 | --ion-color-warning-contrast: #000000; 42 | --ion-color-warning-contrast-rgb: 0, 0, 0; 43 | --ion-color-warning-shade: #e0ac08; 44 | --ion-color-warning-tint: #ffca22; 45 | 46 | /** danger **/ 47 | --ion-color-danger: #eb445a; 48 | --ion-color-danger-rgb: 235, 68, 90; 49 | --ion-color-danger-contrast: #ffffff; 50 | --ion-color-danger-contrast-rgb: 255, 255, 255; 51 | --ion-color-danger-shade: #cf3c4f; 52 | --ion-color-danger-tint: #ed576b; 53 | 54 | /** dark **/ 55 | --ion-color-dark: #222428; 56 | --ion-color-dark-rgb: 34, 36, 40; 57 | --ion-color-dark-contrast: #ffffff; 58 | --ion-color-dark-contrast-rgb: 255, 255, 255; 59 | --ion-color-dark-shade: #1e2023; 60 | --ion-color-dark-tint: #383a3e; 61 | 62 | /** medium **/ 63 | --ion-color-medium: #92949c; 64 | --ion-color-medium-rgb: 146, 148, 156; 65 | --ion-color-medium-contrast: #ffffff; 66 | --ion-color-medium-contrast-rgb: 255, 255, 255; 67 | --ion-color-medium-shade: #808289; 68 | --ion-color-medium-tint: #9d9fa6; 69 | 70 | /** light **/ 71 | --ion-color-light: #f4f5f8; 72 | --ion-color-light-rgb: 244, 245, 248; 73 | --ion-color-light-contrast: #000000; 74 | --ion-color-light-contrast-rgb: 0, 0, 0; 75 | --ion-color-light-shade: #d7d8da; 76 | --ion-color-light-tint: #f5f6f9; 77 | 78 | --ion-toolbar-color: black; 79 | --ion-grid-column-padding: 0rem; 80 | /* --ion-toolbar-background: var(--ion-color-warning); */ 81 | } -------------------------------------------------------------------------------- /ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "AppIcon-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "AppIcon-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "AppIcon-29x29@2x-1.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "AppIcon-29x29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "AppIcon-40x40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "AppIcon-40x40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "AppIcon-60x60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "AppIcon-60x60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "AppIcon-20x20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "AppIcon-20x20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "AppIcon-29x29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "AppIcon-29x29@2x.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "AppIcon-40x40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "AppIcon-40x40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "AppIcon-76x76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "AppIcon-76x76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "AppIcon-83.5x83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "AppIcon-512@2x.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /ios/App/App/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Capacitor 3 | 4 | @UIApplicationMain 5 | class AppDelegate: UIResponder, UIApplicationDelegate { 6 | 7 | var window: UIWindow? 8 | 9 | 10 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 11 | // Override point for customization after application launch. 12 | return true 13 | } 14 | 15 | func applicationWillResignActive(_ application: UIApplication) { 16 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 17 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 18 | } 19 | 20 | func applicationDidEnterBackground(_ application: UIApplication) { 21 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 22 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 23 | } 24 | 25 | func applicationWillEnterForeground(_ application: UIApplication) { 26 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 27 | } 28 | 29 | func applicationDidBecomeActive(_ application: UIApplication) { 30 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 31 | } 32 | 33 | func applicationWillTerminate(_ application: UIApplication) { 34 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 35 | } 36 | 37 | func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { 38 | // Called when the app was launched with a url. Feel free to add additional processing here, 39 | // but if you want the App API to support tracking app url opens, make sure to keep this call 40 | return CAPBridge.handleOpenUrl(url, options) 41 | } 42 | 43 | func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { 44 | // Called when the app was launched with an activity, including Universal Links. 45 | // Feel free to add additional processing here, but if you want the App API to support 46 | // tracking app url opens, make sure to keep this call 47 | return CAPBridge.handleContinueActivity(userActivity, restorationHandler) 48 | } 49 | 50 | override func touchesBegan(_ touches: Set, with event: UIEvent?) { 51 | super.touchesBegan(touches, with: event) 52 | 53 | let statusBarRect = UIApplication.shared.statusBarFrame 54 | guard let touchPoint = event?.allTouches?.first?.location(in: self.window) else { return } 55 | 56 | if statusBarRect.contains(touchPoint) { 57 | NotificationCenter.default.post(CAPBridge.statusBarTappedNotification) 58 | } 59 | } 60 | 61 | #if USE_PUSH 62 | 63 | func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 64 | NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: deviceToken) 65 | } 66 | 67 | func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { 68 | NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidFailToRegisterForRemoteNotificationsWithError.name()), object: error) 69 | } 70 | 71 | #endif 72 | 73 | } 74 | 75 | -------------------------------------------------------------------------------- /src/components/ProductCard.js: -------------------------------------------------------------------------------- 1 | import { IonButton, IonCard, IonCardContent, IonCardHeader, IonCol, IonIcon } from "@ionic/react"; 2 | import { arrowRedoOutline, cart, cartOutline, heart, heartOutline } from "ionicons/icons"; 3 | import { useEffect, useRef, useState } from "react"; 4 | import { addToCart } from "../data/CartStore"; 5 | import { addToFavourites, FavouritesStore } from "../data/FavouritesStore"; 6 | import styles from "./ProductCard.module.css"; 7 | 8 | const ProductCard = props => { 9 | 10 | const { product, category, index, cartRef } = props; 11 | const favourites = FavouritesStore.useState(s => s.product_ids); 12 | 13 | const productCartRef = useRef(); 14 | const productFavouriteRef = useRef(); 15 | const [ isFavourite, setIsFavourite ] = useState(false); 16 | 17 | useEffect(() => { 18 | 19 | const tempIsFavourite = favourites.find(f => f === `${ category.slug }/${ product.id }`); 20 | setIsFavourite(tempIsFavourite ? true : false); 21 | }, [props.product, favourites]); 22 | 23 | const addProductToFavourites = (e, categorySlug, productID) => { 24 | 25 | e.preventDefault(); 26 | e.stopPropagation(); 27 | addToFavourites(categorySlug, productID); 28 | 29 | 30 | productFavouriteRef.current.style.display = ""; 31 | productFavouriteRef.current.classList.add("animate__fadeOutTopRight"); 32 | 33 | setTimeout(() => { 34 | if (productCartRef.current) { 35 | productFavouriteRef.current.classList.remove("animate__fadeOutTopRight"); 36 | productFavouriteRef.current.style.display = "none"; 37 | } 38 | }, 500); 39 | } 40 | 41 | const addProductToCart = (e, categorySlug, productID) => { 42 | 43 | e.preventDefault(); 44 | e.stopPropagation(); 45 | 46 | productCartRef.current.style.display = ""; 47 | productCartRef.current.classList.add("animate__fadeOutUp"); 48 | 49 | setTimeout(() => { 50 | 51 | cartRef.current.classList.add("animate__tada"); 52 | addToCart(categorySlug, productID); 53 | 54 | setTimeout(() => { 55 | 56 | cartRef.current.classList.remove("animate__tada"); 57 | productCartRef.current.style.display = "none"; 58 | }, 500); 59 | }, 500); 60 | } 61 | 62 | return ( 63 | 64 | 65 | 66 | 67 |
68 | addProductToFavourites(e, category.slug, product.id) } /> 69 | 70 | 71 |
72 | product pic 73 |

{ product.name }

74 |
75 | 76 | 77 | 78 |
79 | 80 | { product.price } 81 | 82 | addProductToCart(e, category.slug, product.id) }> 83 | 84 | 85 | 86 | 87 |
88 |
89 |
90 |
91 | ); 92 | } 93 | 94 | export default ProductCard; -------------------------------------------------------------------------------- /src/pages/FavouriteProducts.js: -------------------------------------------------------------------------------- 1 | import { IonBadge, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonInfiniteScroll, IonInfiniteScrollContent, IonNote, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react"; 2 | import { cart, chevronBackOutline } from "ionicons/icons"; 3 | import { useEffect, useRef, useState } from "react"; 4 | import ProductCard from "../components/ProductCard"; 5 | import { CartStore } from "../data/CartStore"; 6 | import { FavouritesStore } from "../data/FavouritesStore"; 7 | import { ProductStore } from "../data/ProductStore"; 8 | 9 | import styles from "./CategoryProducts.module.css"; 10 | 11 | const FavouriteProducts = () => { 12 | 13 | const cartRef = useRef(); 14 | const products = ProductStore.useState(s => s.products); 15 | const favourites = FavouritesStore.useState(s => s.product_ids); 16 | const shopCart = CartStore.useState(s => s.product_ids); 17 | const [ searchResults, setSearchResults ] = useState([]); 18 | const [ amountLoaded, setAmountLoaded ] = useState(6); 19 | 20 | useEffect(() => { 21 | 22 | const getFavourites = () => { 23 | 24 | setSearchResults([]); 25 | 26 | favourites.forEach(favourite => { 27 | 28 | var favouriteParts = favourite.split("/"); 29 | var categorySlug = favouriteParts[0]; 30 | var productID = favouriteParts[1]; 31 | 32 | const tempCategory = products.filter(p => p.slug === categorySlug)[0]; 33 | const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0]; 34 | 35 | const tempFavourite = { 36 | 37 | category: tempCategory, 38 | product: tempProduct 39 | }; 40 | 41 | setSearchResults(prevSearchResults => [ ...prevSearchResults, tempFavourite ]); 42 | }); 43 | } 44 | 45 | getFavourites(); 46 | }, [ favourites ]); 47 | 48 | const fetchMore = async (e) => { 49 | 50 | // Increment the amount loaded by 6 for the next iteration 51 | setAmountLoaded(prevAmount => (prevAmount + 6)); 52 | e.target.complete(); 53 | } 54 | 55 | return ( 56 | 57 | 58 | 59 | 60 | 61 | 62 |  Categories 63 | 64 | 65 | Favourites 66 | 67 | 68 | 69 | { shopCart.length } 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | { searchResults && searchResults.length } { (searchResults.length > 1 || searchResults.length === 0) ? " favourites" : " favourite" } found 84 | 85 | 86 | 87 | 88 | { searchResults && searchResults.map((product, index) => { 89 | 90 | if ((index <= amountLoaded)) { 91 | return ( 92 | 93 | ); 94 | } 95 | })} 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | ); 106 | } 107 | 108 | export default FavouriteProducts; -------------------------------------------------------------------------------- /src/pages/CategoryProducts.js: -------------------------------------------------------------------------------- 1 | import { IonBadge, IonButton, IonButtons, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonInfiniteScroll, IonInfiniteScrollContent, IonNote, IonPage, IonRow, IonSearchbar, IonTitle, IonToolbar } from "@ionic/react"; 2 | import { cart, chevronBackOutline, searchOutline } from "ionicons/icons"; 3 | import { useEffect, useRef, useState } from "react"; 4 | import { useParams } from "react-router" 5 | import ProductCard from "../components/ProductCard"; 6 | 7 | import { CartStore } from "../data/CartStore"; 8 | import { ProductStore } from "../data/ProductStore"; 9 | 10 | import styles from "./CategoryProducts.module.css"; 11 | 12 | const CategoryProducts = () => { 13 | 14 | const params = useParams(); 15 | const cartRef = useRef(); 16 | const products = ProductStore.useState(s => s.products); 17 | const shopCart = CartStore.useState(s => s.product_ids); 18 | const [ category, setCategory ] = useState({}); 19 | const [ searchResults, setsearchResults ] = useState([]); 20 | const [ amountLoaded, setAmountLoaded ] = useState(6); 21 | 22 | useEffect(() => { 23 | 24 | const categorySlug = params.slug; 25 | const tempCategory = products.filter(p => p.slug === categorySlug)[0]; 26 | setCategory(tempCategory); 27 | setsearchResults(tempCategory.products); 28 | }, [ params.slug ]); 29 | 30 | const fetchMore = async (e) => { 31 | 32 | // Increment the amount loaded by 6 for the next iteration 33 | setAmountLoaded(prevAmount => (prevAmount + 6)); 34 | e.target.complete(); 35 | } 36 | 37 | const search = async e => { 38 | 39 | const searchVal = e.target.value; 40 | 41 | if (searchVal !== "") { 42 | 43 | const tempResults = category.products.filter(p => p.name.toLowerCase().includes(searchVal.toLowerCase())); 44 | setsearchResults(tempResults); 45 | } else { 46 | 47 | setsearchResults(category.products); 48 | } 49 | } 50 | 51 | return ( 52 | 53 | 54 | 55 | 56 | 57 | 58 |  Categories 59 | 60 | 61 | { category && category.name } 62 | 63 | 64 | 65 | { shopCart.length } 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | { searchResults && searchResults.length } { (searchResults.length > 1 || searchResults.length === 0) ? " products" : " product" } found 83 | 84 | 85 | 86 | 87 | { searchResults && searchResults.map((product, index) => { 88 | 89 | if ((index <= amountLoaded) && product.image) { 90 | return ( 91 | 92 | ); 93 | } 94 | })} 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | ); 105 | } 106 | 107 | export default CategoryProducts; -------------------------------------------------------------------------------- /public/products/cushions.json: -------------------------------------------------------------------------------- 1 | [{"name":"Grumpy Cat 45 x 45cm Printed Cushion - Grey & Yellow","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9223912","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9223912_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Miro 45 x 45cm Patterned Cushion - Multicoloured","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9111378","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9111378_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Topsy Patterned Cushion - Saffron","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9101656","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9101656_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Darcy Geometric Cotton Cushion - Charcoal","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9425631","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9425631_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Cheetah 45 x 45cm Patterned Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/8975553","price":"£10.00","image":"https://media.4rgos.it/s/Argos/8975553_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Evelyn 45 x 45cm Patterned Cushion - Yellow","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9437753","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9437753_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Willis 45 x 45cm Graphic Dog Print - Black and White","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9374586","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9374586_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Watermelon Patterned Cushion - Orange","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9161610","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9161610_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lemon Patterned Cushion - Yellow","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9164954","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9164954_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Soft Textured Skandi Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9203262","price":"£14.00","image":"https://media.4rgos.it/s/Argos/9203262_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Pomegranate Patterned Cushion - Multicoloured","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9213685","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9213685_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Agra Garden Tassel Cushion - Blush","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/8515755","price":"£10.00","image":"https://media.4rgos.it/s/Argos/8515755_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Regency 58 x 58cm Velvet Cushion - Taupe","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9308459","price":"£35.00","image":"https://media.4rgos.it/s/Argos/9308459_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tassel Handwoven Cushion - Terracotta","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9205459","price":"£10.00","image":"https://media.4rgos.it/s/Argos/9205459_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Paloma 45 x 45cm Knitted Cotton Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9170254","price":"£18.00","image":null},{"name":"Handwoven Plain Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/8884981","price":"£10.00","image":null},{"name":"Edric Hand-Woven Cushion Cover - Multicoloured","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9201549","price":"£25.00","image":null},{"name":"Paloma Knitted Cotton Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9413296","price":"£25.00","image":null},{"name":"Regency 45 x 45cm Velvet Cushion","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9429699","price":"£20.00","image":null},{"name":"Berber Zig Zag Wool Cushion - Cream","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9413540","price":"£40.00","image":null},{"name":"Esther Wool & Silk Cushion Cover - Multicoloured","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9411810","price":"£25.00","image":null},{"name":"Jungle Embroidered Cushion Cover - Black","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9372540","price":"£30.00","image":null},{"name":"Diaz Symbols Cushion Cover - Multicoloured","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9281002","price":"£30.00","image":null},{"name":"Supersoft Velvet Cushion - Grey","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9159598","price":"£18.00","image":null},{"name":"Fisola Zig Zag 45 x 45cm Printed Cushion - Black","name_link":"https://www.habitat.co.uk/browse/bedding/cushions/c:827826/?clickOrigin=header:cat:menu:cushions/product/9338508","price":"£20.00","image":null}] -------------------------------------------------------------------------------- /src/pages/CartProducts.js: -------------------------------------------------------------------------------- 1 | import { IonAvatar, IonBadge, IonButton, IonButtons, IonCardSubtitle, IonCol, IonContent, IonFooter, IonHeader, IonIcon, IonImg, IonItem, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList, IonNote, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react"; 2 | import { cart, checkmarkSharp, chevronBackOutline, trashOutline } from "ionicons/icons"; 3 | import { useEffect, useRef, useState } from "react"; 4 | import { CartStore, removeFromCart } from "../data/CartStore"; 5 | import { ProductStore } from "../data/ProductStore"; 6 | 7 | import styles from "./CartProducts.module.css"; 8 | 9 | const CartProducts = () => { 10 | 11 | const cartRef = useRef(); 12 | const products = ProductStore.useState(s => s.products); 13 | const shopCart = CartStore.useState(s => s.product_ids); 14 | const [ cartProducts, setCartProducts ] = useState([]); 15 | const [ amountLoaded, setAmountLoaded ] = useState(6); 16 | 17 | const [ total, setTotal ] = useState(0); 18 | 19 | useEffect(() => { 20 | 21 | const getCartProducts = () => { 22 | 23 | setCartProducts([]); 24 | setTotal(0); 25 | 26 | shopCart.forEach(product => { 27 | 28 | var favouriteParts = product.split("/"); 29 | var categorySlug = favouriteParts[0]; 30 | var productID = favouriteParts[1]; 31 | 32 | const tempCategory = products.filter(p => p.slug === categorySlug)[0]; 33 | const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0]; 34 | 35 | const tempCartProduct = { 36 | 37 | category: tempCategory, 38 | product: tempProduct 39 | }; 40 | 41 | setTotal(prevTotal => prevTotal + parseInt(tempProduct.price.replace("£", ""))); 42 | setCartProducts(prevSearchResults => [ ...prevSearchResults, tempCartProduct ]); 43 | }); 44 | } 45 | 46 | getCartProducts(); 47 | }, [ shopCart ]); 48 | 49 | const fetchMore = async (e) => { 50 | 51 | // Increment the amount loaded by 6 for the next iteration 52 | setAmountLoaded(prevAmount => (prevAmount + 6)); 53 | e.target.complete(); 54 | } 55 | 56 | const removeProductFromCart = async (index) => { 57 | 58 | removeFromCart(index); 59 | } 60 | 61 | return ( 62 | 63 | 64 | 65 | 66 | 67 | 68 |  Categories 69 | 70 | 71 | Cart 72 | 73 | 74 | 75 | { shopCart.length } 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | { cartProducts && cartProducts.length } { (cartProducts.length > 1 || cartProducts.length === 0) ? " products" : " product" } found 89 | 90 | 91 | 92 | 93 | { cartProducts && cartProducts.map((product, index) => { 94 | 95 | if ((index <= amountLoaded)) { 96 | return ( 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 |

{ product.category.name }

105 |

{ product.product.name }

106 |
107 | 108 |
109 | { product.product.price } 110 |
111 |
112 | 113 | 114 | removeProductFromCart(index) }> 115 | 116 | 117 | 118 |
119 | ); 120 | } 121 | })} 122 |
123 |
124 | 125 | 126 |
127 | £{ total.toFixed(2) } 128 | 129 | 130 |  Checkout 131 | 132 |
133 |
134 |
135 | ); 136 | } 137 | 138 | export default CartProducts; -------------------------------------------------------------------------------- /public/products/office_chairs.json: -------------------------------------------------------------------------------- 1 | [{"name":"Padded Faux Leather Folding Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/4814326","price":"£12.00","image":"https://media.4rgos.it/s/Argos/4814326_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Brixham Faux Leather Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/6179131","price":"£60.00","image":"https://media.4rgos.it/s/Argos/6179131_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Orion Faux Leather Ergonomic Office Chair - Black","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3127179","price":"£120.00","image":"https://media.4rgos.it/s/Argos/3127179_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Joey Faux Leather Office Chair - Tan","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3106626","price":"£60.00","image":"https://media.4rgos.it/s/Argos/3106626_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Alvar Faux Leather Office Chair - Tan","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/4355146","price":"£80.00","image":"https://media.4rgos.it/s/Argos/4355146_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Omari Mesh Ergonomic Office Chair - Black","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3208201","price":"£150.00","image":"https://media.4rgos.it/s/Argos/3208201_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Alma High Back Ergonomic Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3206399","price":"£100.00","image":"https://media.4rgos.it/s/Argos/3206399_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Walker Height Adjustable Office Chair - Black","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/4818401","price":"£80.00","image":"https://media.4rgos.it/s/Argos/4818401_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Mesh Mid Back Ergonomic Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/6183347","price":"£65.00","image":"https://media.4rgos.it/s/Argos/6183347_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Swivel Tub Office Chair - Charcoal","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8025898","price":"£85.00","image":"https://media.4rgos.it/s/Argos/8025898_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Milton Mesh Ergonomic Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8936633","price":"£90.00","image":"https://media.4rgos.it/s/Argos/8936633_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Boutique Faux Leather Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8906601","price":"£50.00","image":"https://media.4rgos.it/s/Argos/8906601_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Industrial Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8485799","price":"£60.00","image":"https://media.4rgos.it/s/Argos/8485799_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Button Back Fabric Office Chair - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8039327","price":"£100.00","image":"https://media.4rgos.it/s/Argos/8039327_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Old School Ergonomic Office Chair - Dark Oak","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/9224681","price":"£50.00","image":"https://media.4rgos.it/s/Argos/9224681_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ergonomic Office Chair - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8340865","price":"£160.00","image":"https://media.4rgos.it/s/Argos/8340865_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Nori Fabric Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3133802","price":"£90.00","image":"https://media.4rgos.it/s/Argos/3133802_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ginnie Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8768533","price":"£85.00","image":"https://media.4rgos.it/s/Argos/8768533_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Clarice Velvet Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/3420670","price":"£130.00","image":"https://media.4rgos.it/s/Argos/3420670_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Etta Office Chair - Brown","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/9235632","price":"£95.00","image":"https://media.4rgos.it/s/Argos/9235632_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Dutch Glam Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8567136","price":"£120.00","image":"https://media.4rgos.it/s/Argos/8567136_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sonny Fabric Office Chair - Black & White","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8741323","price":"£90.00","image":"https://media.4rgos.it/s/Argos/8741323_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ari Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/9175785","price":"£70.00","image":"https://media.4rgos.it/s/Argos/9175785_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Etta Blue Velvet Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/9422586","price":"£95.00","image":null},{"name":"Beni Fabric Office Chair - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/9312184","price":"£45.00","image":null},{"name":"Beni Velvet Office Chair - Blush","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8888987","price":"£60.00","image":null},{"name":"Reade Mesh Office Chair","name_link":"https://www.habitat.co.uk/browse/furniture/office-chairs/c:809224/?clickOrigin=header:cat:menu:office+chairs/product/8807827","price":"£40.00","image":null}] -------------------------------------------------------------------------------- /src/pages/Product.js: -------------------------------------------------------------------------------- 1 | import { IonBadge, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCol, IonContent, IonGrid, IonHeader, IonIcon, IonPage, IonRow, IonTitle, IonToolbar } from "@ionic/react"; 2 | import { arrowRedoOutline, cart, cartOutline, chevronBackOutline, heart, heartOutline } from "ionicons/icons"; 3 | import { useEffect, useRef, useState } from "react"; 4 | import { useParams } from "react-router" 5 | import ProductCard from "../components/ProductCard"; 6 | import { addToCart, CartStore } from "../data/CartStore"; 7 | import { addToFavourites, FavouritesStore } from "../data/FavouritesStore"; 8 | import { ProductStore } from "../data/ProductStore"; 9 | 10 | import styles from "./Product.module.css"; 11 | 12 | const Product = () => { 13 | 14 | const params = useParams(); 15 | const cartRef = useRef(); 16 | const products = ProductStore.useState(s => s.products); 17 | const favourites = FavouritesStore.useState(s => s.product_ids); 18 | const [ isFavourite, setIsFavourite ] = useState(false); 19 | const shopCart = CartStore.useState(s => s.product_ids); 20 | const [ product, setProduct ] = useState({}); 21 | const [ category, setCategory ] = useState({}); 22 | 23 | useEffect(() => { 24 | 25 | const categorySlug = params.slug; 26 | const productID = params.id; 27 | const tempCategory = products.filter(p => p.slug === categorySlug)[0]; 28 | const tempProduct = tempCategory.products.filter(p => parseInt(p.id) === parseInt(productID))[0]; 29 | 30 | const tempIsFavourite = favourites.find(f => f === `${ categorySlug }/${ productID }`); 31 | 32 | setIsFavourite(tempIsFavourite); 33 | setCategory(tempCategory); 34 | setProduct(tempProduct); 35 | }, [ params.slug, params.id ]); 36 | 37 | useEffect(() => { 38 | 39 | const tempIsFavourite = favourites.find(f => f === `${ category.slug }/${ product.id }`); 40 | setIsFavourite(tempIsFavourite ? true : false); 41 | }, [favourites, product]); 42 | 43 | const addProductToFavourites = (e, categorySlug, productID) => { 44 | 45 | e.preventDefault(); 46 | addToFavourites(categorySlug, productID); 47 | 48 | 49 | document.getElementById(`placeholder_favourite_product_${ categorySlug }_${ productID }`).style.display = ""; 50 | document.getElementById(`placeholder_favourite_product_${ categorySlug }_${ productID }`).classList.add("animate__fadeOutTopRight"); 51 | } 52 | 53 | const addProductToCart = (e, categorySlug, productID) => { 54 | 55 | e.preventDefault(); 56 | 57 | document.getElementById(`placeholder_cart_${ categorySlug }_${ productID }`).style.display = ""; 58 | document.getElementById(`placeholder_cart_${ categorySlug }_${ productID }`).classList.add("animate__fadeOutUp"); 59 | 60 | setTimeout(() => { 61 | 62 | cartRef.current.classList.add("animate__tada"); 63 | addToCart(categorySlug, productID); 64 | 65 | setTimeout(() => { 66 | cartRef.current.classList.remove("animate__tada"); 67 | }, 500); 68 | }, 500); 69 | } 70 | 71 | return ( 72 | 73 | 74 | 75 | 76 | 77 | 78 |  { category.name } 79 | 80 | 81 | 82 | View Product 83 | 84 | 85 | 86 | { shopCart.length } 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 |
103 | addProductToFavourites(e, category.slug, product.id) } /> 104 | 105 | 106 |
107 | product pic 108 |

{ product.name }

109 |
110 | 111 | 112 | 113 |
114 | 115 | { product.price } 116 | 117 | addProductToCart(e, category.slug, product.id) }> 118 |   Add to Cart 119 | 120 | 121 | 122 |
123 |
124 |
125 |
126 |
127 | 128 | 129 | 130 | Similar products... 131 | 132 | 133 | 134 | 135 | { (category && category.products) && category.products.map((similar, index) => { 136 | 137 | if ((similar.id !== product.id) && product.image && index < 4) { 138 | 139 | return ( 140 | 141 | 142 | ); 143 | } 144 | })} 145 | 146 |
147 |
148 |
149 | ); 150 | } 151 | 152 | export default Product; -------------------------------------------------------------------------------- /public/products/chairs.json: -------------------------------------------------------------------------------- 1 | [{"name":"STRANDMON","description":"Wing chair","price":"199","image":"https://www.ikea.com/gb/en/images/products/strandmon-wing-chair-nordvalla-dark-grey__0836849_pe601178_s5.jpg?f=xxs"},{"name":"STOCKSUND","description":"Armchair","price":"299","image":"https://www.ikea.com/gb/en/images/products/stocksund-armchair-nolhaga-grey-beige-light-brown-wood__0738013_pe689635_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Armchair","price":"60","image":"https://www.ikea.com/gb/en/images/products/poaeng-armchair-oak-veneer-knisa-light-beige__0841440_pe666984_s5.jpg?f=xxs"},{"name":"EKENÄSET","description":"Armchair","price":"179","image":"https://www.ikea.com/gb/en/images/products/ekenaeset-armchair-hillared-anthracite__0736926_pe740815_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Armchair","price":"90","image":"https://www.ikea.com/gb/en/images/products/poaeng-armchair-oak-veneer-skiftebo-dark-grey__0937075_pe793557_s5.jpg?f=xxs"},{"name":"LANDSKRONA","description":"Armchair","price":"350","image":"https://www.ikea.com/gb/en/images/products/landskrona-armchair-velvet-yellow-wood__0821746_pe775273_s5.jpg?f=xxs"},{"name":"TULLSTA","description":"Armchair","price":"125","image":"https://www.ikea.com/gb/en/images/products/tullsta-armchair-nordvalla-medium-grey__0837583_pe601029_s5.jpg?f=xxs"},{"name":"BENARP","description":"Armchair","price":"225","image":"https://www.ikea.com/gb/en/images/products/koarp-armchair-gunnared-medium-grey-black__0837274_pe643210_s5.jpg?f=xxs"},{"name":"KOARP","description":"Armchair","price":"175","image":"https://www.ikea.com/gb/en/images/products/ekenaes-armchair-hensta-dark-brown__0836812_pe601063_s5.jpg?f=xxs"},{"name":"EKENÄS","description":"Armchair","price":"199","image":"https://www.ikea.com/gb/en/images/products/poaeng-armchair-birch-veneer-knisa-light-beige__0837298_pe666936_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Armchair","price":"60","image":"https://www.ikea.com/gb/en/images/products/poaeng-armchair-black-brown-knisa-black__0837335_pe666944_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Armchair","price":"60","image":"https://www.ikea.com/gb/en/images/products/ekeroe-armchair-skiftebo-yellow__0836445_pe600885_s5.jpg?f=xxs"},{"name":"EKERÖ","description":"Armchair","price":"129","image":"https://www.ikea.com/gb/en/images/products/pello-armchair-holmby-natural__0841137_pe600889_s5.jpg?f=xxs"},{"name":"PELLO","description":"Armchair","price":"50","image":"https://www.ikea.com/gb/en/images/products/remsta-armchair-tallmyra-dark-grey__0840643_pe712286_s5.jpg?f=xxs"},{"name":"REMSTA","description":"Armchair","price":"150","image":"https://www.ikea.com/gb/en/images/products/groenlid-armchair-tallmyra-medium-grey__0840878_pe690467_s5.jpg?f=xxs"},{"name":"GRÖNLID","description":"Armchair","price":"210","image":"https://www.ikea.com/gb/en/images/products/grevie-armchair-velvet-grey__0837120_pe690747_s5.jpg?f=xxs"},{"name":"GREVIE","description":"Armchair","price":"550","image":"https://www.ikea.com/gb/en/images/products/soederhamn-armchair-samsta-dark-grey__0837650_pe601043_s5.jpg?f=xxs"},{"name":"SÖDERHAMN","description":"Armchair","price":"295","image":"https://www.ikea.com/gb/en/images/products/faerloev-armchair-flodafors-white__0492484_pe633190_s5.jpg?f=xxs"},{"name":"FÄRLÖV","description":"Armchair","price":"295","image":"https://www.ikea.com/gb/en/images/products/vedbo-high-back-armchair-gunnared-dark-grey__0837110_pe704423_s5.jpg?f=xxs"},{"name":"VEDBO","description":"High-back armchair","price":"229","image":"https://www.ikea.com/gb/en/images/products/groenlid-armchair-inseros-white__0837519_pe690432_s5.jpg?f=xxs"},{"name":"GRÖNLID","description":"Armchair","price":"180","image":"https://www.ikea.com/gb/en/images/products/flaeckebo-wing-chair-light-beige__0908453_pe783227_s5.jpg?f=xxs"},{"name":"FLÄCKEBO","description":"Wing chair","price":"399","image":"https://www.ikea.com/gb/en/images/products/vedbo-armchair-gunnared-dark-grey__0837091_pe704432_s5.jpg?f=xxs"},{"name":"VEDBO","description":"Armchair","price":"150","image":"https://www.ikea.com/gb/en/images/products/nolmyra-easy-chair-birch-veneer-grey__0836782_pe600883_s5.jpg?f=xxs"},{"name":"NOLMYRA","description":"Easy chair","price":"30","image":"https://www.ikea.com/gb/en/images/products/ekolsund-recliner-gunnared-dark-grey__0779001_ph163114_s5.jpg?f=xxs"},{"name":"EKOLSUND","description":"Recliner","price":"279","image":"https://www.ikea.com/gb/en/images/products/poaeng-rocking-chair-white-stained-oak-veneer-vislanda-black-white__0682898_pe720592_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Rocking-chair","price":"135","image":"https://www.ikea.com/gb/en/images/products/gubbo-easy-chair-velvet-light-grey__0804459_pe769187_s5.jpg?f=xxs"},{"name":"GUBBO","description":"Easy chair","price":"150","image":"https://www.ikea.com/gb/en/images/products/fasalt-swivel-armchair-velvet-grey__0766658_pe753855_s5.jpg?f=xxs"},{"name":"FASALT","description":"Swivel armchair","price":"450","image":"https://www.ikea.com/gb/en/images/products/omtaenksam-armchair-gunnared-dark-grey__0811486_pe771657_s5.jpg?f=xxs"},{"name":"OMTÄNKSAM","description":"Armchair","price":"250","image":"https://www.ikea.com/gb/en/images/products/poaeng-rocking-chair-black-brown-knisa-black__0837376_pe667282_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Rocking-chair","price":"95","image":"https://www.ikea.com/gb/en/images/products/groenlid-armchair-sporda-natural__0837559_pe690440_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Rocking-chair","price":"140","image":"https://www.ikea.com/gb/en/images/products/havsten-easy-chair-in-outdoor-beige__0773285_pe756249_s5.jpg?f=xxs"},{"name":"GRÖNLID","description":"Armchair","price":"230","image":"https://www.ikea.com/gb/en/images/products/poaeng-rocking-chair-birch-veneer-rockneby-multicolour__0949835_pe800050_s5.jpg?f=xxs"},{"name":"HAVSTEN","description":"Easy chair, in/outdoor83x94x90 cm","price":"200","image":"https://www.ikea.com/gb/en/images/products/strandmon-childrens-armchair-vissle-grey__0876261_pe668408_s5.jpg?f=xxs"},{"name":"POÄNG","description":"Rocking-chair","price":"125","image":"https://www.ikea.com/gb/en/images/products/bingsta-armchair-vissle-dark-yellow-kabusa-dark-yellow__0761761_pe751429_s5.jpg?f=xxs"},{"name":"STRANDMON","description":"Children's armchair","price":"99","image":"https://www.ikea.com/gb/en/images/products/groenlid-armchair-tallmyra-light-red__0852410_pe780052_s5.jpg?f=xxs"},{"name":"BINGSTA","description":"Armchair","price":"129","image":"https://www.ikea.com/gb/en/images/products/groenlid-armchair-tallmyra-light-green__0840869_pe690462_s5.jpg?f=xxs"},{"name":"GRÖNLID","description":"Armchair","price":"210","image":"https://www.ikea.com/gb/en/images/products/lidhult-armchair-gassebol-light-beige__0828738_pe688915_s5.jpg?f=xxs"},{"name":"GRÖNLID","description":"Armchair","price":"210","image":"https://www.ikea.com/gb/en/images/products/froeset-easy-chair-white-stained-oak-veneer__0937802_pe793856_s5.jpg?f=xxs"},{"name":"LIDHULT","description":"Armchair","price":"300","image":"https://www.ikea.com/gb/en/images/products/ektorp-armchair-hallarp-beige__0818470_pe774427_s5.jpg?f=xxs"},{"name":"FRÖSET","description":"Easy chair","price":"75","image":"https://www.ikea.com/gb/en/images/products/saelleryd-armchair-grey__0925075_pe788702_s5.jpg?f=xxs"},{"name":"EKTORP","description":"Armchair","price":"229","image":"https://www.ikea.com/gb/en/images/products/lycksele-murbo-chair-bed-vallarum-grey__0833851_pe600273_s5.jpg?f=xxs"},{"name":"SÄLLERYD","description":"Armchair","price":"300","image":"https://www.ikea.com/gb/en/images/products/lycksele-havet-chair-bed-vallarum-grey__0833851_pe600273_s5.jpg?f=xxs"},{"name":"LYCKSELE MURBO","description":"Chair-bed","price":"180","image":"https://www.ikea.com/gb/en/images/products/bingsta-high-back-armchair-vissle-dark-yellow-kabusa-dark-yellow__0761754_pe751423_s5.jpg?f=xxs"},{"name":"LYCKSELE HÅVET","description":"Chair-bed","price":"230","image":"https://www.ikea.com/gb/en/images/products/vedbo-chair-with-armrests-black-gunnared-dark-grey__0815222_pe772809_s5.jpg?f=xxs"},{"name":"BINGSTA","description":"High-back armchair","price":"165","image":"https://www.ikea.com/gb/en/images/products/linnebaeck-easy-chair-ramna-light-grey__0951667_pe801312_s5.jpg?f=xxs"},{"name":"VEDBO","description":"Chair with armrests","price":"150","image":null},{"name":"LINNEBÄCK","description":"Easy chair","price":"40","image":null}] -------------------------------------------------------------------------------- /public/products/coffee_tables.json: -------------------------------------------------------------------------------- 1 | [{"name":"Gala Tempered Glass Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8891527","price":"£195.00","image":"https://media.4rgos.it/s/Argos/8891527_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Nomad Coffee Table - Oak Effect","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8573209","price":"£185.00","image":"https://media.4rgos.it/s/Argos/8573209_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skandi Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/3442342","price":"£100.00","image":"https://media.4rgos.it/s/Argos/3442342_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Grooved Storage Coffee Table - Oak","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9220953","price":"£195.00","image":"https://media.4rgos.it/s/Argos/9220953_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Max Oiled Oak Coffee Table With Shelf","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8955030","price":"£195.00","image":"https://media.4rgos.it/s/Argos/8955030_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Halden Coffee Table - Ash Effect","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8537946","price":"£130.00","image":"https://media.4rgos.it/s/Argos/8537946_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Finley Coffee Table - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/2993414","price":"£70.00","image":"https://media.4rgos.it/s/Argos/2993414_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Wire Frame Bird Cage Coffee and Side Tables","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/5791211","price":"£100.00","image":"https://media.4rgos.it/s/Argos/5791211_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Malibu Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8555014","price":"£58.00","image":"https://media.4rgos.it/s/Argos/8555014_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Loft Living Coffee Table - Oak Effect","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/3154551","price":"£90.00","image":"https://media.4rgos.it/s/Argos/3154551_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sasha Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/4042222","price":"£20.00","image":"https://media.4rgos.it/s/Argos/4042222_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skandi Coffee Table - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/7683341","price":"£60.00","image":"https://media.4rgos.it/s/Argos/7683341_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Agra Occasional Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9361379","price":"£50.00","image":"https://media.4rgos.it/s/Argos/9361379_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Cubes 1 Shelf Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/6095662","price":"£35.00","image":"https://media.4rgos.it/s/Argos/6095662_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Mid Century Record Holder Table - Black","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9348581","price":"£42.00","image":"https://media.4rgos.it/s/Argos/9348581_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Country Hideaway Wooden Leg Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9325920","price":"£38.00","image":"https://media.4rgos.it/s/Argos/9325920_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Winchester Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8542333","price":"£105.00","image":"https://media.4rgos.it/s/Argos/8542333_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Klark Hairpin Coffee Table - Dark Wood Effect","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8694308","price":"£70.00","image":"https://media.4rgos.it/s/Argos/8694308_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sleigh Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8643548","price":"£140.00","image":"https://media.4rgos.it/s/Argos/8643548_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bournemouth Coffee Table - Light Grey","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9208951","price":"£90.00","image":"https://media.4rgos.it/s/Argos/9208951_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Maxim Black Smoked Glass Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8975333","price":"£80.00","image":"https://media.4rgos.it/s/Argos/8975333_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bournemouth Tray Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/4564968","price":"£70.00","image":"https://media.4rgos.it/s/Argos/4564968_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kirby Oak And Red Gloss Metal Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9409413","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9409413_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sona Storage Hammered Aluminium Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8898173","price":"£195.00","image":"https://media.4rgos.it/s/Argos/8898173_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kent 2 Drawer Console Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9380714","price":"£170.00","image":"https://media.4rgos.it/s/Argos/9380714_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Gingko Black And White Metal Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9365911","price":"£150.00","image":"https://media.4rgos.it/s/Argos/9365911_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sleigh Gloss Gas Lift Coffee Table - White","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/7629484","price":"£250.00","image":"https://media.4rgos.it/s/Argos/7629484_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Neo Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9191831","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9191831_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bert Coffee Table - White","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/9200296","price":"£95.00","image":"https://media.4rgos.it/s/Argos/9200296_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kent 2 Drawer Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/3440959","price":"£230.00","image":"https://media.4rgos.it/s/Argos/3440959_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Venice Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/4492944","price":"£90.00","image":"https://media.4rgos.it/s/Argos/4492944_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tokki Black Coffee Table","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8738611","price":"£495.00","image":"https://media.4rgos.it/s/Argos/8738611_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Novara 2 Drawer Coffee Table - Oak Veneer","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/7546196","price":"£275.00","image":"https://media.4rgos.it/s/Argos/7546196_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bumble Coffee Table - White","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/5804548","price":"£150.00","image":"https://media.4rgos.it/s/Argos/5804548_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Boutique Coffee Table - Marble Effect","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/5251531","price":"£90.00","image":"https://media.4rgos.it/s/Argos/5251531_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Cornelia Coffee Table - Oak","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/3630855","price":"£195.00","image":"https://media.4rgos.it/s/Argos/3630855_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Hayward 1 Drawer Coffee Table - White Gloss","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/3126620","price":"£105.00","image":"https://media.4rgos.it/s/Argos/3126620_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Oak and Glass Coffee Table - Natural","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8918895","price":"£195.00","image":"https://media.4rgos.it/s/Argos/8918895_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Cornelia Coffee Table - Walnut","name_link":"https://www.habitat.co.uk/browse/furniture/coffee-tables/c:809215/?tag=shop-by-room:living-room:coffee-tables/product/8597931","price":"£195.00","image":"https://media.4rgos.it/s/Argos/8597931_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"}] -------------------------------------------------------------------------------- /public/products/floor_lamps.json: -------------------------------------------------------------------------------- 1 | [{"name":"Shadow LED Rectangular Floor Lamp Base Only","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9172520","price":"£140.00","image":"https://media.4rgos.it/s/Argos/9172520_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Boast Floor Lamp - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9210028","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9210028_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sheldon Floor Lamp - White","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8964368","price":"£70.00","image":"https://media.4rgos.it/s/Argos/8964368_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fringe Floor Lamp - Grey","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8955872","price":"£50.00","image":"https://media.4rgos.it/s/Argos/8955872_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tripod Floor Lamp - Grey and Chrome","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9132742","price":"£35.00","image":"https://media.4rgos.it/s/Argos/9132742_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"3 Light Floor Lamp","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9168187","price":"£55.00","image":"https://media.4rgos.it/s/Argos/9168187_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Clane Arch Floor Lamp - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8345482","price":"£65.00","image":"https://media.4rgos.it/s/Argos/8345482_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Double Floor Lamp - Copper","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9346435","price":"£55.00","image":"https://media.4rgos.it/s/Argos/9346435_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Uplighter & Reading Floor Light - Brass","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9347881","price":"£55.00","image":"https://media.4rgos.it/s/Argos/9347881_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yves Metal Floor Lamp Base Only - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9425583","price":"£60.00","image":"https://media.4rgos.it/s/Argos/9425583_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Dylan Wooden Floor Lamp - Walnut","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9332999","price":"£85.00","image":"https://media.4rgos.it/s/Argos/9332999_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Narr Metal Shade Floor Lamp - Black and White","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9211405","price":"£65.00","image":"https://media.4rgos.it/s/Argos/9211405_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Pole Floor Lamp Base - Walnut","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8977568","price":"£110.00","image":"https://media.4rgos.it/s/Argos/8977568_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Double Floor Lamp - Grey","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8895097","price":"£45.00","image":"https://media.4rgos.it/s/Argos/8895097_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tripod Wooden Floor Lamp Base Only - Ash","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9412888","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9412888_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Dylan Wooden Floor Lamp Base Only - Ash","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9193884","price":"£85.00","image":"https://media.4rgos.it/s/Argos/9193884_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Country Hideaway Floor Lamp - Cream","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8865058","price":"£40.00","image":"https://media.4rgos.it/s/Argos/8865058_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ivar Floor Lamp - Black and Brass","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9172276","price":"£60.00","image":"https://media.4rgos.it/s/Argos/9172276_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Floor Lamp - Feather and Chrome","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8963118","price":"£60.00","image":"https://media.4rgos.it/s/Argos/8963118_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tripod Floor Lamp - Mustard and Chrome","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9336335","price":"£35.00","image":"https://media.4rgos.it/s/Argos/9336335_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Rayner Floor Lamp - Chrome","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8340834","price":"£28.00","image":"https://media.4rgos.it/s/Argos/8340834_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Etty Wood & Metal Floor Lamp","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9452594","price":"£75.00","image":"https://media.4rgos.it/s/Argos/9452594_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Glam 3 Light Floor Lamp - Chrome","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9201226","price":"£50.00","image":"https://media.4rgos.it/s/Argos/9201226_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Benson Floor Lamp - Blue","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8846761","price":"£30.00","image":"https://media.4rgos.it/s/Argos/8846761_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eero Floor Lamp","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9411645","price":"£60.00","image":"https://media.4rgos.it/s/Argos/9411645_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Tripod Floor Lamp Base - Walnut Stain","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9407271","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9407271_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sirit Floor Lamp - Natural","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9218783","price":"£50.00","image":"https://media.4rgos.it/s/Argos/9218783_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Base Only Floor Lamp - White","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8884572","price":"£15.00","image":"https://media.4rgos.it/s/Argos/8884572_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Wallace Complete Floor Lamp - Oak","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9375169","price":"£150.00","image":"https://media.4rgos.it/s/Argos/9375169_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Feather Floor Lamp - Grey and Rose Gold","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9305995","price":"£60.00","image":"https://media.4rgos.it/s/Argos/9305995_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Marbelle Floor Lamp with Black Base","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8875505","price":"£90.00","image":"https://media.4rgos.it/s/Argos/8875505_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Pole Floor Lamp Base Only - Oak","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9456033","price":"£110.00","image":"https://media.4rgos.it/s/Argos/9456033_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Sheldon Floor Lamp - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9417261","price":"£70.00","image":"https://media.4rgos.it/s/Argos/9417261_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Shelf Floor Lamp Base - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9406227","price":"£90.00","image":"https://media.4rgos.it/s/Argos/9406227_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lansbury Wooden Floor Lamp Base Only","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9404463","price":"£65.00","image":"https://media.4rgos.it/s/Argos/9404463_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Coleman Floor Lamp - Clear and Copper","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/9306293","price":"£95.00","image":"https://media.4rgos.it/s/Argos/9306293_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bobby Metal Floor Lamp - Multicolour","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8895011","price":"£50.00","image":"https://media.4rgos.it/s/Argos/8895011_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Matt Tripod Floor Lamp - Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8838298","price":"£35.00","image":"https://media.4rgos.it/s/Argos/8838298_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Pax The Parrot Floor Lamp - Gold and Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8179500","price":"£60.00","image":"https://media.4rgos.it/s/Argos/8179500_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Rayner Floor Lamp - Brass","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8172648","price":"£28.00","image":"https://media.4rgos.it/s/Argos/8172648_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Rattan Arc Floor Lamp - Cream and Black","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8024789","price":"£65.00","image":"https://media.4rgos.it/s/Argos/8024789_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aroura Single Glass Floor Lamp","name_link":"https://www.habitat.co.uk/browse/lighting/floor-lamps/c:809326/?clickOrigin=header:cat:menu:floor+lamps/product/8976961","price":"£90.00","image":"https://media.4rgos.it/s/Argos/8976961_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"}] -------------------------------------------------------------------------------- /public/products/beds.json: -------------------------------------------------------------------------------- 1 | [{"name":"Tatsuma King Size Bed Frame - Walnut","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8809320","price":"£320.00","image":"https://media.4rgos.it/s/Argos/8809320_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Industrial Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/2723938","price":"£150.00","image":"https://media.4rgos.it/s/Argos/2723938_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Blissford Double Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8866497","price":"£400.00","image":"https://media.4rgos.it/s/Argos/8866497_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Pandora Double Ottoman Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/3421662","price":"£300.00","image":"https://media.4rgos.it/s/Argos/3421662_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eros Ottoman Kingsize Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6256009","price":"£340.00","image":"https://media.4rgos.it/s/Argos/6256009_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Freja Double Metal Bed Frame - Silver","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8046080","price":"£70.00","image":"https://media.4rgos.it/s/Argos/8046080_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Avalon Single Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8261449","price":"£80.00","image":"https://media.4rgos.it/s/Argos/8261449_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Freja Single Metal Bed Frame - Silver","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8047931","price":"£60.00","image":"https://media.4rgos.it/s/Argos/8047931_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kristopher Small Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5644416","price":"£140.00","image":"https://media.4rgos.it/s/Argos/5644416_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fleur Double Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/3106846","price":"£120.00","image":"https://media.4rgos.it/s/Argos/3106846_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kaycie Double Bed Frame - Pine","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7342338","price":"£100.00","image":"https://media.4rgos.it/s/Argos/7342338_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kaycie Small Double Bed Frame - Pine","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7256149","price":"£90.00","image":"https://media.4rgos.it/s/Argos/7256149_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kristopher Single Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5665598","price":"£120.00","image":"https://media.4rgos.it/s/Argos/5665598_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Avalon Single Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8542199","price":"£80.00","image":"https://media.4rgos.it/s/Argos/8542199_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Double Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1259953","price":"£150.00","image":"https://media.4rgos.it/s/Argos/1259953_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fleur Small Double Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4720977","price":"£110.00","image":"https://media.4rgos.it/s/Argos/4720977_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Avalon Double Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8494845","price":"£100.00","image":"https://media.4rgos.it/s/Argos/8494845_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fleur Single Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4169260","price":"£90.00","image":"https://media.4rgos.it/s/Argos/4169260_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1259630","price":"£150.00","image":"https://media.4rgos.it/s/Argos/1259630_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Single Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1309308","price":"£120.00","image":"https://media.4rgos.it/s/Argos/1309308_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Double Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6219204","price":"£130.00","image":"https://media.4rgos.it/s/Argos/6219204_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Avalon Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8153997","price":"£100.00","image":"https://media.4rgos.it/s/Argos/8153997_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Kingsize Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6226242","price":"£145.00","image":"https://media.4rgos.it/s/Argos/6226242_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Double Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6193571","price":"£130.00","image":"https://media.4rgos.it/s/Argos/6193571_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Single Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1199501","price":"£120.00","image":"https://media.4rgos.it/s/Argos/1199501_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Single Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6216867","price":"£110.00","image":"https://media.4rgos.it/s/Argos/6216867_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Small Double Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1309391","price":"£140.00","image":"https://media.4rgos.it/s/Argos/1309391_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Kingsize Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6217828","price":"£145.00","image":"https://media.4rgos.it/s/Argos/6217828_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Yani Single Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6129033","price":"£110.00","image":"https://media.4rgos.it/s/Argos/6129033_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fleur Kingsize Metal Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/2706113","price":"£140.00","image":"https://media.4rgos.it/s/Argos/2706113_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Skylar Small Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/1344710","price":"£140.00","image":"https://media.4rgos.it/s/Argos/1344710_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Small Double Ottoman Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5747588","price":"£190.00","image":"https://media.4rgos.it/s/Argos/5747588_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Heathdon End Open Ottoman Single Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7349252","price":"£180.00","image":"https://media.4rgos.it/s/Argos/7349252_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Heathdon End Open Ottoman Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7238105","price":"£220.00","image":"https://media.4rgos.it/s/Argos/7238105_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Double Faux Leather Ottoman Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5744866","price":"£200.00","image":"https://media.4rgos.it/s/Argos/5744866_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kaycie Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7287840","price":"£120.00","image":"https://media.4rgos.it/s/Argos/7287840_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Double End Open Ottoman Bed Frame -Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4129626","price":"£200.00","image":"https://media.4rgos.it/s/Argos/4129626_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Heathdon End Open Ottoman Kingsize Bed - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7345328","price":"£250.00","image":"https://media.4rgos.it/s/Argos/7345328_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspley Small Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4831938","price":"£160.00","image":"https://media.4rgos.it/s/Argos/4831938_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Ottoman Small Double Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/3979286","price":"£190.00","image":"https://media.4rgos.it/s/Argos/3979286_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kaycie Small Double Bed Frame - White","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7037076","price":"£110.00","image":"https://media.4rgos.it/s/Argos/7037076_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspley Double Bed Frame - Oak Stain","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4976800","price":"£150.00","image":"https://media.4rgos.it/s/Argos/4976800_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspley Single Bed Frame - Oak Stain","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4909664","price":"£120.00","image":"https://media.4rgos.it/s/Argos/4909664_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Single Ottoman Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/4158714","price":"£160.00","image":"https://media.4rgos.it/s/Argos/4158714_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Heathdon Side Open Ottoman Small Double Bed -Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7031890","price":"£220.00","image":"https://media.4rgos.it/s/Argos/7031890_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eros Ottoman Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/6185709","price":"£300.00","image":"https://media.4rgos.it/s/Argos/6185709_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Double Ottoman Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7237096","price":"£210.00","image":"https://media.4rgos.it/s/Argos/7237096_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspley Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/9377411","price":"£170.00","image":"https://media.4rgos.it/s/Argos/9377411_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Single Faux Leather Ottoman Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5748848","price":"£160.00","image":"https://media.4rgos.it/s/Argos/5748848_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspen Small Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7353798","price":"£190.00","image":"https://media.4rgos.it/s/Argos/7353798_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon 4 Drawer Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8934659","price":"£250.00","image":"https://media.4rgos.it/s/Argos/8934659_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kanso Double Metal Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/9186190","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9186190_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspen Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7461491","price":"£200.00","image":"https://media.4rgos.it/s/Argos/7461491_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lavendon Kingsize Ottoman Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/5723681","price":"£230.00","image":"https://media.4rgos.it/s/Argos/5723681_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Industrial Small Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/3089334","price":"£140.00","image":"https://media.4rgos.it/s/Argos/3089334_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Platform Double Bed Frame - Black","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/9400546","price":"£100.00","image":"https://media.4rgos.it/s/Argos/9400546_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Heathdon End Open Ottoman Small Double Bed - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7232936","price":"£210.00","image":"https://media.4rgos.it/s/Argos/7232936_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Kristopher Double Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/7311235","price":"£150.00","image":"https://media.4rgos.it/s/Argos/7311235_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Industrial Single Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/3930768","price":"£120.00","image":"https://media.4rgos.it/s/Argos/3930768_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Aspen Single Bed Frame - Grey","name_link":"https://www.habitat.co.uk/browse/furniture/beds/c:809198/?clickOrigin=header:cat:menu:beds/product/8538079","price":"£170.00","image":"https://media.4rgos.it/s/Argos/8538079_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"}] -------------------------------------------------------------------------------- /public/products/armchairs.json: -------------------------------------------------------------------------------- 1 | [{"name":"Jackson Velvet Cuddle Chair - Black","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9473425","price":"£450.00","image":"https://media.4rgos.it/s/Argos/9473425_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Julien Charcoal Fabric Armchair","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9172025","price":"£295.00","image":"https://media.4rgos.it/s/Argos/9172025_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Callie Fabric Wingback Chair - Blush Pink","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8839895","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8839895_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Teal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/7120172","price":"£175.00","image":"https://media.4rgos.it/s/Argos/7120172_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Rhett Faux Leather Swivel Chair - Black","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8774651","price":"£250.00","image":"https://media.4rgos.it/s/Argos/8774651_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Arya Green Fabric Armchair","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9162822","price":"£395.00","image":"https://media.4rgos.it/s/Argos/9162822_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Evie Fabric Armchair in a Box - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/6214560","price":"£140.00","image":"https://media.4rgos.it/s/Argos/6214560_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Delilah Fabric Cocktail Chair - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8937773","price":"£80.00","image":"https://media.4rgos.it/s/Argos/8937773_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eppy Fabric Accent Chair - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/7878008","price":"£60.00","image":"https://media.4rgos.it/s/Argos/7878008_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Delilah Fabric Cocktail Chair - Teal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9213135","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9213135_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eppy Fabric Accent Chair - Blue","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8896010","price":"£60.00","image":"https://media.4rgos.it/s/Argos/8896010_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Callie Fabric Wingback Chair- Light Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8884950","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8884950_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Nellie Fabric Accent Chair - Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8346278","price":"£150.00","image":"https://media.4rgos.it/s/Argos/8346278_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Callie Fabric Wingback Chair - Mustard Yellow","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8887562","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8887562_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Callie Fabric Wingback Chair - Teal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8724948","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8724948_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fabric Tub Chair - Black","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/2488620","price":"£99.00","image":"https://media.4rgos.it/s/Argos/2488620_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Eppy Fabric Accent Chair - Yellow","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/7665053","price":"£60.00","image":"https://media.4rgos.it/s/Argos/7665053_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Delilah Fabric Cocktail Chair - Pink","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9397336","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9397336_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Delilah Fabric Cocktail Chair - Yellow","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9337808","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9337808_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Evie Fabric Armchair in a Box - Natural","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/6126311","price":"£140.00","image":"https://media.4rgos.it/s/Argos/6126311_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ayres Fabric Tub Chair - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9202964","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9202964_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fabric Tub Chair - Mocha","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/2487906","price":"£99.00","image":"https://media.4rgos.it/s/Argos/2487906_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ezra Velvet Swival Chair - Light Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8819372","price":"£200.00","image":"https://media.4rgos.it/s/Argos/8819372_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Snuggle Velvet Armchair - Yellow","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8743826","price":"£230.00","image":"https://media.4rgos.it/s/Argos/8743826_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bentwood High Back Chair & Footstool - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8106511","price":"£100.00","image":"https://media.4rgos.it/s/Argos/8106511_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Delilah Fabric Cocktail Chair - Light Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9221433","price":"£80.00","image":"https://media.4rgos.it/s/Argos/9221433_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fabric Tub Chair - Duck Egg","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8085450","price":"£99.00","image":"https://media.4rgos.it/s/Argos/8085450_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fabric Lounger Chair - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4275161","price":"£100.00","image":"https://media.4rgos.it/s/Argos/4275161_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bentwood High Back Chair & Footstool - Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9217368","price":"£100.00","image":"https://media.4rgos.it/s/Argos/9217368_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Blue","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8874702","price":"£175.00","image":"https://media.4rgos.it/s/Argos/8874702_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Green","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4378439","price":"£175.00","image":"https://media.4rgos.it/s/Argos/4378439_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Remi Fabric Armchair in a Box -Teal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9153721","price":"£170.00","image":"https://media.4rgos.it/s/Argos/9153721_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Vienna Velvet Cuddle Chair - Rose","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8770662","price":"£300.00","image":"https://media.4rgos.it/s/Argos/8770662_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Pink","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4337559","price":"£175.00","image":"https://media.4rgos.it/s/Argos/4337559_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Vanessa Velvet Armchair - Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8595809","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8595809_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Moda Faux Leather Armchair - Black","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4815545","price":"£180.00","image":"https://media.4rgos.it/s/Argos/4815545_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Snuggle Velvet Armchair - Blue","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4096539","price":"£230.00","image":"https://media.4rgos.it/s/Argos/4096539_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8887713","price":"£175.00","image":"https://media.4rgos.it/s/Argos/8887713_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Vanessa Velvet Armchair - Green","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8382847","price":"£180.00","image":"https://media.4rgos.it/s/Argos/8382847_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Lisbon Fabric Armchair - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9362897","price":"£270.00","image":"https://media.4rgos.it/s/Argos/9362897_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ayres Fabric Tub Chair - Aqua","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9184776","price":"£130.00","image":"https://media.4rgos.it/s/Argos/9184776_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Ayres Fabric Tub Chair - Yellow","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8883748","price":"£130.00","image":"https://media.4rgos.it/s/Argos/8883748_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Jax Velvet Accent Chair - Navy","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4016234","price":"£130.00","image":"https://media.4rgos.it/s/Argos/4016234_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Faux Leather Tub Chair - Brown","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/2584335","price":"£99.00","image":"https://media.4rgos.it/s/Argos/2584335_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Faux Leather Tub Chair - Black","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/2465564","price":"£99.00","image":"https://media.4rgos.it/s/Argos/2465564_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Remi Fabric Armchair in a Box - Charcoal","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9308222","price":"£170.00","image":"https://media.4rgos.it/s/Argos/9308222_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Dorian Faux Leather Armchair - Tan","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8435866","price":"£250.00","image":"https://media.4rgos.it/s/Argos/8435866_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Rufus Velvet Accent Chair - Blue","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8389211","price":"£130.00","image":"https://media.4rgos.it/s/Argos/8389211_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Alana Velvet Shell Back Accent Chair - Navy","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/7025387","price":"£130.00","image":"https://media.4rgos.it/s/Argos/7025387_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Bentwood High Back Chair & Footstool - Natural","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/5717336","price":"£100.00","image":"https://media.4rgos.it/s/Argos/5717336_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Salisbury Leather Armchair - Tan","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/3314047","price":"£450.00","image":"https://media.4rgos.it/s/Argos/3314047_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Celine Velvet Accent Chair - Pink","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8809708","price":"£175.00","image":"https://media.4rgos.it/s/Argos/8809708_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Merlot Velvet Accent Chair - Orange","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8258201","price":"£115.00","image":"https://media.4rgos.it/s/Argos/8258201_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Alana Velvet Shell Back Accent Chair - Dusty Pink","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/6877275","price":"£130.00","image":"https://media.4rgos.it/s/Argos/6877275_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Jax Velvet Accent Chair - Silver","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/4842996","price":"£130.00","image":"https://media.4rgos.it/s/Argos/4842996_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Milford Leather Chair - Tan","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9308370","price":"£450.00","image":"https://media.4rgos.it/s/Argos/9308370_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Jackson Velvet Cuddle Chair - Orange","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9211429","price":"£450.00","image":"https://media.4rgos.it/s/Argos/9211429_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Milford Fabric Swivel Chair - Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/9203640","price":"£430.00","image":"https://media.4rgos.it/s/Argos/9203640_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Fabric Pod Chair - Navy","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8898915","price":"£120.00","image":"https://media.4rgos.it/s/Argos/8898915_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"},{"name":"Remi Fabric Armchair in a Box - Light Grey","name_link":"https://www.habitat.co.uk/browse/sofas-and-armchairs/armchairs/c:809185/?clickOrigin=header:home:menu:armchairs/product/8896395","price":"£170.00","image":"https://media.4rgos.it/s/Argos/8896395_R_SET?w=270&h=270&qlt=75&fmt.jpeg.interlaced=true"}] -------------------------------------------------------------------------------- /ios/App/App.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 2FAD9763203C412B000D30F8 /* config.xml in Resources */ = {isa = PBXBuildFile; fileRef = 2FAD9762203C412B000D30F8 /* config.xml */; }; 11 | 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */ = {isa = PBXBuildFile; fileRef = 50379B222058CBB4000EE86E /* capacitor.config.json */; }; 12 | 504EC3081FED79650016851F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504EC3071FED79650016851F /* AppDelegate.swift */; }; 13 | 504EC30D1FED79650016851F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30B1FED79650016851F /* Main.storyboard */; }; 14 | 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; 15 | 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 16 | 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; 17 | A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = ""; }; 22 | 50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = ""; }; 23 | 504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; }; 24 | 504EC3071FED79650016851F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 25 | 504EC30C1FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 26 | 504EC30E1FED79650016851F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 27 | 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 28 | 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 29 | 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = SOURCE_ROOT; }; 30 | AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; 32 | FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; 33 | /* End PBXFileReference section */ 34 | 35 | /* Begin PBXFrameworksBuildPhase section */ 36 | 504EC3011FED79650016851F /* Frameworks */ = { 37 | isa = PBXFrameworksBuildPhase; 38 | buildActionMask = 2147483647; 39 | files = ( 40 | A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | /* End PBXFrameworksBuildPhase section */ 45 | 46 | /* Begin PBXGroup section */ 47 | 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { 48 | isa = PBXGroup; 49 | children = ( 50 | AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, 51 | ); 52 | name = Frameworks; 53 | sourceTree = ""; 54 | }; 55 | 504EC2FB1FED79650016851F = { 56 | isa = PBXGroup; 57 | children = ( 58 | 504EC3061FED79650016851F /* App */, 59 | 504EC3051FED79650016851F /* Products */, 60 | 7F8756D8B27F46E3366F6CEA /* Pods */, 61 | 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, 62 | ); 63 | sourceTree = ""; 64 | }; 65 | 504EC3051FED79650016851F /* Products */ = { 66 | isa = PBXGroup; 67 | children = ( 68 | 504EC3041FED79650016851F /* App.app */, 69 | ); 70 | name = Products; 71 | sourceTree = ""; 72 | }; 73 | 504EC3061FED79650016851F /* App */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 50379B222058CBB4000EE86E /* capacitor.config.json */, 77 | 504EC3071FED79650016851F /* AppDelegate.swift */, 78 | 504EC30B1FED79650016851F /* Main.storyboard */, 79 | 504EC30E1FED79650016851F /* Assets.xcassets */, 80 | 504EC3101FED79650016851F /* LaunchScreen.storyboard */, 81 | 504EC3131FED79650016851F /* Info.plist */, 82 | 2FAD9762203C412B000D30F8 /* config.xml */, 83 | 50B271D01FEDC1A000F3C39B /* public */, 84 | ); 85 | path = App; 86 | sourceTree = ""; 87 | }; 88 | 7F8756D8B27F46E3366F6CEA /* Pods */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, 92 | AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, 93 | ); 94 | name = Pods; 95 | sourceTree = ""; 96 | }; 97 | /* End PBXGroup section */ 98 | 99 | /* Begin PBXNativeTarget section */ 100 | 504EC3031FED79650016851F /* App */ = { 101 | isa = PBXNativeTarget; 102 | buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; 103 | buildPhases = ( 104 | 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, 105 | 504EC3001FED79650016851F /* Sources */, 106 | 504EC3011FED79650016851F /* Frameworks */, 107 | 504EC3021FED79650016851F /* Resources */, 108 | 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, 109 | ); 110 | buildRules = ( 111 | ); 112 | dependencies = ( 113 | ); 114 | name = App; 115 | productName = App; 116 | productReference = 504EC3041FED79650016851F /* App.app */; 117 | productType = "com.apple.product-type.application"; 118 | }; 119 | /* End PBXNativeTarget section */ 120 | 121 | /* Begin PBXProject section */ 122 | 504EC2FC1FED79650016851F /* Project object */ = { 123 | isa = PBXProject; 124 | attributes = { 125 | LastSwiftUpdateCheck = 0920; 126 | LastUpgradeCheck = 0920; 127 | TargetAttributes = { 128 | 504EC3031FED79650016851F = { 129 | CreatedOnToolsVersion = 9.2; 130 | LastSwiftMigration = 1100; 131 | ProvisioningStyle = Automatic; 132 | }; 133 | }; 134 | }; 135 | buildConfigurationList = 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */; 136 | compatibilityVersion = "Xcode 8.0"; 137 | developmentRegion = en; 138 | hasScannedForEncodings = 0; 139 | knownRegions = ( 140 | en, 141 | Base, 142 | ); 143 | mainGroup = 504EC2FB1FED79650016851F; 144 | productRefGroup = 504EC3051FED79650016851F /* Products */; 145 | projectDirPath = ""; 146 | projectRoot = ""; 147 | targets = ( 148 | 504EC3031FED79650016851F /* App */, 149 | ); 150 | }; 151 | /* End PBXProject section */ 152 | 153 | /* Begin PBXResourcesBuildPhase section */ 154 | 504EC3021FED79650016851F /* Resources */ = { 155 | isa = PBXResourcesBuildPhase; 156 | buildActionMask = 2147483647; 157 | files = ( 158 | 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */, 159 | 50B271D11FEDC1A000F3C39B /* public in Resources */, 160 | 504EC30F1FED79650016851F /* Assets.xcassets in Resources */, 161 | 50379B232058CBB4000EE86E /* capacitor.config.json in Resources */, 162 | 504EC30D1FED79650016851F /* Main.storyboard in Resources */, 163 | 2FAD9763203C412B000D30F8 /* config.xml in Resources */, 164 | ); 165 | runOnlyForDeploymentPostprocessing = 0; 166 | }; 167 | /* End PBXResourcesBuildPhase section */ 168 | 169 | /* Begin PBXShellScriptBuildPhase section */ 170 | 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { 171 | isa = PBXShellScriptBuildPhase; 172 | buildActionMask = 2147483647; 173 | files = ( 174 | ); 175 | inputPaths = ( 176 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 177 | "${PODS_ROOT}/Manifest.lock", 178 | ); 179 | name = "[CP] Check Pods Manifest.lock"; 180 | outputPaths = ( 181 | "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", 182 | ); 183 | runOnlyForDeploymentPostprocessing = 0; 184 | shellPath = /bin/sh; 185 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 186 | showEnvVarsInLog = 0; 187 | }; 188 | 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { 189 | isa = PBXShellScriptBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | ); 193 | inputPaths = ( 194 | ); 195 | name = "[CP] Embed Pods Frameworks"; 196 | outputPaths = ( 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | shellPath = /bin/sh; 200 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; 201 | showEnvVarsInLog = 0; 202 | }; 203 | /* End PBXShellScriptBuildPhase section */ 204 | 205 | /* Begin PBXSourcesBuildPhase section */ 206 | 504EC3001FED79650016851F /* Sources */ = { 207 | isa = PBXSourcesBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | 504EC3081FED79650016851F /* AppDelegate.swift in Sources */, 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | }; 214 | /* End PBXSourcesBuildPhase section */ 215 | 216 | /* Begin PBXVariantGroup section */ 217 | 504EC30B1FED79650016851F /* Main.storyboard */ = { 218 | isa = PBXVariantGroup; 219 | children = ( 220 | 504EC30C1FED79650016851F /* Base */, 221 | ); 222 | name = Main.storyboard; 223 | sourceTree = ""; 224 | }; 225 | 504EC3101FED79650016851F /* LaunchScreen.storyboard */ = { 226 | isa = PBXVariantGroup; 227 | children = ( 228 | 504EC3111FED79650016851F /* Base */, 229 | ); 230 | name = LaunchScreen.storyboard; 231 | sourceTree = ""; 232 | }; 233 | /* End PBXVariantGroup section */ 234 | 235 | /* Begin XCBuildConfiguration section */ 236 | 504EC3141FED79650016851F /* Debug */ = { 237 | isa = XCBuildConfiguration; 238 | buildSettings = { 239 | ALWAYS_SEARCH_USER_PATHS = NO; 240 | CLANG_ANALYZER_NONNULL = YES; 241 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 242 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 243 | CLANG_CXX_LIBRARY = "libc++"; 244 | CLANG_ENABLE_MODULES = YES; 245 | CLANG_ENABLE_OBJC_ARC = YES; 246 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 247 | CLANG_WARN_BOOL_CONVERSION = YES; 248 | CLANG_WARN_COMMA = YES; 249 | CLANG_WARN_CONSTANT_CONVERSION = YES; 250 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 251 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 252 | CLANG_WARN_EMPTY_BODY = YES; 253 | CLANG_WARN_ENUM_CONVERSION = YES; 254 | CLANG_WARN_INFINITE_RECURSION = YES; 255 | CLANG_WARN_INT_CONVERSION = YES; 256 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 257 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 258 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 259 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 260 | CLANG_WARN_STRICT_PROTOTYPES = YES; 261 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 262 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 263 | CLANG_WARN_UNREACHABLE_CODE = YES; 264 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 265 | CODE_SIGN_IDENTITY = "iPhone Developer"; 266 | COPY_PHASE_STRIP = NO; 267 | DEBUG_INFORMATION_FORMAT = dwarf; 268 | ENABLE_STRICT_OBJC_MSGSEND = YES; 269 | ENABLE_TESTABILITY = YES; 270 | GCC_C_LANGUAGE_STANDARD = gnu11; 271 | GCC_DYNAMIC_NO_PIC = NO; 272 | GCC_NO_COMMON_BLOCKS = YES; 273 | GCC_OPTIMIZATION_LEVEL = 0; 274 | GCC_PREPROCESSOR_DEFINITIONS = ( 275 | "DEBUG=1", 276 | "$(inherited)", 277 | ); 278 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 279 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 280 | GCC_WARN_UNDECLARED_SELECTOR = YES; 281 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 282 | GCC_WARN_UNUSED_FUNCTION = YES; 283 | GCC_WARN_UNUSED_VARIABLE = YES; 284 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 285 | MTL_ENABLE_DEBUG_INFO = YES; 286 | ONLY_ACTIVE_ARCH = YES; 287 | SDKROOT = iphoneos; 288 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 289 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 290 | }; 291 | name = Debug; 292 | }; 293 | 504EC3151FED79650016851F /* Release */ = { 294 | isa = XCBuildConfiguration; 295 | buildSettings = { 296 | ALWAYS_SEARCH_USER_PATHS = NO; 297 | CLANG_ANALYZER_NONNULL = YES; 298 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 299 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 300 | CLANG_CXX_LIBRARY = "libc++"; 301 | CLANG_ENABLE_MODULES = YES; 302 | CLANG_ENABLE_OBJC_ARC = YES; 303 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 304 | CLANG_WARN_BOOL_CONVERSION = YES; 305 | CLANG_WARN_COMMA = YES; 306 | CLANG_WARN_CONSTANT_CONVERSION = YES; 307 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 308 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 309 | CLANG_WARN_EMPTY_BODY = YES; 310 | CLANG_WARN_ENUM_CONVERSION = YES; 311 | CLANG_WARN_INFINITE_RECURSION = YES; 312 | CLANG_WARN_INT_CONVERSION = YES; 313 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 314 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 315 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 316 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 317 | CLANG_WARN_STRICT_PROTOTYPES = YES; 318 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 319 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 320 | CLANG_WARN_UNREACHABLE_CODE = YES; 321 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 322 | CODE_SIGN_IDENTITY = "iPhone Developer"; 323 | COPY_PHASE_STRIP = NO; 324 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 325 | ENABLE_NS_ASSERTIONS = NO; 326 | ENABLE_STRICT_OBJC_MSGSEND = YES; 327 | GCC_C_LANGUAGE_STANDARD = gnu11; 328 | GCC_NO_COMMON_BLOCKS = YES; 329 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 330 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 331 | GCC_WARN_UNDECLARED_SELECTOR = YES; 332 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 333 | GCC_WARN_UNUSED_FUNCTION = YES; 334 | GCC_WARN_UNUSED_VARIABLE = YES; 335 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 336 | MTL_ENABLE_DEBUG_INFO = NO; 337 | SDKROOT = iphoneos; 338 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 339 | VALIDATE_PRODUCT = YES; 340 | }; 341 | name = Release; 342 | }; 343 | 504EC3171FED79650016851F /* Debug */ = { 344 | isa = XCBuildConfiguration; 345 | baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; 346 | buildSettings = { 347 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 348 | CODE_SIGN_STYLE = Automatic; 349 | INFOPLIST_FILE = App/Info.plist; 350 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 351 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 352 | OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\""; 353 | PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter; 354 | PRODUCT_NAME = "$(TARGET_NAME)"; 355 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG USE_PUSH"; 356 | SWIFT_VERSION = 5.0; 357 | TARGETED_DEVICE_FAMILY = "1,2"; 358 | }; 359 | name = Debug; 360 | }; 361 | 504EC3181FED79650016851F /* Release */ = { 362 | isa = XCBuildConfiguration; 363 | baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; 364 | buildSettings = { 365 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 366 | CODE_SIGN_STYLE = Automatic; 367 | INFOPLIST_FILE = App/Info.plist; 368 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 369 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 370 | PRODUCT_BUNDLE_IDENTIFIER = io.ionic.starter; 371 | PRODUCT_NAME = "$(TARGET_NAME)"; 372 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = USE_PUSH; 373 | SWIFT_VERSION = 5.0; 374 | TARGETED_DEVICE_FAMILY = "1,2"; 375 | }; 376 | name = Release; 377 | }; 378 | /* End XCBuildConfiguration section */ 379 | 380 | /* Begin XCConfigurationList section */ 381 | 504EC2FF1FED79650016851F /* Build configuration list for PBXProject "App" */ = { 382 | isa = XCConfigurationList; 383 | buildConfigurations = ( 384 | 504EC3141FED79650016851F /* Debug */, 385 | 504EC3151FED79650016851F /* Release */, 386 | ); 387 | defaultConfigurationIsVisible = 0; 388 | defaultConfigurationName = Release; 389 | }; 390 | 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */ = { 391 | isa = XCConfigurationList; 392 | buildConfigurations = ( 393 | 504EC3171FED79650016851F /* Debug */, 394 | 504EC3181FED79650016851F /* Release */, 395 | ); 396 | defaultConfigurationIsVisible = 0; 397 | defaultConfigurationName = Release; 398 | }; 399 | /* End XCConfigurationList section */ 400 | }; 401 | rootObject = 504EC2FC1FED79650016851F /* Project object */; 402 | } 403 | --------------------------------------------------------------------------------