|
1 |
| -import React from 'react'; |
2 |
| -import { View, Text } from 'react-native'; |
| 1 | +import React, { useState, useCallback } from 'react'; |
| 2 | +import { |
| 3 | + View, |
| 4 | + Text, |
| 5 | + StyleSheet, |
| 6 | + TextInput, |
| 7 | + Switch, |
| 8 | + FlatList, |
| 9 | + TouchableOpacity, |
| 10 | + Alert, |
| 11 | +} from 'react-native'; |
| 12 | + |
| 13 | +const COLORS = [ |
| 14 | + { colorName: 'AliceBlue', hexCode: '#F0F8FF' }, |
| 15 | + { colorName: 'AntiqueWhite', hexCode: '#FAEBD7' }, |
| 16 | + { colorName: 'Aqua', hexCode: '#00FFFF' }, |
| 17 | + { colorName: 'Aquamarine', hexCode: '#7FFFD4' }, |
| 18 | + { colorName: 'Azure', hexCode: '#F0FFFF' }, |
| 19 | + { colorName: 'Beige', hexCode: '#F5F5DC' }, |
| 20 | + { colorName: 'Bisque', hexCode: '#FFE4C4' }, |
| 21 | + { colorName: 'Black', hexCode: '#000000' }, |
| 22 | + { colorName: 'BlanchedAlmond', hexCode: '#FFEBCD' }, |
| 23 | + { colorName: 'Blue', hexCode: '#0000FF' }, |
| 24 | + { colorName: 'BlueViolet', hexCode: '#8A2BE2' }, |
| 25 | + { colorName: 'Brown', hexCode: '#A52A2A' }, |
| 26 | + { colorName: 'BurlyWood', hexCode: '#DEB887' }, |
| 27 | + { colorName: 'CadetBlue', hexCode: '#5F9EA0' }, |
| 28 | + { colorName: 'Chartreuse', hexCode: '#7FFF00' }, |
| 29 | + { colorName: 'Chocolate', hexCode: '#D2691E' }, |
| 30 | + { colorName: 'Coral', hexCode: '#FF7F50' }, |
| 31 | + { colorName: 'CornflowerBlue', hexCode: '#6495ED' }, |
| 32 | + { colorName: 'Cornsilk', hexCode: '#FFF8DC' }, |
| 33 | + { colorName: 'Crimson', hexCode: '#DC143C' }, |
| 34 | + { colorName: 'Cyan', hexCode: '#00FFFF' }, |
| 35 | + { colorName: 'DarkBlue', hexCode: '#00008B' }, |
| 36 | + { colorName: 'DarkCyan', hexCode: '#008B8B' }, |
| 37 | + { colorName: 'DarkGoldenRod', hexCode: '#B8860B' }, |
| 38 | + { colorName: 'DarkGray', hexCode: '#A9A9A9' }, |
| 39 | + { colorName: 'DarkGrey', hexCode: '#A9A9A9' }, |
| 40 | + { colorName: 'DarkGreen', hexCode: '#006400' }, |
| 41 | + { colorName: 'DarkKhaki', hexCode: '#BDB76B' }, |
| 42 | + { colorName: 'DarkMagenta', hexCode: '#8B008B' }, |
| 43 | + { colorName: 'DarkOliveGreen', hexCode: '#556B2F' }, |
| 44 | + { colorName: 'Darkorange', hexCode: '#FF8C00' }, |
| 45 | + { colorName: 'DarkOrchid', hexCode: '#9932CC' }, |
| 46 | + { colorName: 'DarkRed', hexCode: '#8B0000' }, |
| 47 | + { colorName: 'DarkSalmon', hexCode: '#E9967A' }, |
| 48 | + { colorName: 'DarkSeaGreen', hexCode: '#8FBC8F' }, |
| 49 | + { colorName: 'DarkSlateBlue', hexCode: '#483D8B' }, |
| 50 | + { colorName: 'DarkSlateGray', hexCode: '#2F4F4F' }, |
| 51 | + { colorName: 'DarkSlateGrey', hexCode: '#2F4F4F' }, |
| 52 | + { colorName: 'DarkTurquoise', hexCode: '#00CED1' }, |
| 53 | + { colorName: 'DarkViolet', hexCode: '#9400D3' }, |
| 54 | + { colorName: 'DeepPink', hexCode: '#FF1493' }, |
| 55 | + { colorName: 'DeepSkyBlue', hexCode: '#00BFFF' }, |
| 56 | + { colorName: 'DimGray', hexCode: '#696969' }, |
| 57 | + { colorName: 'DimGrey', hexCode: '#696969' }, |
| 58 | + { colorName: 'DodgerBlue', hexCode: '#1E90FF' }, |
| 59 | + { colorName: 'FireBrick', hexCode: '#B22222' }, |
| 60 | + { colorName: 'FloralWhite', hexCode: '#FFFAF0' }, |
| 61 | + { colorName: 'ForestGreen', hexCode: '#228B22' }, |
| 62 | + { colorName: 'Fuchsia', hexCode: '#FF00FF' }, |
| 63 | + { colorName: 'Gainsboro', hexCode: '#DCDCDC' }, |
| 64 | + { colorName: 'GhostWhite', hexCode: '#F8F8FF' }, |
| 65 | + { colorName: 'Gold', hexCode: '#FFD700' }, |
| 66 | + { colorName: 'GoldenRod', hexCode: '#DAA520' }, |
| 67 | + { colorName: 'Gray', hexCode: '#808080' }, |
| 68 | + { colorName: 'Grey', hexCode: '#808080' }, |
| 69 | + { colorName: 'Green', hexCode: '#008000' }, |
| 70 | + { colorName: 'GreenYellow', hexCode: '#ADFF2F' }, |
| 71 | + { colorName: 'HoneyDew', hexCode: '#F0FFF0' }, |
| 72 | + { colorName: 'HotPink', hexCode: '#FF69B4' }, |
| 73 | + { colorName: 'IndianRed', hexCode: '#CD5C5C' }, |
| 74 | + { colorName: 'Indigo', hexCode: '#4B0082' }, |
| 75 | + { colorName: 'Ivory', hexCode: '#FFFFF0' }, |
| 76 | + { colorName: 'Khaki', hexCode: '#F0E68C' }, |
| 77 | + { colorName: 'Lavender', hexCode: '#E6E6FA' }, |
| 78 | + { colorName: 'LavenderBlush', hexCode: '#FFF0F5' }, |
| 79 | + { colorName: 'LawnGreen', hexCode: '#7CFC00' }, |
| 80 | + { colorName: 'LemonChiffon', hexCode: '#FFFACD' }, |
| 81 | + { colorName: 'LightBlue', hexCode: '#ADD8E6' }, |
| 82 | + { colorName: 'LightCoral', hexCode: '#F08080' }, |
| 83 | + { colorName: 'LightCyan', hexCode: '#E0FFFF' }, |
| 84 | + { colorName: 'LightGoldenRodYellow', hexCode: '#FAFAD2' }, |
| 85 | + { colorName: 'LightGray', hexCode: '#D3D3D3' }, |
| 86 | + { colorName: 'LightGrey', hexCode: '#D3D3D3' }, |
| 87 | + { colorName: 'LightGreen', hexCode: '#90EE90' }, |
| 88 | + { colorName: 'LightPink', hexCode: '#FFB6C1' }, |
| 89 | + { colorName: 'LightSalmon', hexCode: '#FFA07A' }, |
| 90 | + { colorName: 'LightSeaGreen', hexCode: '#20B2AA' }, |
| 91 | + { colorName: 'LightSkyBlue', hexCode: '#87CEFA' }, |
| 92 | + { colorName: 'LightSlateGray', hexCode: '#778899' }, |
| 93 | + { colorName: 'LightSlateGrey', hexCode: '#778899' }, |
| 94 | + { colorName: 'LightSteelBlue', hexCode: '#B0C4DE' }, |
| 95 | + { colorName: 'LightYellow', hexCode: '#FFFFE0' }, |
| 96 | + { colorName: 'Lime', hexCode: '#00FF00' }, |
| 97 | + { colorName: 'LimeGreen', hexCode: '#32CD32' }, |
| 98 | + { colorName: 'Linen', hexCode: '#FAF0E6' }, |
| 99 | + { colorName: 'Magenta', hexCode: '#FF00FF' }, |
| 100 | + { colorName: 'Maroon', hexCode: '#800000' }, |
| 101 | + { colorName: 'MediumAquaMarine', hexCode: '#66CDAA' }, |
| 102 | + { colorName: 'MediumBlue', hexCode: '#0000CD' }, |
| 103 | + { colorName: 'MediumOrchid', hexCode: '#BA55D3' }, |
| 104 | + { colorName: 'MediumPurple', hexCode: '#9370D8' }, |
| 105 | + { colorName: 'MediumSeaGreen', hexCode: '#3CB371' }, |
| 106 | + { colorName: 'MediumSlateBlue', hexCode: '#7B68EE' }, |
| 107 | + { colorName: 'MediumSpringGreen', hexCode: '#00FA9A' }, |
| 108 | + { colorName: 'MediumTurquoise', hexCode: '#48D1CC' }, |
| 109 | + { colorName: 'MediumVioletRed', hexCode: '#C71585' }, |
| 110 | + { colorName: 'MidnightBlue', hexCode: '#191970' }, |
| 111 | + { colorName: 'MintCream', hexCode: '#F5FFFA' }, |
| 112 | + { colorName: 'MistyRose', hexCode: '#FFE4E1' }, |
| 113 | + { colorName: 'Moccasin', hexCode: '#FFE4B5' }, |
| 114 | + { colorName: 'NavajoWhite', hexCode: '#FFDEAD' }, |
| 115 | + { colorName: 'Navy', hexCode: '#000080' }, |
| 116 | + { colorName: 'OldLace', hexCode: '#FDF5E6' }, |
| 117 | + { colorName: 'Olive', hexCode: '#808000' }, |
| 118 | + { colorName: 'OliveDrab', hexCode: '#6B8E23' }, |
| 119 | + { colorName: 'Orange', hexCode: '#FFA500' }, |
| 120 | + { colorName: 'OrangeRed', hexCode: '#FF4500' }, |
| 121 | + { colorName: 'Orchid', hexCode: '#DA70D6' }, |
| 122 | + { colorName: 'PaleGoldenRod', hexCode: '#EEE8AA' }, |
| 123 | + { colorName: 'PaleGreen', hexCode: '#98FB98' }, |
| 124 | + { colorName: 'PaleTurquoise', hexCode: '#AFEEEE' }, |
| 125 | + { colorName: 'PaleVioletRed', hexCode: '#D87093' }, |
| 126 | + { colorName: 'PapayaWhip', hexCode: '#FFEFD5' }, |
| 127 | + { colorName: 'PeachPuff', hexCode: '#FFDAB9' }, |
| 128 | + { colorName: 'Peru', hexCode: '#CD853F' }, |
| 129 | + { colorName: 'Pink', hexCode: '#FFC0CB' }, |
| 130 | + { colorName: 'Plum', hexCode: '#DDA0DD' }, |
| 131 | + { colorName: 'PowderBlue', hexCode: '#B0E0E6' }, |
| 132 | + { colorName: 'Purple', hexCode: '#800080' }, |
| 133 | + { colorName: 'Red', hexCode: '#FF0000' }, |
| 134 | + { colorName: 'RosyBrown', hexCode: '#BC8F8F' }, |
| 135 | + { colorName: 'RoyalBlue', hexCode: '#4169E1' }, |
| 136 | + { colorName: 'SaddleBrown', hexCode: '#8B4513' }, |
| 137 | + { colorName: 'Salmon', hexCode: '#FA8072' }, |
| 138 | + { colorName: 'SandyBrown', hexCode: '#F4A460' }, |
| 139 | + { colorName: 'SeaGreen', hexCode: '#2E8B57' }, |
| 140 | + { colorName: 'SeaShell', hexCode: '#FFF5EE' }, |
| 141 | + { colorName: 'Sienna', hexCode: '#A0522D' }, |
| 142 | + { colorName: 'Silver', hexCode: '#C0C0C0' }, |
| 143 | + { colorName: 'SkyBlue', hexCode: '#87CEEB' }, |
| 144 | + { colorName: 'SlateBlue', hexCode: '#6A5ACD' }, |
| 145 | + { colorName: 'SlateGray', hexCode: '#708090' }, |
| 146 | + { colorName: 'SlateGrey', hexCode: '#708090' }, |
| 147 | + { colorName: 'Snow', hexCode: '#FFFAFA' }, |
| 148 | + { colorName: 'SpringGreen', hexCode: '#00FF7F' }, |
| 149 | + { colorName: 'SteelBlue', hexCode: '#4682B4' }, |
| 150 | + { colorName: 'Tan', hexCode: '#D2B48C' }, |
| 151 | + { colorName: 'Teal', hexCode: '#008080' }, |
| 152 | + { colorName: 'Thistle', hexCode: '#D8BFD8' }, |
| 153 | + { colorName: 'Tomato', hexCode: '#FF6347' }, |
| 154 | + { colorName: 'Turquoise', hexCode: '#40E0D0' }, |
| 155 | + { colorName: 'Violet', hexCode: '#EE82EE' }, |
| 156 | + { colorName: 'Wheat', hexCode: '#F5DEB3' }, |
| 157 | + { colorName: 'White', hexCode: '#FFFFFF' }, |
| 158 | + { colorName: 'WhiteSmoke', hexCode: '#F5F5F5' }, |
| 159 | + { colorName: 'Yellow', hexCode: '#FFFF00' }, |
| 160 | + { colorName: 'YellowGreen', hexCode: '#9ACD' }, |
| 161 | +]; |
| 162 | + |
| 163 | +const AddNewPaletteModal = ({ navigation }) => { |
| 164 | + const [name, setName] = useState(''); |
| 165 | + const [selectedColors, setSelectedColors] = useState([]); |
| 166 | + |
| 167 | + const handleUpdate = useCallback( |
| 168 | + (color, newValue) => { |
| 169 | + if (newValue === true) { |
| 170 | + setSelectedColors(current => [...current, color]); |
| 171 | + } else { |
| 172 | + setSelectedColors(current => |
| 173 | + current.filter(c => c.colorName !== color.colorName), |
| 174 | + ); |
| 175 | + } |
| 176 | + }, |
| 177 | + [selectedColors, setSelectedColors], |
| 178 | + ); |
| 179 | + |
| 180 | + const handleSubmit = useCallback(() => { |
| 181 | + if (!name) { |
| 182 | + Alert.alert('Please add a name to your color palette'); |
| 183 | + } else if (selectedColors.length < 3) { |
| 184 | + Alert.alert('Please choose at least 3 colors'); |
| 185 | + } else { |
| 186 | + navigation.navigate('Home', { |
| 187 | + newPalette: { paletteName: name, colors: selectedColors }, |
| 188 | + }); |
| 189 | + } |
| 190 | + }, [name, selectedColors]); |
3 | 191 |
|
4 |
| -const AddNewPaletteModal = () => { |
5 | 192 | return (
|
6 |
| - <View> |
7 |
| - <Text>Hello, world!</Text> |
| 193 | + <View style={styles.container}> |
| 194 | + <View style={styles.heading}> |
| 195 | + <Text>Name of your color palette</Text> |
| 196 | + <TextInput style={styles.input} value={name} onChangeText={setName} /> |
| 197 | + </View> |
| 198 | + <FlatList |
| 199 | + style={styles.list} |
| 200 | + data={COLORS} |
| 201 | + keyExtractor={item => item.colorName} |
| 202 | + renderItem={({ item }) => ( |
| 203 | + <View style={styles.switch}> |
| 204 | + <Text>{item.colorName}</Text> |
| 205 | + <Switch |
| 206 | + value={ |
| 207 | + !!selectedColors.find( |
| 208 | + color => color.colorName === item.colorName, |
| 209 | + ) |
| 210 | + } |
| 211 | + onValueChange={newValue => handleUpdate(item, newValue)} |
| 212 | + /> |
| 213 | + </View> |
| 214 | + )} |
| 215 | + /> |
| 216 | + <TouchableOpacity style={styles.buttonWrapper} onPress={handleSubmit}> |
| 217 | + <View style={styles.button}> |
| 218 | + <Text style={styles.buttonText}>Submit!</Text> |
| 219 | + </View> |
| 220 | + </TouchableOpacity> |
8 | 221 | </View>
|
9 | 222 | );
|
10 | 223 | };
|
11 | 224 |
|
| 225 | +const styles = StyleSheet.create({ |
| 226 | + container: { |
| 227 | + backgroundColor: 'white', |
| 228 | + flex: 1, |
| 229 | + }, |
| 230 | + input: { |
| 231 | + borderWidth: 1, |
| 232 | + borderColor: 'grey', |
| 233 | + padding: 10, |
| 234 | + marginVertical: 10, |
| 235 | + borderRadius: 5, |
| 236 | + fontSize: 18, |
| 237 | + }, |
| 238 | + switch: { |
| 239 | + flexDirection: 'row', |
| 240 | + justifyContent: 'space-between', |
| 241 | + alignItems: 'center', |
| 242 | + padding: 10, |
| 243 | + borderBottomColor: 'grey', |
| 244 | + borderBottomWidth: 1, |
| 245 | + }, |
| 246 | + list: { |
| 247 | + paddingHorizontal: 10, |
| 248 | + marginVertical: 10, |
| 249 | + }, |
| 250 | + heading: { |
| 251 | + padding: 10, |
| 252 | + }, |
| 253 | + buttonWrapper: { |
| 254 | + height: 100, |
| 255 | + marginHorizontal: 10, |
| 256 | + }, |
| 257 | + button: { |
| 258 | + height: 40, |
| 259 | + backgroundColor: 'teal', |
| 260 | + borderRadius: 5, |
| 261 | + justifyContent: 'center', |
| 262 | + alignItems: 'center', |
| 263 | + }, |
| 264 | + buttonText: { |
| 265 | + color: 'white', |
| 266 | + fontWeight: 'bold', |
| 267 | + }, |
| 268 | +}); |
| 269 | + |
12 | 270 | export default AddNewPaletteModal;
|
0 commit comments