diff --git a/p4/.expo/packager-info.json b/p4/.expo/packager-info.json index b845fd86777065b0f6c325e280b8213b5ab09b2a..75745a137afc82b6f6b7b8a5ca6f448f8780c5f0 100644 --- a/p4/.expo/packager-info.json +++ b/p4/.expo/packager-info.json @@ -2,8 +2,8 @@ "devToolsPort": 19002, "expoServerPort": 19000, "packagerPort": 19001, - "packagerPid": 2212, - "expoServerNgrokUrl": "https://5v-9za.anonymous.p4.exp.direct", - "packagerNgrokUrl": "https://packager.5v-9za.anonymous.p4.exp.direct", - "ngrokPid": 1260 + "packagerPid": 11012, + "expoServerNgrokUrl": "https://8h-zc8.hhorge.p4.exp.direct", + "packagerNgrokUrl": "https://packager.8h-zc8.hhorge.p4.exp.direct", + "ngrokPid": 8404 } diff --git a/p4/.expo/settings.json b/p4/.expo/settings.json index f1deb62d9eda2a6b92cd15effb978f4ac720e9d3..67f622963b83517a9a1e4ecf6a472e69bc8f1b6e 100644 --- a/p4/.expo/settings.json +++ b/p4/.expo/settings.json @@ -3,6 +3,6 @@ "lanType": "ip", "dev": true, "minify": false, - "urlRandomness": "5v-9za", + "urlRandomness": "8h-zc8", "https": false } diff --git a/p4/App.js b/p4/App.js index 7cbef75208efcf219299ac5dfb87b31bd0912676..7dbc1df45df261fc41a45b22b7e47d1fe3305c81 100644 --- a/p4/App.js +++ b/p4/App.js @@ -5,7 +5,12 @@ import Top from './src/components/Top' import { createStore } from "redux"; import allReducer from "./src/reducers"; import { Provider } from "react-redux"; +import ApolloClient from 'apollo-boost'; +import { ApolloProvider } from '@apollo/react-hooks' +const client = new ApolloClient({ + uri: 'http://it2810-26.idi.ntnu.no:4000' +}) const store = createStore( allReducer, @@ -22,9 +27,11 @@ export default class App extends Component { return ( {/*{instructions}*/} - + + + ); diff --git a/p4/package-lock.json b/p4/package-lock.json index 012aedb47f6a4d8271521598a5eaff5600577af9..8ae9e6c144bdac1209c29a5373b4faed3ac303fd 100644 --- a/p4/package-lock.json +++ b/p4/package-lock.json @@ -2,6 +2,26 @@ "requires": true, "lockfileVersion": 1, "dependencies": { + "@apollo/react-common": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@apollo/react-common/-/react-common-3.1.3.tgz", + "integrity": "sha512-Q7ZjDOeqjJf/AOGxUMdGxKF+JVClRXrYBGVq+SuVFqANRpd68MxtVV2OjCWavsFAN0eqYnRqRUrl7vtUCiJqeg==", + "requires": { + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, + "@apollo/react-hooks": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@apollo/react-hooks/-/react-hooks-3.1.3.tgz", + "integrity": "sha512-reIRO9xKdfi+B4gT/o/hnXuopUnm7WED/ru8VQydPw+C/KG/05Ssg1ZdxFKHa3oxwiTUIDnevtccIH35POanbA==", + "requires": { + "@apollo/react-common": "^3.1.3", + "@wry/equality": "^0.1.9", + "ts-invariant": "^0.4.4", + "tslib": "^1.10.0" + } + }, "@babel/code-frame": { "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", @@ -1346,6 +1366,11 @@ "@types/lodash": "*" } }, + "@types/node": { + "version": "12.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.7.tgz", + "integrity": "sha512-E6Zn0rffhgd130zbCbAr/JdXfXkoOUFAKNs/rF8qnafSJ8KYaA/j3oz7dcwal+lYjLA7xvdd5J4wdYpCTlP8+w==" + }, "@types/prop-types": { "version": "15.7.3", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", @@ -1414,6 +1439,11 @@ "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", "dev": true }, + "@types/zen-observable": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", + "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" + }, "@unimodules/core": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-4.0.0.tgz", @@ -1432,6 +1462,23 @@ "prop-types": "^15.6.1" } }, + "@wry/context": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@wry/context/-/context-0.4.4.tgz", + "integrity": "sha512-LrKVLove/zw6h2Md/KZyWxIkFM6AoyKp71OqpH9Hiip1csjPVoD3tPxlbQUNxEnHENks3UGgNpSBCAfq9KWuag==", + "requires": { + "@types/node": ">=6", + "tslib": "^1.9.3" + } + }, + "@wry/equality": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@wry/equality/-/equality-0.1.9.tgz", + "integrity": "sha512-mB6ceGjpMGz1ZTza8HYnrPGos2mC6So4NhS1PtZ8s4Qt0K7fBiIGhpSxUbQmhwcSWE3no+bYxmI2OL6KuXYmoQ==", + "requires": { + "tslib": "^1.9.3" + } + }, "abab": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.2.tgz", @@ -1563,6 +1610,110 @@ "normalize-path": "^2.1.1" } }, + "apollo-boost": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.4.4.tgz", + "integrity": "sha512-ASngBvazmp9xNxXfJ2InAzfDwz65o4lswlEPrWoN35scXmCz8Nz4k3CboUXbrcN/G0IExkRf/W7o9Rg0cjEBqg==", + "requires": { + "apollo-cache": "^1.3.2", + "apollo-cache-inmemory": "^1.6.3", + "apollo-client": "^2.6.4", + "apollo-link": "^1.0.6", + "apollo-link-error": "^1.0.3", + "apollo-link-http": "^1.3.1", + "graphql-tag": "^2.4.2", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + } + }, + "apollo-cache": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.3.2.tgz", + "integrity": "sha512-+KA685AV5ETEJfjZuviRTEImGA11uNBp/MJGnaCvkgr+BYRrGLruVKBv6WvyFod27WEB2sp7SsG8cNBKANhGLg==", + "requires": { + "apollo-utilities": "^1.3.2", + "tslib": "^1.9.3" + } + }, + "apollo-cache-inmemory": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.6.3.tgz", + "integrity": "sha512-S4B/zQNSuYc0M/1Wq8dJDTIO9yRgU0ZwDGnmlqxGGmFombOZb9mLjylewSfQKmjNpciZ7iUIBbJ0mHlPJTzdXg==", + "requires": { + "apollo-cache": "^1.3.2", + "apollo-utilities": "^1.3.2", + "optimism": "^0.10.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + } + }, + "apollo-client": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.6.4.tgz", + "integrity": "sha512-oWOwEOxQ9neHHVZrQhHDbI6bIibp9SHgxaLRVPoGvOFy7OH5XUykZE7hBQAVxq99tQjBzgytaZffQkeWo1B4VQ==", + "requires": { + "@types/zen-observable": "^0.8.0", + "apollo-cache": "1.3.2", + "apollo-link": "^1.0.0", + "apollo-utilities": "1.3.2", + "symbol-observable": "^1.0.2", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } + }, + "apollo-link": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.13.tgz", + "integrity": "sha512-+iBMcYeevMm1JpYgwDEIDt/y0BB7VWyvlm/7x+TIPNLHCTCMgcEgDuW5kH86iQZWo0I7mNwQiTOz+/3ShPFmBw==", + "requires": { + "apollo-utilities": "^1.3.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3", + "zen-observable-ts": "^0.8.20" + } + }, + "apollo-link-error": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.12.tgz", + "integrity": "sha512-psNmHyuy3valGikt/XHJfe0pKJnRX19tLLs6P6EHRxg+6q6JMXNVLYPaQBkL0FkwdTCB0cbFJAGRYCBviG8TDA==", + "requires": { + "apollo-link": "^1.2.13", + "apollo-link-http-common": "^0.2.15", + "tslib": "^1.9.3" + } + }, + "apollo-link-http": { + "version": "1.5.16", + "resolved": "https://registry.npmjs.org/apollo-link-http/-/apollo-link-http-1.5.16.tgz", + "integrity": "sha512-IA3xA/OcrOzINRZEECI6IdhRp/Twom5X5L9jMehfzEo2AXdeRwAMlH5LuvTZHgKD8V1MBnXdM6YXawXkTDSmJw==", + "requires": { + "apollo-link": "^1.2.13", + "apollo-link-http-common": "^0.2.15", + "tslib": "^1.9.3" + } + }, + "apollo-link-http-common": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/apollo-link-http-common/-/apollo-link-http-common-0.2.15.tgz", + "integrity": "sha512-+Heey4S2IPsPyTf8Ag3PugUupASJMW894iVps6hXbvwtg1aHSNMXUYO5VG7iRHkPzqpuzT4HMBanCTXPjtGzxg==", + "requires": { + "apollo-link": "^1.2.13", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + } + }, + "apollo-utilities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.2.tgz", + "integrity": "sha512-JWNHj8XChz7S4OZghV6yc9FNnzEXj285QYp/nLNh943iObycI5GTDO3NGR9Dth12LRrSFMeDOConPfPln+WGfg==", + "requires": { + "@wry/equality": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "ts-invariant": "^0.4.0", + "tslib": "^1.9.3" + } + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -3233,8 +3384,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", @@ -4101,6 +4251,19 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, + "graphql": { + "version": "14.5.8", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.5.8.tgz", + "integrity": "sha512-MMwmi0zlVLQKLdGiMfWkgQD7dY/TUKt4L+zgJ/aR0Howebod3aNgP5JkgvAULiR2HPVZaP2VEElqtdidHweLkg==", + "requires": { + "iterall": "^1.2.2" + } + }, + "graphql-tag": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.1.tgz", + "integrity": "sha512-jApXqWBzNXQ8jYa/HLkZJaVw9jgwNqZkywa2zfFn16Iv1Zb7ELNHkJaXHR7Quvd5SIGsy6Ny7SUKATgnu05uEg==" + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -4690,6 +4853,11 @@ "handlebars": "^4.1.2" } }, + "iterall": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", + "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" + }, "jest": { "version": "24.9.0", "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", @@ -7023,6 +7191,14 @@ "object-assign": "^4.0.1" } }, + "optimism": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/optimism/-/optimism-0.10.3.tgz", + "integrity": "sha512-9A5pqGoQk49H6Vhjb9kPgAeeECfUDF6aIICbMDL23kDLStBn1MWk3YvcZ4xWF9CsSf6XEgvRLkXy4xof/56vVw==", + "requires": { + "@wry/context": "^0.4.0" + } + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -9169,6 +9345,19 @@ "punycode": "^2.1.0" } }, + "ts-invariant": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz", + "integrity": "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==", + "requires": { + "tslib": "^1.9.3" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -9666,6 +9855,20 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" } } + }, + "zen-observable": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.14.tgz", + "integrity": "sha512-kQz39uonEjEESwh+qCi83kcC3rZJGh4mrZW7xjkSQYXkq//JZHTtKo+6yuVloTgMtzsIWOJrjIrKvk/dqm0L5g==" + }, + "zen-observable-ts": { + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.20.tgz", + "integrity": "sha512-2rkjiPALhOtRaDX6pWyNqK1fnP5KkJJybYebopNSn6wDG1lxBoFs2+nwwXKoA6glHIrtwrfBBy6da0stkKtTAA==", + "requires": { + "tslib": "^1.9.3", + "zen-observable": "^0.8.0" + } } } } diff --git a/p4/package.json b/p4/package.json index d553a6f6f574514b802b8febb2d5520edeb958f1..c71163043be67395994d8e3876e7a8e7f76c195d 100644 --- a/p4/package.json +++ b/p4/package.json @@ -8,7 +8,11 @@ "test": "jest" }, "dependencies": { + "@apollo/react-hooks": "^3.1.3", + "apollo-boost": "^0.4.4", "expo": "^35.0.0", + "graphql": "^14.5.8", + "graphql-tag": "^2.10.1", "react": "16.8.3", "react-dom": "16.8.3", "react-native": "0.59.10", diff --git a/p4/src/components/Content.js b/p4/src/components/Content.js index 63a592369b75254c10e35defd2f162e2e37fe43a..473d1a4184084326cbdc470ecb5bd88b57b6175a 100644 --- a/p4/src/components/Content.js +++ b/p4/src/components/Content.js @@ -1,87 +1,122 @@ -import React from 'react'; -import { Text, StyleSheet, ScrollView, Image } from 'react-native'; -import Search from './Search'; -import { ListItem } from 'react-native-elements'; +import React from "react"; +import { Text, StyleSheet, ScrollView, Image, View } from "react-native"; +import Search from "./Search"; +import { ListItem } from "react-native-elements"; import { useSelector } from "react-redux"; import { useDispatch } from "react-redux"; import { details, nextPage, prevPage } from "../actions"; -import Details from "./Details" +import Details from "./Details"; import { isOverlayVisible } from "../actions"; +import { gql } from "apollo-boost"; +import { useQuery } from "@apollo/react-hooks"; +import Elements from "./Elements"; +const GET_PRODUCTS = gql` + query Products( + $limit: Int + $sort: String + $search: String + $filters: FilterInputObject + ) { + products(limit: $limit, sort: $sort, search: $search, filters: $filters) { + products { + name + price + img + id + alcohol + volume + type + } + } + } +`; const Content = () => { - - const dispatch = useDispatch(); - const stateAlbums = useSelector(state => state.albums); - const stateSearch = useSelector(state => state.search); - const stateGenre = useSelector(state => state.filter); - - function filterAlbums(Albums) { - let filteredAlbums = []; - for (let a in Albums) { - if ( - Albums[a]["Album"] - .toLowerCase() - .indexOf(stateSearch.toLowerCase()) !== -1 - ) { - filteredAlbums.push(Albums[a]); - } else if ( - Albums[a]["Artist"] - .toLowerCase() - .indexOf(stateSearch.toLowerCase()) !== -1 - ) { - filteredAlbums.push(Albums[a]); - } else if ( - Albums[a]["Year"] - .toLowerCase() - .indexOf(stateSearch.toLowerCase()) !== -1 - ) { - filteredAlbums.push(Albums[a]); - } - } - return filteredAlbums; - } + const dispatch = useDispatch(); + const stateAlbums = useSelector(state => state.albums); + const stateSearch = useSelector(state => state.search); + const stateGenre = useSelector(state => state.filter); - function genreFilter(albums) { - let f = []; - for (let a in albums) { - if (albums[a]["Genre"] === stateGenre || stateGenre === "") { - f.push({ - title: albums[a]["Album"], - subtitle: albums[a]["Artist"] - }); - } - } - return f; - } + const { loading, error, data } = useQuery(GET_PRODUCTS, { + variables: { limit: 10, search: stateSearch, sort: "-price", filters:{filterType:"Vodka"}} + }); + if (loading) return Loading ... ; + if (error) return {error} ; + + const productElements = data.products.products.map(product => ( + + + + )); - function setDetailState(album) { - dispatch(details(album)); + function filterAlbums(Albums) { + let filteredAlbums = []; + for (let a in Albums) { + if ( + Albums[a]["Album"].toLowerCase().indexOf(stateSearch.toLowerCase()) !== + -1 + ) { + filteredAlbums.push(Albums[a]); + } else if ( + Albums[a]["Artist"].toLowerCase().indexOf(stateSearch.toLowerCase()) !== + -1 + ) { + filteredAlbums.push(Albums[a]); + } else if ( + Albums[a]["Year"].toLowerCase().indexOf(stateSearch.toLowerCase()) !== + -1 + ) { + filteredAlbums.push(Albums[a]); } + } + return filteredAlbums; + } - function setOverlayState(){ - dispatch(isOverlayVisible()); + function genreFilter(albums) { + let f = []; + for (let a in albums) { + if (albums[a]["Genre"] === stateGenre || stateGenre === "") { + f.push({ + title: albums[a]["Album"], + subtitle: albums[a]["Artist"] + }); } + } + return f; + } - return( - - { - genreFilter(filterAlbums(stateAlbums)).map((l,i) =>( - setOverlayState()} - /> - )) - } -
- - - ); -} + function setDetailState(album) { + dispatch(details(album)); + } -export default Content; + function setOverlayState() { + dispatch(isOverlayVisible()); + } + + return ( + + {productElements} + {genreFilter(filterAlbums(stateAlbums)).map((l, i) => ( + setOverlayState()} + /> + ))} +
+ + ); +}; +export default Content; diff --git a/p4/src/components/Elements.js b/p4/src/components/Elements.js new file mode 100644 index 0000000000000000000000000000000000000000..83aa02fca1b2861b11e445b733483b4966e87f72 --- /dev/null +++ b/p4/src/components/Elements.js @@ -0,0 +1,16 @@ +import React from 'react' +import {Text, View, Image} from 'react-native' + +export default function Elements({name, img, price, alcohol, volume, type}) { + return ( + + + Name: {name} + Price: {price},- + Alcohol: {alcohol}%. + Volume: {volume} + Type: {type} + + + ) +} \ No newline at end of file