From da3777c337cbad08c664c481dfe304f338ef844e Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Tue, 14 Nov 2023 15:23:10 +0100 Subject: [PATCH 1/7] Pull master --- LeftOvers/naviguation/parameter.png | Bin 410 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 LeftOvers/naviguation/parameter.png diff --git a/LeftOvers/naviguation/parameter.png b/LeftOvers/naviguation/parameter.png deleted file mode 100644 index 08425b498d677ebd915c1bb20acb5317f0d496b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmV;L0cHM)P)ruH;2LDpaQJ`Qh{S7jukLe;Lw0M26TKAEAZ^V0?7UDnFN#Y;yxs^ zd*ANu{kwvW*|8ncnD^S35Jv9R9h!{kCKbJ2+VWwBT}I+(dOiOH#S`H}APWukPXys9 zSPM8+yuaN)kHn7WOB$^3PYcAoq2ZzxCA}cbXYPWkPPsIZbA91HQFqr$Q`iQK~GB z$2s9L-nf0q2ZD}u=N2T~>~?O`WX{$|vDTjT3Vd~m9~R|_oVka=VgLXD07*qoM6N<$ Ef__h{jsO4v From f8bc096ed6bf8a0f54a0e31b48ec5f8d405a9edc Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Wed, 15 Nov 2023 11:07:38 +0100 Subject: [PATCH 2/7] Profiles Pages (Missing Pop-Up) --- LeftOvers/App.tsx | 45 ++--- LeftOvers/assets/images/delete.png | Bin 0 -> 3845 bytes .../{DietsTab.tsx => ListSelect.tsx} | 12 +- LeftOvers/components/ListTab.tsx | 80 --------- ...AllergiesTab.tsx => ListWithoutSelect.tsx} | 13 +- LeftOvers/components/ProfileDetails.tsx | 133 ++++++++++++++ LeftOvers/components/ProfileModification.tsx | 14 +- LeftOvers/components/TopBar.tsx | 13 +- LeftOvers/package-lock.json | 165 ++++++++++++++++++ LeftOvers/package.json | 1 + LeftOvers/screens/ModifyProfile.tsx | 43 +++++ LeftOvers/screens/Profiles.tsx | 59 +++++++ LeftOvers/screens/RecipeSuggestion.tsx | 6 +- 13 files changed, 427 insertions(+), 157 deletions(-) create mode 100644 LeftOvers/assets/images/delete.png rename LeftOvers/components/{DietsTab.tsx => ListSelect.tsx} (86%) delete mode 100644 LeftOvers/components/ListTab.tsx rename LeftOvers/components/{AllergiesTab.tsx => ListWithoutSelect.tsx} (86%) create mode 100644 LeftOvers/components/ProfileDetails.tsx create mode 100644 LeftOvers/screens/ModifyProfile.tsx create mode 100644 LeftOvers/screens/Profiles.tsx diff --git a/LeftOvers/App.tsx b/LeftOvers/App.tsx index 0b62476..0be1cc3 100644 --- a/LeftOvers/App.tsx +++ b/LeftOvers/App.tsx @@ -1,38 +1,13 @@ import React from 'react'; -import {StyleSheet, View } from 'react-native'; -import ProfileModification from './components/ProfileModification'; -import ValidateButton from './components/ValidateButton'; -import { LinearGradient } from 'expo-linear-gradient'; +import {StyleSheet, View} from 'react-native'; +import ModifyProfile from './screens/ModifyProfile'; +import Profiles from './screens/Profiles'; +import RecipeSuggestion from './screens/RecipeSuggestion'; -export default function App() { - const all = [{value: "Mussels"}, {value: "Skimmed Milk"}, {value: "Nuts"}] - const die = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Porkless"}, {value: "Vegan"}, {value: "Vegetarian"}, {value: "Pescatarian"}] - return ( - - - - - - - +export default function App(props) { + return( + // + + // ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#3F3C42', - alignItems: 'center', - justifyContent: 'center', - }, - linearGradient: { - //height: 844, - //width: 390, - flex: 1, - padding: 10, - paddingTop: 0, - //backgroundColor: "#59BDCD", - //alignItems: 'center', - //justifyContent: 'flex-start', - }, -}); \ No newline at end of file +} \ No newline at end of file diff --git a/LeftOvers/assets/images/delete.png b/LeftOvers/assets/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..3799147f3ec4ddbdb4ebfe9031ee7df6a947222b GIT binary patch literal 3845 zcmeHK`BT%^7C+yR2n08f%?d(!Qc#d+6=hS1z!R#1ii8LXXeuJI1h6bh;42E&tp6{=D3k% zWx}hs+l~YV2-bK64zJjc^XYvQzwak@rdcS`Ix-e5iO}!%Fi41aCjF>P>pR)EYtDIt z=)v?{(_Sh&``D9X=^2V~n*e`RmSkd7>Y(0wO)@g7wlFliVTWs{T$2nH_|L{v8?jrA zu_irfE<9C1IW*hA*g@B)8S8jFjh9i+w36>RkDzBv>CUARSIS~1y0sfZTA#O!Gca7_ zpI8a~tlFX(-qdUMfp9#-B<3dVH?4v1-TI_)QSSZa9l!9+N|WA+m7`4JCNE%Edp7-e;nl-JNwEPE z{c8=LIWoI3EboeY`|&%@)Ebj$)Cibm=1YaAU!=S14wh#LzeAH3Qg>re&lOSgqvOB( z8|ZUe2QcE?><^u#J7pWxz5^d#qE$e(l|f`z=?T`c*j~03RMug*H|j%F*_qLvJQ0pu ztc}F$B-0f;5S~SaBBFqRCw;GnK3wGJZe=u6%QO<-^dS8M$RVzZB{;Xr;<-4(s$Y%a zc(W_-6wa+{yn_UG8ph!41dcn~hqXe?O9%oxh6Wi_z7RQxU$f(#OHJ&5!^3gYj;sv% zn!z>P>Tn_n$ezl{ah$C@stUufwFCPYTh9DQV3RTWIMu*%#|piaK-u8|SDc=Py!$`X zOE^1~lWJjR78wcmr8q0v2z(OqBr{6~@=jEuf{EDHZP5s0Ri|2hGFppas^PmmG_~1K z?lQOu4T;=;7Q$C=*6Y_6SsQ;1e2ONY8{i1SE-UCfF|Mf5PN7xxQ^qw@qQ)oKr>{o1j>ZnFM=JRW<0l zKs_|Q?Qh`!9FHKqx?+-rLq$^%&FQ)%Vsa#jXp49>UwONofIRn`x8Z9e9`;{War}`_ zUry%#t@O|Aw_{O6rrqO~p%%07wyH0t<^Ne(O}&qLwJ1lhz*%kiVz<{a=uA1FY7F(b zSwe!7E)_|hU|&vO@@}`s%|iYXgaHWSQpwh;aiiSGs&pL`r-L3z3s6OdfWv}Jdzq^{ z$vx@uur7MU?M`~VRx1m)>P^gO7oLm3a=$&PWRw`@{!W@4Jw)8zQX*mHMA%!ll4<6J zEe>P9 zx>F}7y_X@>v}gBfC|x~?q4rOVxpfZr!fg2CKYzWhW*c){e*dk&n@E51wvt)8`Ethw zOxb42WNNGELE?il%A-(ixwI&c5B<$kl^j~oDW?i{E@wAzWTf8}3YEB&rEn>5;<9!FyZO-}@9Nk#Hr zvj;;PJY~w{y0UTmJN#y)=+>aM9lWc< zgFH<$cU~3#7(~H^A0#1AQlpwx$JKtN@jlRaDXh9_j!QC9RkJou^$=2C#@4#n!MVgx zCI*s51!^K0aVp9%gmFXd5i4%n06)!~E5zmA-SX+R`(t81#;M8}!ulpS1A5~9tOTKm zIG};1S~&+H)vx2Jx-1$o8?KJV!T$Go)8%GGYf%|B2y)9Fy&3;!Je3K|@)(>HFHVtF zq;mSPb|Cz=k8J?dOM?Wp_Tz6F7lel-^`vd!S?Gxy>yN53NYUBQUqWzD=isPj@BKd3 z91g&8Hw_Vz7eM<+Z0d(M-{_*US+?XgC5(V>E&e6HG$s%Fnf^PlKy$HM;v(FLFlcKr z(b}-Z+0I7ITL!e5xew!H5GFO)E0c-v>DBzGs1}%ahu*%9Qv0PW-JLO9D5;mkAn4ji z!sM~`3Z?gEtVd~fL8+;eA@`6*H{Gp+?K+HmPCv-I+&gy%7Sqko4Aw>looIIi)httT zQHyg=v56S+c_RN=T}oFpN+|l~2B11l=!@(U#3JHUgxl>`c1u#7`Y6vPqvpdFD~x!i{z?YRh@OSUAmSg2 z_-uiQWGb7qSl)oF%1-TcCERW!= zUuR6+IY>|@;nei}kAeFBAP)#$cq#wY0OooAL7vUr#ZHbasAZIv?gjF?U| } -export default function DietsTab(props: DietsProps) { +export default function ListSelect(props: ListProps) { const [selected, setSelected] = React.useState([]); - const data = [ - {key:'1', value:'Dairy free'}, - {key:'2', value:'Gluten free'}, - {key:'3', value:'Porkless'}, - {key:'4', value:'Vegan'}, - {key:'5', value:'Vegetatian'}, - {key:'6', value:'Pescatarian'}, - ] return ( setSelected(val)} diff --git a/LeftOvers/components/ListTab.tsx b/LeftOvers/components/ListTab.tsx deleted file mode 100644 index 4d10c5e..0000000 --- a/LeftOvers/components/ListTab.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import React from 'react'; -import {StyleSheet, Text, TextInput, View, Image, FlatList} from 'react-native'; -import ValidateButton from './ValidateButton'; -import HeaderFlatList from './HeaderFlatList'; - -type ListProps = { - title: string - content : list -} - -type ItemProps = {value: string} - -const Item = ({value}: ItemProps) => ( - - {value} - -) - -export default function ListTab(props: ListProps) { - return ( - - - } ListHeaderComponent={}/> - - - ); -} - -const styles = StyleSheet.create({ - background: { - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - borderRadius: 15, - backgroundColor: '#E3DEC9', - marginBottom: 20, - }, - titleBar: { - flexDirection: "row", - alignItems: "center", - justifyContent: "stretch", - backgroundColor: "#F2F0E4", - borderTopRightRadius: 15, - borderTopLeftRadius: 15, - borderWidth: 2, - borderColor: "#ACA279", - width: 250, - }, - arrow: { - height: 20, - width: 20, - resizeMode: 'contain', - tintColor: "#3F3C42", - flex: 0.5, - }, - title: { - fontSize: 15, - color: '#3F3C42', - alignItems: 'center', - justifyContent: 'left', - textAlign: "left", - flex: 0.5, - padding: 5, - }, - - itemList: { - flexDirection: "row", - alignItems: "flex-start", - justifyContent: "stretch", - width: 330, - }, - itemText: { - fontSize: 13, - textAlign: "left", - flex: 1, - padding: 5, - paddingLeft: 10, - color: "#3F3C42", - }, -}); \ No newline at end of file diff --git a/LeftOvers/components/AllergiesTab.tsx b/LeftOvers/components/ListWithoutSelect.tsx similarity index 86% rename from LeftOvers/components/AllergiesTab.tsx rename to LeftOvers/components/ListWithoutSelect.tsx index 1e981df..d8c851c 100644 --- a/LeftOvers/components/AllergiesTab.tsx +++ b/LeftOvers/components/ListWithoutSelect.tsx @@ -4,21 +4,13 @@ import ValidateButton from './ValidateButton'; import HeaderFlatList from './HeaderFlatList'; import { MultipleSelectList, SelectList } from 'react-native-dropdown-select-list' -type AllergiesProps = { +type ListProps = { title: string content : list } -export default function AllergiesTab(props: AllergiesProps) { +export default function ListWithoutSelect(props: ListProps) { const [selected, setSelected] = React.useState([]); - const data = [ - {key:'1', value:'Dairy free'}, - {key:'2', value:'Gluten free'}, - {key:'3', value:'Porkless'}, - {key:'4', value:'Vegan'}, - {key:'5', value:'Vegetatian'}, - {key:'6', value:'Pescatarian'}, - ] return ( ); diff --git a/LeftOvers/components/ProfileDetails.tsx b/LeftOvers/components/ProfileDetails.tsx new file mode 100644 index 0000000..6fd6f8c --- /dev/null +++ b/LeftOvers/components/ProfileDetails.tsx @@ -0,0 +1,133 @@ +import {React, useState} from 'react'; +import {StyleSheet, Text, TextInput, View, Image, Pressable} from 'react-native'; +import ValidateButton from './ValidateButton'; +import ListWithoutSelect from './ListWithoutSelect'; + +type ProfileProps = { + name: string + avatar: string + diets: list + allergies: list +} + +export default function ProfileDetails(props: ProfileProps) { + const [display, setDisplay] = useState("none"); + const changeListVisibility = () => { + if (display == "none"){ + setDisplay("flex") + } + else{ + setDisplay("none") + } + }; + + return ( + + + + {props.name} + + + + + + Filters + 3 selected + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + background: { + //maxWidth: 370, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 15, + backgroundColor: '#F2F0E4', + padding: 10, + marginHorizontal: 10, + }, + pseudoBar: { + flexDirection: "row", + alignItems: "center", + justifyContent: "center", + flex: 0.7, + width: 330, + marginBottom: 10, + }, + avatar: { + padding: 20, + resizeMode: 'contain', + borderWidth: 2, + borderColor: "#ACA279", + borderRadius: 45, + }, + text: { + fontSize: 20, + color: '#ACA279', + alignItems: 'center', + justifyContent: 'left', + flex: 0.8, + marginLeft: 20, + padding: 5, + }, + modify: { + height: 20, + width: 20, + tintColor: "#ACA279", + resizeMode: 'contain', + flex: 0.05, + marginLeft: 15, + }, + delete: { + height: 20, + width: 20, + tintColor: "#ACA279", + resizeMode: 'contain', + flex: 0.05, + }, + + + + filterBar: { + flexDirection: "row", + width: 300, + paddingTop: 10, + paddingBottom: 5, + alignItems: "flex-end", + justifyContent: "center", + flex: 0.2, + }, + filters: { + flex: 0.5, + fontSize: 20, + color: '#ACA279', + flex: 1, + padding: 5, + paddingLeft: 0, + paddingBottom: 0, + }, + nbSelected: { + fontSize: 11, + flex: 1, + color: "#3F3C42", + textAlign: "right", + }, + arrow: { + height: 20, + width: 20, + resizeMode: 'contain', + tintColor: "#3F3C42", + flex: 0.1, + }, +}); \ No newline at end of file diff --git a/LeftOvers/components/ProfileModification.tsx b/LeftOvers/components/ProfileModification.tsx index f7391b3..cd0fd0f 100644 --- a/LeftOvers/components/ProfileModification.tsx +++ b/LeftOvers/components/ProfileModification.tsx @@ -1,9 +1,8 @@ import React from 'react'; import {StyleSheet, Text, TextInput, View, Image} from 'react-native'; import ValidateButton from './ValidateButton'; -import ListTab from './ListTab'; -import DietsTab from './DietsTab'; -import AllergiesTab from './AllergiesTab'; +import ListSelect from './ListSelect'; +import ListWithoutSelect from './ListWithoutSelect'; type ProfileProps = { name: string @@ -24,12 +23,10 @@ export default function ProfileModification(props: ProfileProps) { Filters 3 selected - + - + - - ); @@ -37,13 +34,14 @@ export default function ProfileModification(props: ProfileProps) { const styles = StyleSheet.create({ background: { - width: 370, + //maxWidth: 370, flexDirection: 'column', alignItems: 'center', justifyContent: 'center', borderRadius: 15, backgroundColor: '#F2F0E4', padding: 10, + marginHorizontal: 10, }, pseudoBar: { flexDirection: "row", diff --git a/LeftOvers/components/TopBar.tsx b/LeftOvers/components/TopBar.tsx index fda32e4..5a7f0c0 100644 --- a/LeftOvers/components/TopBar.tsx +++ b/LeftOvers/components/TopBar.tsx @@ -4,16 +4,13 @@ import { Appbar } from 'react-native-paper'; interface TopBarProps{ title : string isVisible : boolean - } +} - - export default function TopBar(props) { - +export default function TopBar(props) { const _goBack = () => console.log('Went back'); - const _handleSearch = () => console.log('Searching'); - const _handleMore = () => console.log('Shown more'); + return ( @@ -24,8 +21,6 @@ interface TopBarProps{ )} - - ); - } \ No newline at end of file +} \ No newline at end of file diff --git a/LeftOvers/package-lock.json b/LeftOvers/package-lock.json index c75e7ca..7798ae6 100644 --- a/LeftOvers/package-lock.json +++ b/LeftOvers/package-lock.json @@ -18,6 +18,7 @@ "react-dom": "18.2.0", "react-native": "0.72.6", "react-native-dropdown-select-list": "^2.0.5", + "react-native-paper": "^5.11.1", "react-native-splash-screen": "^3.3.0", "react-native-web": "~0.19.6", "typescript": "^5.1.3" @@ -1970,6 +1971,26 @@ "node": ">=6.9.0" } }, + "node_modules/@callstack/react-theme-provider": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.9.tgz", + "integrity": "sha512-tTQ0uDSCL0ypeMa8T/E9wAZRGKWj8kXP7+6RYgPTfOPs9N07C9xM8P02GJ3feETap4Ux5S69D9nteq9mEj86NA==", + "dependencies": { + "deepmerge": "^3.2.0", + "hoist-non-react-statics": "^3.3.0" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/@callstack/react-theme-provider/node_modules/deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@expo/bunyan": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.0.tgz", @@ -7675,6 +7696,15 @@ "node": ">=6" } }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -7688,6 +7718,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -10126,6 +10165,19 @@ "node": ">=8" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -14805,6 +14857,32 @@ "resolved": "https://registry.npmjs.org/react-native-dropdown-select-list/-/react-native-dropdown-select-list-2.0.5.tgz", "integrity": "sha512-TepbcagQVUMB6nLuIlVU2ghRpQHAECOeZWe8K04ymW6NqbKbxuczZSDFfdCiABiiQ2dFD+8Dz65y4K7/uUEqGg==" }, + "node_modules/react-native-paper": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/react-native-paper/-/react-native-paper-5.11.1.tgz", + "integrity": "sha512-axqRTagGL8LtuYh172cx2Q2THOVJ3PTpPjCKhL5ECRdpJs2ceiboVecSiOIBuO3H7dVpaneptBA0vJr9HeVHwg==", + "dependencies": { + "@callstack/react-theme-provider": "^3.0.9", + "color": "^3.1.2", + "use-latest-callback": "^0.1.5" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-safe-area-context": "*", + "react-native-vector-icons": "*" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.7.4.tgz", + "integrity": "sha512-3LR3DCq9pdzlbq6vsHGWBFehXAKDh2Ljug6jWhLWs1QFuJHM6AS2+mH2JfKlB2LqiSFZOBcZfHQFz0sGaA3uqg==", + "peer": true, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-splash-screen": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-native-splash-screen/-/react-native-splash-screen-3.3.0.tgz", @@ -14813,6 +14891,72 @@ "react-native": ">=0.57.0" } }, + "node_modules/react-native-vector-icons": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.0.2.tgz", + "integrity": "sha512-ZwhUkJhIMkGL3cW7IT4sEEHu2AOzerqsRQ73UzXsB+ecBpVK5bRmp0XswiQleZKZalZfs/WIfWLXLfTQHcQo6A==", + "peer": true, + "dependencies": { + "prop-types": "^15.7.2", + "yargs": "^16.1.1" + }, + "bin": { + "fa-upgrade.sh": "bin/fa-upgrade.sh", + "fa5-upgrade": "bin/fa5-upgrade.sh", + "fa6-upgrade": "bin/fa6-upgrade.sh", + "generate-icon": "bin/generate-icon.js" + } + }, + "node_modules/react-native-vector-icons/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/react-native-vector-icons/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native-vector-icons/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/react-native-vector-icons/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "peer": true, + "engines": { + "node": ">=10" + } + }, "node_modules/react-native-web": { "version": "0.19.9", "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.9.tgz", @@ -15534,6 +15678,19 @@ "node": ">= 5.10.0" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -16580,6 +16737,14 @@ "requires-port": "^1.0.0" } }, + "node_modules/use-latest-callback": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz", + "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==", + "peerDependencies": { + "react": ">=16.8" + } + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", diff --git a/LeftOvers/package.json b/LeftOvers/package.json index 0357d85..64c0047 100644 --- a/LeftOvers/package.json +++ b/LeftOvers/package.json @@ -19,6 +19,7 @@ "react-dom": "18.2.0", "react-native": "0.72.6", "react-native-dropdown-select-list": "^2.0.5", + "react-native-paper": "^5.11.1", "react-native-splash-screen": "^3.3.0", "react-native-web": "~0.19.6", "typescript": "^5.1.3" diff --git a/LeftOvers/screens/ModifyProfile.tsx b/LeftOvers/screens/ModifyProfile.tsx new file mode 100644 index 0000000..212fc03 --- /dev/null +++ b/LeftOvers/screens/ModifyProfile.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import ProfileModification from '../components/ProfileModification'; +import ValidateButton from '../components/ValidateButton'; +import TopBar from '../components/TopBar'; +import { LinearGradient } from 'expo-linear-gradient'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; + +export default function ModifyProfile(props) { + const all = [{value: "Mussels"}, {value: "Skimmed Milk"}, {value: "Nuts"}] + const die = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Porkless"}, {value: "Vegan"}, {value: "Vegetarian"}, {value: "Pescatarian"}] + return ( + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: "100%", + width: "100%", + flex: 1, + backgroundColor: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + }, + linearGradient: { + height: "100%", + width: "100%", + flex: 1, + padding: 10, + paddingTop: 0, + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/Profiles.tsx b/LeftOvers/screens/Profiles.tsx new file mode 100644 index 0000000..6bb5ca2 --- /dev/null +++ b/LeftOvers/screens/Profiles.tsx @@ -0,0 +1,59 @@ +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import ProfileModification from '../components/ProfileModification'; +import ProfileDetails from '../components/ProfileDetails'; +import ValidateButton from '../components/ValidateButton'; +import TopBar from '../components/TopBar'; +import { LinearGradient } from 'expo-linear-gradient'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; + +export default function ModifyProfile(props) { + const allJohnny = [{value: "Coconut"}, {value: "Skimmed Milk"}, {value: "Nuts"}] + const dieJohnny = [{value: "Gluten free"}, {value: "Porkless"}, {value: "Pescatarian"}] + + const allJackie = [{value: "Tomato"}, {value: "Relic"}] + const dieJackie = [{value: "Porkless"}, {value: "Vegetarian"}] + + const allGoro = [] + const dieGoro = [{value: "Pescatarian"}] + + const allViktor = [{value: "Pasta"}, {value: "Fish"}] + const dieViktor = [{value: "Dairy free"}, {value: "Vegan"}] + + return ( + + + + + + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: "100%", + width: "100%", + flex: 1, + backgroundColor: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + }, + linearGradient: { + height: "100%", + width: "100%", + flex: 1, + padding: 10, + paddingTop: 0, + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/RecipeSuggestion.tsx b/LeftOvers/screens/RecipeSuggestion.tsx index 25c9d82..969469d 100644 --- a/LeftOvers/screens/RecipeSuggestion.tsx +++ b/LeftOvers/screens/RecipeSuggestion.tsx @@ -120,11 +120,7 @@ export default function RecipeSuggestion(props) { - - )} - - @@ -163,4 +159,4 @@ const styles = StyleSheet.create({ alignItems: 'center', marginTop: 10, } -}); +}); \ No newline at end of file From 29a50b3039fa98795dc476e63bd1abacd8ce36c3 Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Wed, 15 Nov 2023 15:30:46 +0100 Subject: [PATCH 3/7] Profiles Page Add PopUp Deletion --- LeftOvers/assets/images/cross.png | Bin 0 -> 4495 bytes LeftOvers/assets/images/validate.png | Bin 0 -> 3252 bytes LeftOvers/components/ProfileDelete.tsx | 115 ++++++++++++++++ LeftOvers/components/ProfileDetails.tsx | 15 ++- LeftOvers/screens/Profiles.tsx | 170 +++++++++++++++++++++--- 5 files changed, 276 insertions(+), 24 deletions(-) create mode 100644 LeftOvers/assets/images/cross.png create mode 100644 LeftOvers/assets/images/validate.png create mode 100644 LeftOvers/components/ProfileDelete.tsx diff --git a/LeftOvers/assets/images/cross.png b/LeftOvers/assets/images/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..19e410a68666839421f889c8996f7bbdc6c78941 GIT binary patch literal 4495 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 S!B-Z{+MYXnw~M!hB>f+9dWc{E literal 0 HcmV?d00001 diff --git a/LeftOvers/assets/images/validate.png b/LeftOvers/assets/images/validate.png new file mode 100644 index 0000000000000000000000000000000000000000..c174ff41aa4de3bf2e62177d308fc80088796d99 GIT binary patch literal 3252 zcmeI!i&InS6#(#alL%44@Q?+R8drQ&ySPO~W7HiK5xLa}?t%ogR>!j~-ITH$3R{qH8cOitYtEdiM7Xn7J)Ug3f_3CWI) zYe3fS_6`S}gy3z#05^)K(t9TX*o1_v3yw%9240387Cv`veqFl%fz6WEf|SXxh~2D} z@}sbFd%~pHQ#aXX)%z!X>BK!yR@SyeVw$tizAjlCc1$H191D!Bxp+8S+;HUm*yy3X z3viSFqlf&2hyyO)=T8`ql1b$K`^I!_={dcgp^xYT!1wa4iTduU+vEB{`~D|PW|g3b z1LD;FaY;$bdh@;nS34&VMIQ(?XbpLFBU81~hYc0o<+`R-l^mcZ7uuPBy3O_gs;+vJ9=e zc3Xyq0~0G7Ek&{1Gu2QB^e z#;^7GPqxFu3mz|=r>i>@d@H$7p`SQjqMd5=<7d707L1zus*K(*dO*EU!T;USv)W67 zk5f%8!eT<2?LbC#{>TV>Q$^jaP1<-^y^Y>GucW_GWA3gmxNRjJ&lOyK<2lxJn|v!t z)2mo_<}va!{KF<6hR>SK$jf8?(ZFed^A;7T6@3{aEy68!1U$)LHo)*|UA9w9{MFVQ zQ#(!?9_Af&)t~v9m0X4|J$f2VD_G)j#C5HP(gV)oEtq&}Nr1P~oBAY2V59bw#C#JY zEz1?yXqHG~=DI`QJjVBQv`>#WwH4`2;p1rUGxnf&AYIy``|fVv0BsxTy+NvY*_L5N^j%{wk8?ZRKEWA{oKaK!crwyx;RIWOljNFCKp0fso~*!OZ>_Tn&_aZC9bY1rR zBvQ8IMf`G>+F!vhzwAPEoHwl9>EsS~9mqsk94BanhDTej&Ug)e#FbuiB-ODPuiH$Y z47=h&$d_w)ftxG=J5n9)fkzFcPcFcPd>84gE5D87P{|6ue@>n~+(K{xK>>p5O9(u4 z)tXsf~(u;laUbx5S4FW*WwnbNgAHb*9b4?2z#Plb%Co0N za|9II5?D(UvoH@|fzCSp6b9}o_-a?&PLK21c;q$&(=H)ct+V#GfIA3s5cD8$L{NYr z6oDK;6qZ}OO2dbg}K*ft1L12sHfIfB;+I0&*4I3fr{uoc1Z z5d=37^dPXpBxi-vgx^IB9LJ@Do!q6xj-=EUiE)l%Dn25R{W@Xqd??cESP0D8bgj^Q-}AL#%aE%2(dQ)d3HVh% z9Sf1_CLmEl%!1G-2s8Jee1^na=vc zw|Vwh+V8M6@zhv;se#?G;}I8A-i_7O@cvtqlE_#4Wp|1)Ukxf-ftni|FY72umyPzX z2k{c;vPE~?&-X6eJPGDU>P`^FtFE(P=Js((S^b=Q&C#!h%zhwW+^<`v-q+tUVf+l_ z;Z9-f!OGh7=e!{Il2>8uvn> + allergies: list +} + +export default function ProfileDelete(props: ProfileProps) { + const [display, setDisplay] = useState("flex") + const changeListVisibility = () => { + if (display == "none"){ + setDisplay("flex") + } + else{ + setDisplay("none") + } + }; + + return ( + + + + {props.name} + + + + Filters + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + background: { + //maxWidth: 370, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 15, + backgroundColor: '#F2F0E4', + padding: 10, + marginHorizontal: 10, + }, + pseudoBar: { + flexDirection: "row", + alignItems: "center", + justifyContent: "center", + flex: 0.7, + width: 330, + marginBottom: 10, + }, + avatar: { + padding: 20, + resizeMode: 'contain', + borderWidth: 2, + borderColor: "#ACA279", + borderRadius: 45, + }, + text: { + fontSize: 20, + color: '#ACA279', + alignItems: 'center', + justifyContent: 'left', + flex: 0.8, + marginLeft: 20, + padding: 5, + }, + + + + filterBar: { + flexDirection: "row", + width: 300, + paddingTop: 10, + paddingBottom: 5, + alignItems: "flex-end", + justifyContent: "center", + flex: 0.2, + }, + filters: { + flex: 0.5, + fontSize: 20, + color: '#ACA279', + flex: 1, + padding: 5, + paddingLeft: 0, + paddingBottom: 0, + }, + nbSelected: { + fontSize: 11, + flex: 1, + color: "#3F3C42", + textAlign: "right", + }, + arrow: { + height: 20, + width: 20, + resizeMode: 'contain', + tintColor: "#3F3C42", + flex: 0.1, + }, +}); \ No newline at end of file diff --git a/LeftOvers/components/ProfileDetails.tsx b/LeftOvers/components/ProfileDetails.tsx index 6fd6f8c..deb63f7 100644 --- a/LeftOvers/components/ProfileDetails.tsx +++ b/LeftOvers/components/ProfileDetails.tsx @@ -8,17 +8,18 @@ type ProfileProps = { avatar: string diets: list allergies: list + onDeleteProfile: () => void } export default function ProfileDetails(props: ProfileProps) { - const [display, setDisplay] = useState("none"); + const [display, setDisplay] = useState("none") const changeListVisibility = () => { - if (display == "none"){ + if (display == "none"){ setDisplay("flex") - } - else{ + } + else{ setDisplay("none") - } + } }; return ( @@ -27,7 +28,9 @@ export default function ProfileDetails(props: ProfileProps) { {props.name} - + + + diff --git a/LeftOvers/screens/Profiles.tsx b/LeftOvers/screens/Profiles.tsx index 6bb5ca2..0f2e83e 100644 --- a/LeftOvers/screens/Profiles.tsx +++ b/LeftOvers/screens/Profiles.tsx @@ -1,11 +1,10 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import ProfileModification from '../components/ProfileModification'; +import {React, useState} from 'react'; +import {StyleSheet, View, Modal, Pressable, Text, Image} from 'react-native'; import ProfileDetails from '../components/ProfileDetails'; -import ValidateButton from '../components/ValidateButton'; +import ProfileDelete from '../components/ProfileDelete'; import TopBar from '../components/TopBar'; -import { LinearGradient } from 'expo-linear-gradient'; -import { SafeAreaProvider } from 'react-native-safe-area-context'; +import {LinearGradient} from 'expo-linear-gradient'; +import {SafeAreaProvider} from 'react-native-safe-area-context'; export default function ModifyProfile(props) { const allJohnny = [{value: "Coconut"}, {value: "Skimmed Milk"}, {value: "Nuts"}] @@ -20,21 +19,62 @@ export default function ModifyProfile(props) { const allViktor = [{value: "Pasta"}, {value: "Fish"}] const dieViktor = [{value: "Dairy free"}, {value: "Vegan"}] + const [visible, setVisible] = useState(false); + const [opacity, setOpacity] = useState(1); + const raisePopUp = () => { + setVisible(true) + setOpacity(0.4) + } + const erasePopUp = () => { + setVisible(false) + setOpacity(1) + } + return ( - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + Do you really want to delete this profile? + + + + + Yes + + + + + + No + + + + + + + + + + ); @@ -56,4 +96,98 @@ const styles = StyleSheet.create({ padding: 10, paddingTop: 0, }, + + + + modal: { + position: 'absolute', + top: '50%', + left: '50%', + justifyContent: "center", + alignItems: "center", + width: "100%", + transform: [{ translateX: -207 }, { translateY: -140 }], + }, + viewModal: { + flexDirection: "column", + padding: 10, + alignItems: "center", + justifyContent: "center", + width: "100%", + height: 200, + }, + + + profileValidation: { + width: "100%", + alignItems: "center", + justifyContent: "center", + paddingBottom: 20, + }, + decisionBarVertical: { + flexDirection: "column", + width: "100%", + padding: 10, + height: "100%", + borderRadius: 15, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#F2F0E4", + }, + validationQuestion: { + fontSize: 20, + color: '#ACA279', + alignItems: 'center', + justifyContent: 'center', + flex: 0.3, + padding: 5, + }, + decisionBar: { + flexDirection: "row", + flex: 0.7, + width: "100%", + height: "20%", + borderRadius: 15, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#F2F0E4", + }, + yesButton: { + flexDirection: "row", + flex: 0.5, + padding: 10, + marginHorizontal: 10, + width: "90%", + borderRadius: 20, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#59BDCD", + }, + yesText: { + fontSize: 20, + color: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + flex: 0.7, + padding: 5, + }, + noButton: { + flexDirection: "row", + flex: 0.5, + padding: 10, + marginHorizontal: 10, + width: "90%", + borderRadius: 20, + alignItems: "center", + justifyContent: "center", + backgroundColor: "#8A0000", + }, + noText: { + fontSize: 20, + color: '#F2F0E4', + alignItems: 'center', + justifyContent: 'center', + flex: 0.7, + padding: 5, + }, }); \ No newline at end of file From 36c5578d4ec71a287cfb9890a061ed922208076f Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Mon, 20 Nov 2023 08:28:12 +0100 Subject: [PATCH 4/7] Profiles Selection Components --- LeftOvers/App.tsx | 6 +- LeftOvers/components/ListSelect.tsx | 10 ++ LeftOvers/components/ProfileElement.tsx | 98 +++++++++++++ LeftOvers/components/ProfileModification.tsx | 6 +- LeftOvers/components/ProfileSelection.tsx | 63 +++++++++ LeftOvers/screens/CreateProfile.tsx | 43 ++++++ LeftOvers/screens/FiltersSelection.tsx | 137 +++++++++++++++++++ LeftOvers/screens/IngredientSelection.tsx | 6 +- 8 files changed, 363 insertions(+), 6 deletions(-) create mode 100644 LeftOvers/components/ProfileElement.tsx create mode 100644 LeftOvers/components/ProfileSelection.tsx create mode 100644 LeftOvers/screens/CreateProfile.tsx create mode 100644 LeftOvers/screens/FiltersSelection.tsx diff --git a/LeftOvers/App.tsx b/LeftOvers/App.tsx index 0be1cc3..530740c 100644 --- a/LeftOvers/App.tsx +++ b/LeftOvers/App.tsx @@ -3,11 +3,15 @@ import {StyleSheet, View} from 'react-native'; import ModifyProfile from './screens/ModifyProfile'; import Profiles from './screens/Profiles'; import RecipeSuggestion from './screens/RecipeSuggestion'; +import CreateProfile from './screens/CreateProfile'; +import FiltersSelection from './screens/FiltersSelection'; export default function App(props) { return( // - + // // + // + ); } \ No newline at end of file diff --git a/LeftOvers/components/ListSelect.tsx b/LeftOvers/components/ListSelect.tsx index e5fa336..5b2a354 100644 --- a/LeftOvers/components/ListSelect.tsx +++ b/LeftOvers/components/ListSelect.tsx @@ -23,6 +23,8 @@ export default function ListSelect(props: ListProps) { dropdownStyles={styles.itemList} dropdownItemStyles={styles.itemCell} dropdownTextStyles={styles.itemText} + badgeStyles={styles.badges} + badgeTextStyles={styles.badgesText} placeholder={props.title} label={props.title}/> ); @@ -86,4 +88,12 @@ const styles = StyleSheet.create({ paddingLeft: 10, color: "#3F3C42", }, + + badges: { + backgroundColor: "#59BDCD" + }, + badgesText: { + fontSize: 15, + color: "#F2F0E4", + }, }); \ No newline at end of file diff --git a/LeftOvers/components/ProfileElement.tsx b/LeftOvers/components/ProfileElement.tsx new file mode 100644 index 0000000..8b158a2 --- /dev/null +++ b/LeftOvers/components/ProfileElement.tsx @@ -0,0 +1,98 @@ +import {React, useState} from 'react'; +import {StyleSheet,Pressable, Text, View, Image} from 'react-native'; + +type Profile = { + name: string + avatar: string + isActive: string +} + +export default function ProfileElement(props : Profile) { + const [waiting, setWaiting] = useState("none") + const changeStatus = () => { + if (waiting == "flex"){ + setWaiting("none") + } + else{ + setWaiting("flex") + } + console.log(waiting, props.name) + }; + return ( + + + + + {props.name} + + + + Activated + + + + Waiting... + + + + + ); +} + +const styles = StyleSheet.create({ + button: { + alignItems: 'center', + justifyContent: 'flex-start', + height: 80, + //width: "75%", + marginVertical: 15, + }, + pseudoBar: { + flexDirection: "row", + alignItems: "center", + justifyContent: "center", + //width: "120%", + width: 225, + marginHorizontal: 10, + marginBottom: 10, + }, + avatar: { + padding: 20, + resizeMode: 'contain', + borderWidth: 2, + borderColor: "#ACA279", + borderRadius: 45, + }, + text: { + fontSize: 15, + color: '#ACA279', + alignItems: 'center', + justifyContent: 'left', + flex: 0.8, + marginLeft: 20, + padding: 5, + width: "100%" + }, + + active: { + borderWidth: 1, + borderRadius: 20, + borderColor: "#59BDCD", + padding: 5, + }, + textActive: { + fontSize: 10, + color: "#59BDCD", + }, + + waiting: { + borderWidth: 1, + borderRadius: 20, + borderColor: "#ACA279", + padding: 5, + }, + textWaiting: { + fontSize: 10, + color: "#ACA279", + }, +}); \ No newline at end of file diff --git a/LeftOvers/components/ProfileModification.tsx b/LeftOvers/components/ProfileModification.tsx index cd0fd0f..7f66760 100644 --- a/LeftOvers/components/ProfileModification.tsx +++ b/LeftOvers/components/ProfileModification.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import {React, useState} from 'react'; import {StyleSheet, Text, TextInput, View, Image} from 'react-native'; import ValidateButton from './ValidateButton'; import ListSelect from './ListSelect'; @@ -12,11 +12,13 @@ type ProfileProps = { } export default function ProfileModification(props: ProfileProps) { + const [name, onChangeName] = useState(props.name); + return ( - + diff --git a/LeftOvers/components/ProfileSelection.tsx b/LeftOvers/components/ProfileSelection.tsx new file mode 100644 index 0000000..6f824e8 --- /dev/null +++ b/LeftOvers/components/ProfileSelection.tsx @@ -0,0 +1,63 @@ +import {React, useState} from 'react'; +import {View, StyleSheet, Pressable, Image, Text} from 'react-native'; +import bracketLeft from '../assets/images/angle_bracket_left.png'; +import bracketRight from '../assets/images/angle_bracket_right.png'; +import ProfileElement from './ProfileElement' + +type ProfileSelectionProps = { + listProfile: Profile[]; +} + +type Profile = { + name: string + avatar: string + isActive: boolean + isWaiting: boolean +} + +export default function ProfileSelection(props: ProfileSelectionProps) { + const [cpt, setCpt] = useState(0); + const decreaseCounter = () => { + if (cpt > 0) { + setCpt(cpt - 1); + } + else { + setCpt(props.listProfile.length - 1); + } + }; + const increaseCounter = () => { + if (cpt < props.listProfile.length - 1) { + setCpt(cpt + 1); + } + else { + setCpt(0); + } + }; + + return ( + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + background: { + //height: 120, + height: 100, + borderRadius: 20, + marginHorizontal: 10, + borderWidth: 2, + borderColor: '#ACA279', + backgroundColor: '#E3DEC9', + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/CreateProfile.tsx b/LeftOvers/screens/CreateProfile.tsx new file mode 100644 index 0000000..8d4b3e4 --- /dev/null +++ b/LeftOvers/screens/CreateProfile.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import ProfileModification from '../components/ProfileModification'; +import ValidateButton from '../components/ValidateButton'; +import TopBar from '../components/TopBar'; +import { LinearGradient } from 'expo-linear-gradient'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; + +export default function CreateProfile(props) { + const all = [] + const die = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Porkless"}, {value: "Vegan"}, {value: "Vegetarian"}, {value: "Pescatarian"}] + return ( + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: "100%", + width: "100%", + flex: 1, + backgroundColor: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + }, + linearGradient: { + height: "100%", + width: "100%", + flex: 1, + padding: 10, + paddingTop: 0, + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/FiltersSelection.tsx b/LeftOvers/screens/FiltersSelection.tsx new file mode 100644 index 0000000..d2c351f --- /dev/null +++ b/LeftOvers/screens/FiltersSelection.tsx @@ -0,0 +1,137 @@ +import React from 'react'; +import {StyleSheet, View, Text} from 'react-native'; +import ProfileModification from '../components/ProfileModification'; +import ValidateButton from '../components/ValidateButton'; +import TopBar from '../components/TopBar'; +import ListSelect from '../components/ListSelect'; +import ListWithoutSelect from '../components/ListWithoutSelect'; +import ProfileSelection from '../components/ProfileSelection'; +import {LinearGradient} from 'expo-linear-gradient'; +import {SafeAreaProvider} from 'react-native-safe-area-context'; + +export default function FiltersSelection(props) { + const profiles = [ + {name: "Johnny Silverhand", avatar: "plus_small.png", isActive: "flex"}, + {name: "Panam Palmer", avatar: "plus_small.png", isActive: "none"}, + {name: "Goro Takemura", avatar: "plus_small.png", isActive: "none"}, + {name: "David Martinez", avatar: "plus_small.png", isActive: "flex"}, + ] + + const die = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Porkless"}, {value: "Vegan"}, {value: "Vegetarian"}, {value: "Pescatarian"}] + + const allProfiles = [{value: "Skimmed Milk"}, {value: "Nuts"}] + const dieProfiles = [{value: "Porkless"}, {value: "Pescatarian"}] + + const dieAdd = [] + const allAdd = [] + + return ( + + + + + + + + Filters + 2 selected, 1 waiting + + + + + + + + + + Filters from Profiles + + + + + + + + + Additional Filters + 3 selected + + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: "100%", + width: "100%", + flex: 1, + backgroundColor: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + }, + linearGradient: { + height: "100%", + width: "100%", + flex: 1, + padding: 10, + paddingTop: 0, + }, + + background: { + //maxWidth: 370, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 20, + backgroundColor: '#F2F0E4', + padding: 10, + paddingBottom: 0, + marginHorizontal: 10, + }, + filterBar: { + flexDirection: "row", + width: 300, + paddingTop: 10, + paddingBottom: 5, + alignItems: "flex-end", + justifyContent: "center", + flex: 0.2, + }, + filters: { + flex: 0.8, + fontSize: 20, + color: '#ACA279', + flex: 1, + padding: 5, + paddingLeft: 0, + paddingBottom: 0, + }, + nbSelected: { + fontSize: 11, + //flex: 0.2, + color: "#3F3C42", + textAlign: "right", + }, + + profilesSelection: { + //maxWidth: 370, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 20, + backgroundColor: '#F2F0E4', + padding: 10, + //paddingBottom: 0, + marginHorizontal: 10, + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/IngredientSelection.tsx b/LeftOvers/screens/IngredientSelection.tsx index 39e61f9..99fd407 100644 --- a/LeftOvers/screens/IngredientSelection.tsx +++ b/LeftOvers/screens/IngredientSelection.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { View, StyleSheet, Text, Image, Pressable,ScrollView} from 'react-native'; -import { SafeAreaProvider } from 'react-native-safe-area-context'; +import {View, StyleSheet, Text, Image, Pressable, ScrollView} from 'react-native'; +import {SafeAreaProvider} from 'react-native-safe-area-context'; import TopBar from '../components/TopBar'; -import { Searchbar } from 'react-native-paper'; +import {Searchbar} from 'react-native-paper'; import brochette from '../assets/images/brochette.png'; import FoodElementText from '../components/FoodElementText'; import CustomButton from '../components/CustomButton'; From de1be2e0b428068c93607e47a2ca089903201e98 Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Mon, 20 Nov 2023 08:35:46 +0100 Subject: [PATCH 5/7] Filters Selection Page --- LeftOvers/screens/FiltersSelection.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/LeftOvers/screens/FiltersSelection.tsx b/LeftOvers/screens/FiltersSelection.tsx index d2c351f..224f5ec 100644 --- a/LeftOvers/screens/FiltersSelection.tsx +++ b/LeftOvers/screens/FiltersSelection.tsx @@ -22,7 +22,7 @@ export default function FiltersSelection(props) { const allProfiles = [{value: "Skimmed Milk"}, {value: "Nuts"}] const dieProfiles = [{value: "Porkless"}, {value: "Pescatarian"}] - const dieAdd = [] + const dieAdd = [{value: "Dairy free"}, {value: "Gluten free"}, {value: "Vegan"}, {value: "Vegetarian"}] const allAdd = [] return ( @@ -130,8 +130,6 @@ const styles = StyleSheet.create({ justifyContent: 'center', borderRadius: 20, backgroundColor: '#F2F0E4', - padding: 10, - //paddingBottom: 0, marginHorizontal: 10, }, }); \ No newline at end of file From 11b08ff43a3c0703764a5b1e8bcf3aa0933c1ab7 Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Mon, 20 Nov 2023 10:04:09 +0100 Subject: [PATCH 6/7] Home Page --- LeftOvers/App.tsx | 4 +- LeftOvers/assets/images/cook.png | Bin 0 -> 7043 bytes LeftOvers/assets/images/logo.png | Bin 0 -> 3405 bytes LeftOvers/assets/images/search.png | Bin 0 -> 9044 bytes LeftOvers/assets/images/warehouse.png | Bin 0 -> 8557 bytes LeftOvers/components/FoodElementText.tsx | 1 - LeftOvers/components/ProfileElement.tsx | 6 +- LeftOvers/components/ProfileSelection.tsx | 6 +- LeftOvers/screens/FiltersSelection.tsx | 4 +- LeftOvers/screens/HomePage.tsx | 210 ++++++++++++++++++++++ LeftOvers/screens/home.tsx | 0 11 files changed, 223 insertions(+), 8 deletions(-) create mode 100644 LeftOvers/assets/images/cook.png create mode 100644 LeftOvers/assets/images/logo.png create mode 100644 LeftOvers/assets/images/search.png create mode 100644 LeftOvers/assets/images/warehouse.png create mode 100644 LeftOvers/screens/HomePage.tsx delete mode 100644 LeftOvers/screens/home.tsx diff --git a/LeftOvers/App.tsx b/LeftOvers/App.tsx index 530740c..150d43d 100644 --- a/LeftOvers/App.tsx +++ b/LeftOvers/App.tsx @@ -1,5 +1,6 @@ import React from 'react'; import {StyleSheet, View} from 'react-native'; +import HomePage from './screens/HomePage'; import ModifyProfile from './screens/ModifyProfile'; import Profiles from './screens/Profiles'; import RecipeSuggestion from './screens/RecipeSuggestion'; @@ -8,10 +9,11 @@ import FiltersSelection from './screens/FiltersSelection'; export default function App(props) { return( + // // // // - + // ); } \ No newline at end of file diff --git a/LeftOvers/assets/images/cook.png b/LeftOvers/assets/images/cook.png new file mode 100644 index 0000000000000000000000000000000000000000..92b4470648bb554dfc04a5976b781dec6281b3fe GIT binary patch literal 7043 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 literal 0 HcmV?d00001 diff --git a/LeftOvers/assets/images/logo.png b/LeftOvers/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1a29b13e4048f536da14f978148fc30f3750c20a GIT binary patch literal 3405 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 IwDax%0T58o2><{9 literal 0 HcmV?d00001 diff --git a/LeftOvers/components/FoodElementText.tsx b/LeftOvers/components/FoodElementText.tsx index 1e3b028..1fe03c7 100644 --- a/LeftOvers/components/FoodElementText.tsx +++ b/LeftOvers/components/FoodElementText.tsx @@ -44,7 +44,6 @@ const styles = StyleSheet.create({ color: 'black', }, view: { - alignItems: 'flex-start', justifyContent: 'center', marginRight: 5 // Centre le contenu horizontalement diff --git a/LeftOvers/components/ProfileElement.tsx b/LeftOvers/components/ProfileElement.tsx index 8b158a2..614caa5 100644 --- a/LeftOvers/components/ProfileElement.tsx +++ b/LeftOvers/components/ProfileElement.tsx @@ -5,12 +5,16 @@ type Profile = { name: string avatar: string isActive: string + disableSelection: boolean } export default function ProfileElement(props : Profile) { const [waiting, setWaiting] = useState("none") const changeStatus = () => { - if (waiting == "flex"){ + if (props.disableSelection){ + setWaiting("none") + } + else if (waiting == "flex"){ setWaiting("none") } else{ diff --git a/LeftOvers/components/ProfileSelection.tsx b/LeftOvers/components/ProfileSelection.tsx index 6f824e8..832e727 100644 --- a/LeftOvers/components/ProfileSelection.tsx +++ b/LeftOvers/components/ProfileSelection.tsx @@ -5,14 +5,14 @@ import bracketRight from '../assets/images/angle_bracket_right.png'; import ProfileElement from './ProfileElement' type ProfileSelectionProps = { - listProfile: Profile[]; + listProfile: Profile[] + disableSelection: boolean } type Profile = { name: string avatar: string isActive: boolean - isWaiting: boolean } export default function ProfileSelection(props: ProfileSelectionProps) { @@ -39,7 +39,7 @@ export default function ProfileSelection(props: ProfileSelectionProps) { - + diff --git a/LeftOvers/screens/FiltersSelection.tsx b/LeftOvers/screens/FiltersSelection.tsx index 224f5ec..6a3f42b 100644 --- a/LeftOvers/screens/FiltersSelection.tsx +++ b/LeftOvers/screens/FiltersSelection.tsx @@ -33,11 +33,11 @@ export default function FiltersSelection(props) { - Filters + Profiles 2 selected, 1 waiting - + diff --git a/LeftOvers/screens/HomePage.tsx b/LeftOvers/screens/HomePage.tsx new file mode 100644 index 0000000..549988e --- /dev/null +++ b/LeftOvers/screens/HomePage.tsx @@ -0,0 +1,210 @@ +import {React, useState} from 'react'; +import {StyleSheet, View, Text, Pressable, Image} from 'react-native'; +import ProfileModification from '../components/ProfileModification'; +import ValidateButton from '../components/ValidateButton'; +import TopBar from '../components/TopBar'; +import ListSelect from '../components/ListSelect'; +import ListWithoutSelect from '../components/ListWithoutSelect'; +import ProfileSelection from '../components/ProfileSelection'; +import FoodElementText from '../components/FoodElementText'; +import {LinearGradient} from 'expo-linear-gradient'; +import {SafeAreaProvider} from 'react-native-safe-area-context'; +import bracketLeft from '../assets/images/angle_bracket_left.png'; +import bracketRight from '../assets/images/angle_bracket_right.png'; + +export default function HomePage(props) { + const profiles = [ + {name: "Johnny Silverhand", avatar: "plus_small.png", isActive: "flex"}, + {name: "Panam Palmer", avatar: "plus_small.png", isActive: "none"}, + {name: "Goro Takemura", avatar: "plus_small.png", isActive: "none"}, + {name: "David Martinez", avatar: "plus_small.png", isActive: "flex"}, + ] + + const ingredientList = [{title: "Carrot"}, {title: "Potato"}, {title: "Peach"}] + + const [cpt, setCpt] = useState(0); + const decreaseCounter = () => { + if (cpt > 0) { + setCpt(cpt - 1); + } + else { + setCpt(ingredientList.length - 1); + } + }; + const increaseCounter = () => { + if (cpt < ingredientList.length - 1) { + setCpt(cpt + 1); + } + else { + setCpt(0); + } + }; + + return ( + + + + LeftOvers + + + + + + + + + Welcome + Rayhân + , + + Glad to see you again! + + + + + + Profiles + 2 selected + + + + + + + + + + Ingredient Stocks + + + + + + + + Cooking + + + + Selected Ingredient + + + + + + + + + + + + + + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + height: "100%", + width: "100%", + flex: 1, + backgroundColor: '#3F3C42', + alignItems: 'center', + justifyContent: 'center', + }, + linearGradient: { + height: "100%", + width: "100%", + flex: 1, + padding: 10, + paddingTop: 0, + }, + + filterBar: { + flexDirection: "row", + width: 300, + paddingTop: 10, + paddingBottom: 5, + alignItems: "flex-end", + justifyContent: "center", + flex: 0.2, + }, + filters: { + flex: 0.8, + fontSize: 20, + color: '#ACA279', + flex: 1, + padding: 5, + paddingLeft: 0, + paddingBottom: 0, + }, + nbSelected: { + fontSize: 11, + //flex: 0.2, + color: "#3F3C42", + textAlign: "right", + }, + + profilesSelection: { + //maxWidth: 370, + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 20, + backgroundColor: '#F2F0E4', + marginHorizontal: 10, + }, + welcome: { + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + borderRadius: 20, + backgroundColor: '#F2F0E4', + paddingVertical: 10, + paddingHorizontal: 25, + marginHorizontal: 10, + }, + text: { + fontSize: 20, + color: '#ACA279', + }, + name: { + fontSize: 20, + fontWeight: "bold", + color: '#59BDCD', + textAlign: "left", + }, + ingredientSelection: { + flexDirection: 'column', + width: "90%", + alignItems: 'center', + justifyContent: 'center', + borderRadius: 20, + backgroundColor: '#E3DEC9', + borderWidth: 2, + borderColor: "#ACA279", + marginHorizontal: 10, + padding: 5 + }, + + appName: { + fontSize: 20, + fontWeight: "bold", + color: '#3F3C42', + textAlign: "center", + flex: 0.8, + }, + topBar: { + flexDirection: 'row', + width: "100%", + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '#F2F0E4', + padding: 5, + }, +}); \ No newline at end of file diff --git a/LeftOvers/screens/home.tsx b/LeftOvers/screens/home.tsx deleted file mode 100644 index e69de29..0000000 From 1e71f981f611c161719885b56177d8e177bf6c39 Mon Sep 17 00:00:00 2001 From: Louison PARANT Date: Mon, 20 Nov 2023 11:13:01 +0100 Subject: [PATCH 7/7] Bug Fix (Separator ProfileElement) --- LeftOvers/App.tsx | 4 ++-- LeftOvers/components/ProfileElement.tsx | 11 +++++++++-- LeftOvers/components/ValidateButton.tsx | 1 + LeftOvers/screens/HomePage.tsx | 9 ++++----- LeftOvers/screens/ModifyProfile.tsx | 2 +- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/LeftOvers/App.tsx b/LeftOvers/App.tsx index 150d43d..8eea4ad 100644 --- a/LeftOvers/App.tsx +++ b/LeftOvers/App.tsx @@ -9,11 +9,11 @@ import FiltersSelection from './screens/FiltersSelection'; export default function App(props) { return( - + // // // // // - // + ); } \ No newline at end of file diff --git a/LeftOvers/components/ProfileElement.tsx b/LeftOvers/components/ProfileElement.tsx index 614caa5..658820e 100644 --- a/LeftOvers/components/ProfileElement.tsx +++ b/LeftOvers/components/ProfileElement.tsx @@ -10,6 +10,7 @@ type Profile = { export default function ProfileElement(props : Profile) { const [waiting, setWaiting] = useState("none") + const [separator, setSeparator] = useState("none") const changeStatus = () => { if (props.disableSelection){ setWaiting("none") @@ -20,7 +21,13 @@ export default function ProfileElement(props : Profile) { else{ setWaiting("flex") } - console.log(waiting, props.name) + if (props.isActive == "flex" && waiting == "none"){ + setSeparator("flex") + } + else{ + setSeparator("none") + } + console.log(waiting, separator, props.name) }; return ( @@ -33,7 +40,7 @@ export default function ProfileElement(props : Profile) { Activated - + Waiting... diff --git a/LeftOvers/components/ValidateButton.tsx b/LeftOvers/components/ValidateButton.tsx index de00a10..1ad4d82 100644 --- a/LeftOvers/components/ValidateButton.tsx +++ b/LeftOvers/components/ValidateButton.tsx @@ -21,6 +21,7 @@ export default function ValidateButton(props: ValidateButtonProps) { borderColor: props.colour, backgroundColor: props.backColour, alignItems: 'center', + justifyContent: "center", flexDirection: "row", padding: 5, paddingRight: 10,}}> diff --git a/LeftOvers/screens/HomePage.tsx b/LeftOvers/screens/HomePage.tsx index 549988e..dcf7ce7 100644 --- a/LeftOvers/screens/HomePage.tsx +++ b/LeftOvers/screens/HomePage.tsx @@ -87,7 +87,7 @@ export default function HomePage(props) { Selected Ingredient - + @@ -97,9 +97,9 @@ export default function HomePage(props) { - + - + @@ -145,18 +145,17 @@ const styles = StyleSheet.create({ }, nbSelected: { fontSize: 11, - //flex: 0.2, color: "#3F3C42", textAlign: "right", }, profilesSelection: { - //maxWidth: 370, flexDirection: 'column', alignItems: 'center', justifyContent: 'center', borderRadius: 20, backgroundColor: '#F2F0E4', + paddingTop: 5, marginHorizontal: 10, }, welcome: { diff --git a/LeftOvers/screens/ModifyProfile.tsx b/LeftOvers/screens/ModifyProfile.tsx index 212fc03..1a8b096 100644 --- a/LeftOvers/screens/ModifyProfile.tsx +++ b/LeftOvers/screens/ModifyProfile.tsx @@ -14,7 +14,7 @@ export default function ModifyProfile(props) { - +