瀏覽代碼

Merge branch 'new-categories' of apps/atlas-mobile-ts into dev

nathanial 2 年之前
父節點
當前提交
29c91789a8

+ 3 - 1
.vscode/settings.json

@@ -1,3 +1,5 @@
 {
-    "java.configuration.updateBuildConfiguration": "interactive"
+    "java.configuration.updateBuildConfiguration": "interactive",
+    "python.linting.pylintEnabled": true,
+    "python.linting.enabled": true
 }

+ 2 - 2
android/app/build.gradle

@@ -140,8 +140,8 @@ android {
         applicationId 'com.clicknpush.mobile'
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
-        versionCode 32
-        versionName "0.1.10"
+        versionCode 34
+        versionName "0.1.11"
     }
     splits {
         abi {

+ 1 - 1
android/app/src/main/AndroidManifest.xml

@@ -15,7 +15,7 @@
     <meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/>
     <meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
     <meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://u.expo.dev/082de7a5-d9b8-4c96-bd1b-5706cca20324"/>
-    <meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="1.0.0"/>
+    <meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="1.0.1"/>
     <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:screenOrientation="portrait">
       <intent-filter>
         <action android:name="android.intent.action.MAIN"/>

+ 3 - 3
app.json

@@ -24,7 +24,7 @@
     "ios": {
       "bundleIdentifier": "com.clicknpush.app",
       "googleServicesFile": "./GoogleService-Info.plist",
-      "buildNumber": "0.1.10"
+      "buildNumber": "0.1.11"
     },
     "android": {
       "googleServicesFile": "./google-services.json",
@@ -33,7 +33,7 @@
         "backgroundImage": "./assets/cover.png"
       },
       "package": "com.clicknpush.mobile",
-      "versionCode": 32,
+      "versionCode": 34,
       "config": {
         "googleMaps": {
           "apiKey": "AIzaSyDPN1Z8SV7WClUdnoVyTQMoUfMYeC0DZyU"
@@ -43,6 +43,6 @@
     "web": {
       "favicon": "./assets/favicon.png"
     },
-    "runtimeVersion": "1.0.0"
+    "runtimeVersion": "1.0.1"
   }
 }

+ 1 - 1
ios/cnpmobile/Supporting/Expo.plist

@@ -11,6 +11,6 @@
     <key>EXUpdatesURL</key>
     <string>https://u.expo.dev/082de7a5-d9b8-4c96-bd1b-5706cca20324</string>
     <key>EXUpdatesRuntimeVersion</key>
-    <string>1.0.0</string>
+    <string>1.0.1</string>
   </dict>
 </plist>

+ 34 - 462
package-lock.json

@@ -51,7 +51,7 @@
         "parcel": "^2.0.0-rc.0",
         "patch-package": "^6.4.7",
         "postcss": "^8.3.6",
-        "react": "17.0.1",
+        "react": "^17.0.1",
         "react-dom": "17.0.1",
         "react-hook-form": "^7.12.2",
         "react-native": "0.64.3",
@@ -73,7 +73,7 @@
         "react-native-multiple-select": "^0.5.7",
         "react-native-paper": "^4.9.2",
         "react-native-permissions": "^3.1.0",
-        "react-native-picker-select": "^7.0.0",
+        "react-native-picker-select": "^8.0.0",
         "react-native-popup-menu": "^0.15.12",
         "react-native-reanimated": "~2.2.0",
         "react-native-root-toast": "^3.3.0",
@@ -1934,15 +1934,15 @@
       }
     },
     "node_modules/@callstack/react-theme-provider": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.6.tgz",
-      "integrity": "sha512-wwKMXfmklfogpalNZT0W+jh76BIquiYUiQHOaPmt/PCyCEP/E6rP+e7Uie6mBZrfkea9WJYJ+mus6r+45JAEhg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.7.tgz",
+      "integrity": "sha512-Ab6rbD2w4u9W3yf7LQQ8evx9m8fZNsoWxt+MFm3AyZnyKQNCJf4K7ip9tHHZgSs+HTdoj38lEqPehvFOVQKvAg==",
       "dependencies": {
         "deepmerge": "^3.2.0",
         "hoist-non-react-statics": "^3.3.0"
       },
       "peerDependencies": {
-        "react": "^16.3.0"
+        "react": ">=16.3.0"
       }
     },
     "node_modules/@cnakazawa/watch": {
@@ -3055,54 +3055,6 @@
         "@lezer/common": "^0.15.0"
       }
     },
-    "node_modules/@lmdb/lmdb-darwin-arm64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
-      "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@lmdb/lmdb-darwin-x64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz",
-      "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@lmdb/lmdb-linux-arm": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz",
-      "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@lmdb/lmdb-linux-arm64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz",
-      "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
     "node_modules/@lmdb/lmdb-linux-x64": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz",
@@ -3115,18 +3067,6 @@
         "linux"
       ]
     },
-    "node_modules/@lmdb/lmdb-win32-x64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz",
-      "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
     "node_modules/@mischnic/json-sourcemap": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
@@ -3151,54 +3091,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.0.2.tgz",
-      "integrity": "sha512-FMX5i7a+ojIguHpWbzh5MCsCouJkwf4z4ejdUY/fsgB9Vkdak4ZnoIEskOyOUMMB4lctiZFGszFQJXUeFL8tRg==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.0.2.tgz",
-      "integrity": "sha512-DznYtF3lHuZDSRaIOYeif4JgO0NtO2Xf8DsngAugMx/bUdTFbg86jDTmkVJBNmV+cxszz6OjGvinnS8AbJ342g==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.0.2.tgz",
-      "integrity": "sha512-Gy9+c3Wj+rUlD3YvCZTi92gs+cRX7ZQogtwq0IhRenloTTlsbpezNgk6OCkt59V4ATEWSic9rbU92H/l7XsRvA==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.0.2.tgz",
-      "integrity": "sha512-b0jMEo566YdM2K+BurSed7bswjo3a6bcdw5ETqoIfSuxKuRLPfAiOjVbZyZBgx3J/TAM/QrvEQ/VN89A0ZAxSg==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
     "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.0.2.tgz",
@@ -3211,18 +3103,6 @@
         "linux"
       ]
     },
-    "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.0.2.tgz",
-      "integrity": "sha512-fpnI00dt+yO1cKx9qBXelKhPBdEgvc8ZPav1+0r09j0woYQU2N79w/jcGawSY5UGlgQ3vjaJsFHnGbGvvqdLzg==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3503,101 +3383,6 @@
         "@parcel/css-win32-x64-msvc": "1.12.0"
       }
     },
-    "node_modules/@parcel/css-darwin-arm64": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.12.0.tgz",
-      "integrity": "sha512-zq2vdvIJNFetPFima2D/oytAlxlWP9Qy6WSri+l3TOMnxrvObqfMv71kmbwOFUApnaxmTMqdd/GQN6DvIL+gOQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/css-darwin-x64": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.12.0.tgz",
-      "integrity": "sha512-N3bvj68peUquzh/6mA50+EgnddjxFjil5sfDSfvvOEQoTQB0e0T/Q2J7O9RqRLcK5mKHJ/27ByQAhoEZZ8AT6g==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/css-linux-arm-gnueabihf": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.12.0.tgz",
-      "integrity": "sha512-Y2SQmYhUZllHFvv5BYRiZSFGoMOyLqhRcvRNrR6cgzIPBBUTLYgCTP1EKAXXaGqLZCjwPig/d1ZBvKI+cA75IA==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/css-linux-arm64-gnu": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.12.0.tgz",
-      "integrity": "sha512-FDaqmvB6Iuv64oen3XzKfimnlXARUZ+rkxu9ivgv69Iwp1OQKLUxwCRxMrhotg8sryONhyg/tHWft7G0t4S14w==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
-    "node_modules/@parcel/css-linux-arm64-musl": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.12.0.tgz",
-      "integrity": "sha512-PxkjtWk5B5DA8dkBJqd59NSr55RnDkVwVRqH5nCXux7gWPdp9v+LRrRJBpSQgLJaiatFiY+CXZNlFRnBqrqFTQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
     "node_modules/@parcel/css-linux-x64-gnu": {
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.12.0.tgz",
@@ -3636,25 +3421,6 @@
         "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/@parcel/css-win32-x64-msvc": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.12.0.tgz",
-      "integrity": "sha512-FWlyrTezxfSvYdf9qX8XSbDimeF0+N8xyP2fIEMf1YFejxH6NJ5N4LSPfysBf4qqOVR0DYYTa+UHtZxN/g2B6A==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      }
-    },
     "node_modules/@parcel/diagnostic": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.6.2.tgz",
@@ -8644,15 +8410,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "optional": true,
-      "dependencies": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
     "node_modules/bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -13744,12 +13501,6 @@
         "url": "https://opencollective.com/webpack"
       }
     },
-    "node_modules/file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "optional": true
-    },
     "node_modules/filesize": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
@@ -14232,19 +13983,6 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
-    "node_modules/fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
     "node_modules/function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -18373,12 +18111,6 @@
         "thenify-all": "^1.0.0"
       }
     },
-    "node_modules/nan": {
-      "version": "2.16.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
-      "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
-      "optional": true
-    },
     "node_modules/nano-time": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
@@ -22377,13 +22109,23 @@
       }
     },
     "node_modules/react-native-picker-select": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-7.0.0.tgz",
-      "integrity": "sha512-SO7b7wHfeM07oVTsLhBlT/VDvMXg2aP0Xy5CA+kL7+oV2Bq6nfKTVjpB2+HLVhFik9i/tlq5ROuGdUrfPhl3rg==",
+      "version": "8.0.4",
+      "resolved": "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-8.0.4.tgz",
+      "integrity": "sha512-orBjPIwBkV5oipyVw263YNMI56f6Kj3p/ejabZoCYYNSG3AiLVVhC2RqsxMgDA7IayyURAW+AlV+mDJyVqLBkg==",
       "dependencies": {
+        "@react-native-picker/picker": "^1.8.3",
         "lodash.isequal": "^4.5.0"
       }
     },
+    "node_modules/react-native-picker-select/node_modules/@react-native-picker/picker": {
+      "version": "1.16.8",
+      "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-1.16.8.tgz",
+      "integrity": "sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ==",
+      "peerDependencies": {
+        "react": "16 || 17",
+        "react-native": ">=0.57"
+      }
+    },
     "node_modules/react-native-popup-menu": {
       "version": "0.15.12",
       "resolved": "https://registry.npmjs.org/react-native-popup-menu/-/react-native-popup-menu-0.15.12.tgz",
@@ -26277,24 +26019,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/watchpack-chokidar2/node_modules/fsevents": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
-      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "dependencies": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
     "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
@@ -26858,24 +26582,6 @@
         "ms": "2.0.0"
       }
     },
-    "node_modules/webpack-dev-server/node_modules/fsevents": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
-      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
-      "hasInstallScript": true,
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "dependencies": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1"
-      },
-      "engines": {
-        "node": ">= 4.0"
-      }
-    },
     "node_modules/webpack-dev-server/node_modules/glob-parent": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
@@ -29543,9 +29249,9 @@
       }
     },
     "@callstack/react-theme-provider": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.6.tgz",
-      "integrity": "sha512-wwKMXfmklfogpalNZT0W+jh76BIquiYUiQHOaPmt/PCyCEP/E6rP+e7Uie6mBZrfkea9WJYJ+mus6r+45JAEhg==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.7.tgz",
+      "integrity": "sha512-Ab6rbD2w4u9W3yf7LQQ8evx9m8fZNsoWxt+MFm3AyZnyKQNCJf4K7ip9tHHZgSs+HTdoj38lEqPehvFOVQKvAg==",
       "requires": {
         "deepmerge": "^3.2.0",
         "hoist-non-react-statics": "^3.3.0"
@@ -30429,42 +30135,12 @@
         "@lezer/common": "^0.15.0"
       }
     },
-    "@lmdb/lmdb-darwin-arm64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
-      "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
-      "optional": true
-    },
-    "@lmdb/lmdb-darwin-x64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.5.2.tgz",
-      "integrity": "sha512-KvPH56KRLLx4KSfKBx0m1r7GGGUMXm0jrKmNE7plbHlesZMuPJICtn07HYgQhj1LNsK7Yqwuvnqh1QxhJnF1EA==",
-      "optional": true
-    },
-    "@lmdb/lmdb-linux-arm": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.5.2.tgz",
-      "integrity": "sha512-5kQAP21hAkfW5Bl+e0P57dV4dGYnkNIpR7f/GAh6QHlgXx+vp/teVj4PGRZaKAvt0GX6++N6hF8NnGElLDuIDw==",
-      "optional": true
-    },
-    "@lmdb/lmdb-linux-arm64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.5.2.tgz",
-      "integrity": "sha512-aLl89VHL/wjhievEOlPocoefUyWdvzVrcQ/MHQYZm2JfV1jUsrbr/ZfkPPUFvZBf+VSE+Q0clWs9l29PCX1hTQ==",
-      "optional": true
-    },
     "@lmdb/lmdb-linux-x64": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.5.2.tgz",
       "integrity": "sha512-xUdUfwDJLGjOUPH3BuPBt0NlIrR7f/QHKgu3GZIXswMMIihAekj2i97oI0iWG5Bok/b+OBjHPfa8IU9velnP/Q==",
       "optional": true
     },
-    "@lmdb/lmdb-win32-x64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.5.2.tgz",
-      "integrity": "sha512-zrBczSbXKxEyK2ijtbRdICDygRqWSRPpZMN5dD1T8VMEW5RIhIbwFWw2phDRXuBQdVDpSjalCIUMWMV2h3JaZA==",
-      "optional": true
-    },
     "@mischnic/json-sourcemap": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
@@ -30482,42 +30158,12 @@
         }
       }
     },
-    "@msgpackr-extract/msgpackr-extract-darwin-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-2.0.2.tgz",
-      "integrity": "sha512-FMX5i7a+ojIguHpWbzh5MCsCouJkwf4z4ejdUY/fsgB9Vkdak4ZnoIEskOyOUMMB4lctiZFGszFQJXUeFL8tRg==",
-      "optional": true
-    },
-    "@msgpackr-extract/msgpackr-extract-darwin-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-2.0.2.tgz",
-      "integrity": "sha512-DznYtF3lHuZDSRaIOYeif4JgO0NtO2Xf8DsngAugMx/bUdTFbg86jDTmkVJBNmV+cxszz6OjGvinnS8AbJ342g==",
-      "optional": true
-    },
-    "@msgpackr-extract/msgpackr-extract-linux-arm": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-2.0.2.tgz",
-      "integrity": "sha512-Gy9+c3Wj+rUlD3YvCZTi92gs+cRX7ZQogtwq0IhRenloTTlsbpezNgk6OCkt59V4ATEWSic9rbU92H/l7XsRvA==",
-      "optional": true
-    },
-    "@msgpackr-extract/msgpackr-extract-linux-arm64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-2.0.2.tgz",
-      "integrity": "sha512-b0jMEo566YdM2K+BurSed7bswjo3a6bcdw5ETqoIfSuxKuRLPfAiOjVbZyZBgx3J/TAM/QrvEQ/VN89A0ZAxSg==",
-      "optional": true
-    },
     "@msgpackr-extract/msgpackr-extract-linux-x64": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-2.0.2.tgz",
       "integrity": "sha512-zrBHaePwcv4cQXxzYgNj0+A8I1uVN97E7/3LmkRocYZ+rMwUsnPpp4RuTAHSRoKlTQV3nSdCQW4Qdt4MXw/iHw==",
       "optional": true
     },
-    "@msgpackr-extract/msgpackr-extract-win32-x64": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-2.0.2.tgz",
-      "integrity": "sha512-fpnI00dt+yO1cKx9qBXelKhPBdEgvc8ZPav1+0r09j0woYQU2N79w/jcGawSY5UGlgQ3vjaJsFHnGbGvvqdLzg==",
-      "optional": true
-    },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -30714,36 +30360,6 @@
         "detect-libc": "^1.0.3"
       }
     },
-    "@parcel/css-darwin-arm64": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.12.0.tgz",
-      "integrity": "sha512-zq2vdvIJNFetPFima2D/oytAlxlWP9Qy6WSri+l3TOMnxrvObqfMv71kmbwOFUApnaxmTMqdd/GQN6DvIL+gOQ==",
-      "optional": true
-    },
-    "@parcel/css-darwin-x64": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.12.0.tgz",
-      "integrity": "sha512-N3bvj68peUquzh/6mA50+EgnddjxFjil5sfDSfvvOEQoTQB0e0T/Q2J7O9RqRLcK5mKHJ/27ByQAhoEZZ8AT6g==",
-      "optional": true
-    },
-    "@parcel/css-linux-arm-gnueabihf": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.12.0.tgz",
-      "integrity": "sha512-Y2SQmYhUZllHFvv5BYRiZSFGoMOyLqhRcvRNrR6cgzIPBBUTLYgCTP1EKAXXaGqLZCjwPig/d1ZBvKI+cA75IA==",
-      "optional": true
-    },
-    "@parcel/css-linux-arm64-gnu": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.12.0.tgz",
-      "integrity": "sha512-FDaqmvB6Iuv64oen3XzKfimnlXARUZ+rkxu9ivgv69Iwp1OQKLUxwCRxMrhotg8sryONhyg/tHWft7G0t4S14w==",
-      "optional": true
-    },
-    "@parcel/css-linux-arm64-musl": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.12.0.tgz",
-      "integrity": "sha512-PxkjtWk5B5DA8dkBJqd59NSr55RnDkVwVRqH5nCXux7gWPdp9v+LRrRJBpSQgLJaiatFiY+CXZNlFRnBqrqFTQ==",
-      "optional": true
-    },
     "@parcel/css-linux-x64-gnu": {
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.12.0.tgz",
@@ -30756,12 +30372,6 @@
       "integrity": "sha512-oTHzmpTEkew/aoW4jyQ/sR+XJh+3Xl7J9dnJo4/FVvRjRSHdr/V8LEPx61Iv2Edx123WzrpNqpvUC1X6Q3M4fw==",
       "optional": true
     },
-    "@parcel/css-win32-x64-msvc": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.12.0.tgz",
-      "integrity": "sha512-FWlyrTezxfSvYdf9qX8XSbDimeF0+N8xyP2fIEMf1YFejxH6NJ5N4LSPfysBf4qqOVR0DYYTa+UHtZxN/g2B6A==",
-      "optional": true
-    },
     "@parcel/diagnostic": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.6.2.tgz",
@@ -34574,15 +34184,6 @@
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
       "optional": true
     },
-    "bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "optional": true,
-      "requires": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -38637,12 +38238,6 @@
         }
       }
     },
-    "file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "optional": true
-    },
     "filesize": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
@@ -39014,12 +38609,6 @@
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
-    "fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-      "optional": true
-    },
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -42279,12 +41868,6 @@
         "thenify-all": "^1.0.0"
       }
     },
-    "nan": {
-      "version": "2.16.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
-      "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
-      "optional": true
-    },
     "nano-time": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
@@ -45474,11 +45057,20 @@
       "requires": {}
     },
     "react-native-picker-select": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-7.0.0.tgz",
-      "integrity": "sha512-SO7b7wHfeM07oVTsLhBlT/VDvMXg2aP0Xy5CA+kL7+oV2Bq6nfKTVjpB2+HLVhFik9i/tlq5ROuGdUrfPhl3rg==",
+      "version": "8.0.4",
+      "resolved": "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-8.0.4.tgz",
+      "integrity": "sha512-orBjPIwBkV5oipyVw263YNMI56f6Kj3p/ejabZoCYYNSG3AiLVVhC2RqsxMgDA7IayyURAW+AlV+mDJyVqLBkg==",
       "requires": {
+        "@react-native-picker/picker": "^1.8.3",
         "lodash.isequal": "^4.5.0"
+      },
+      "dependencies": {
+        "@react-native-picker/picker": {
+          "version": "1.16.8",
+          "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-1.16.8.tgz",
+          "integrity": "sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ==",
+          "requires": {}
+        }
       }
     },
     "react-native-popup-menu": {
@@ -48453,16 +48045,6 @@
             "to-regex-range": "^2.1.0"
           }
         },
-        "fsevents": {
-          "version": "1.2.13",
-          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
-          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
-        },
         "glob-parent": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
@@ -49128,16 +48710,6 @@
             }
           }
         },
-        "fsevents": {
-          "version": "1.2.13",
-          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
-          "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
-          "optional": true,
-          "requires": {
-            "bindings": "^1.5.0",
-            "nan": "^2.12.1"
-          }
-        },
         "glob-parent": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",

+ 2 - 2
package.json

@@ -69,7 +69,7 @@
     "parcel": "^2.0.0-rc.0",
     "patch-package": "^6.4.7",
     "postcss": "^8.3.6",
-    "react": "17.0.1",
+    "react": "^17.0.1",
     "react-dom": "17.0.1",
     "react-hook-form": "^7.12.2",
     "react-native": "0.64.3",
@@ -91,7 +91,7 @@
     "react-native-multiple-select": "^0.5.7",
     "react-native-paper": "^4.9.2",
     "react-native-permissions": "^3.1.0",
-    "react-native-picker-select": "^7.0.0",
+    "react-native-picker-select": "^8.0.0",
     "react-native-popup-menu": "^0.15.12",
     "react-native-reanimated": "~2.2.0",
     "react-native-root-toast": "^3.3.0",

+ 55 - 19
src/components/LandmarkTypePicker.tsx

@@ -1,32 +1,68 @@
-import React from 'react'
+import React, {useState, useEffect} from 'react'
+import { Image } from 'react-native';
 import Picker, { Item } from 'react-native-picker-select'
 import { FontAwesome } from "@expo/vector-icons";
+import { View } from 'react-native';
+import { colors, lmTypes as allLmTypes, lmTypesIndoor } from "../utils/GlobalUtils";
 
 interface LandmarkTypePickerProps {
     onValueChange: (value: any, index: number) => void,
     value?: any,
+    cats: Item[],
     items: Item[],
     placeholder?: {} | Item 
 }
 
-const LandmarkTypePicker: React.FC<LandmarkTypePickerProps> = ({items, value, onValueChange, placeholder}) => {
+const LandmarkTypePicker: React.FC<LandmarkTypePickerProps> = ({items, cats, value, onValueChange, placeholder}) => {
+
+    const [selectedValueCat, setSelectedValueCat] = useState();
+
+    let lmTypes = allLmTypes;
+
     return (
-    <Picker
-        style={{
-            inputIOS: { color: 'white' },
-            inputAndroid: { color: 'white', alignItems: 'center', justifyContent: 'center' },
-            viewContainer: { marginVertical: 5, flex: 1}, 
-            iconContainer: { height: '100%', justifyContent: 'center' },
-            placeholder: { color: 'white' }
-        }}
-        textInputProps={{ placeholderTextColor: 'white', selectionColor: 'white' }}
-        Icon={() => <FontAwesome name="chevron-down" color='white' style={{alignSelf: 'center'}} size={20} />}
-        placeholder={placeholder}
-        value={value}
-        onValueChange={onValueChange}
-        useNativeAndroidPickerStyle={true}
-        items={items}
-    />)
+        <><View style={{ flexDirection: 'row' }}>
+            <Picker
+                style={{
+                    inputIOS: { color: 'white' },
+                    inputAndroid: { color: 'white', alignItems: 'center', justifyContent: 'center' },
+                    viewContainer: { marginVertical: 5, flex: 1 },
+                    iconContainer: { height: '100%', justifyContent: 'center' },
+                    placeholder: { color: 'white' }
+                }}
+                textInputProps={{ placeholderTextColor: 'white', selectionColor: 'white' }}
+                Icon={() => <FontAwesome name="chevron-down" color='white' style={{ alignSelf: 'center' }} size={20} />}
+                placeholder={placeholder}
+                onValueChange={(value) => setSelectedValueCat(value)}
+                useNativeAndroidPickerStyle={true}
+                items={cats} />
+
+        </View>
+        <View style={{ flexDirection: 'row' }}>
+                {selectedValueCat ?
+                    <Picker
+                        style={{
+                            inputIOS: { color: 'white' },
+                            inputAndroid: { color: 'white', alignItems: 'center', justifyContent: 'center' },
+                            viewContainer: { marginVertical: 5, flex: 1 },
+                            iconContainer: { height: '100%', justifyContent: 'center' },
+                            placeholder: { color: 'white' }
+                        }}
+                        textInputProps={{ placeholderTextColor: 'white', selectionColor: 'white' }}
+                        Icon={() => <FontAwesome name="chevron-down" color='white' style={{ alignSelf: 'center' }} size={20} />}
+                        placeholder={placeholder}
+                        value={value}
+                        onValueChange={onValueChange}
+                        useNativeAndroidPickerStyle={true}
+                        items={items.filter((icon) => {
+                            return icon.key == cats[selectedValueCat[0] - 1].label
+                           })
+                        } /> : null}
+
+                {value ? <Image style={{ marginLeft: 20 }} source={lmTypes[value].image} />
+                    : null}
+        </View></>
+    )
+    
 }
 
-export default React.memo(LandmarkTypePicker)
+export default React.memo(LandmarkTypePicker)

+ 25 - 21
src/components/Map/Panels/AddLandmarkPanel.tsx

@@ -13,7 +13,7 @@ import { ScrollView } from "react-native-gesture-handler";
 import Modal from 'react-native-modal';
 import Picker from 'react-native-picker-select';
 import { Landmark, LMPhoto, useAddLandmark } from "../../../data/landmarks";
-import { colors, lmTypes as allLmTypes, lmTypesIndoor } from "../../../utils/GlobalUtils";
+import { colors, lmTypes as allLmTypes, lmTypesIndoor, catTypes } from "../../../utils/GlobalUtils";
 import { IconButton, SecondaryButton } from "../../Buttons";
 import { PhotoPicker } from "../../PhotoPicker";
 import TouchOpaq from "./LandmarkDetailsPanel/TouchOpaq";
@@ -26,6 +26,8 @@ import ViewShot, { captureRef, captureScreen } from "react-native-view-shot";
 
 import { useNavigationState } from "@react-navigation/native"
 import LandmarkTypePicker from "../../LandmarkTypePicker";
+import { values } from "mobx";
+import { Icon } from "react-native-paper/lib/typescript/components/Avatar/Avatar";
 
 
 /**
@@ -243,27 +245,29 @@ const AddLandmarkPanel: React.FC<AddLandmarkProps> = ({ newLandmark, setNewLandm
                                         onChangeText={value => setNewLandmark({ ...newLandmark, description: value })}>
                                         {newLandmark?.description}
                                     </TextInput>
-                                    <View style={{ flexDirection: 'row' }}>
-                                        <LandmarkTypePicker 
-                                            placeholder={{ label: "Select a landmark type...", value: 0 }}
-                                            value={newLandmark?.landmark_type}
-                                            onValueChange={(value) => {
-                                                if (value) {
-                                                    setNewLandmark({ ...newLandmark, landmark_type: value, title: lmTypes[value].label })
-                                                }
-                                                else {
-                                                    setNewLandmark({ ...newLandmark, landmark_type: undefined, title: 'no title' })
-                                                }
-                                            }}
-                                            items={Object.keys(lmTypes)?.map(icon => {
-                                                return (
-                                                    { label: lmTypes[parseInt(icon)]?.label.toUpperCase(), value: icon, key: icon }
-                                                )
-                                            })}/>
+                                    <LandmarkTypePicker 
+                                        placeholder={{ label: "Select a landmark type...", value: 0 }}
+                                        value={newLandmark?.landmark_type}
+                                        onValueChange={(value) => {
+                                            if (value) {
+                                                setNewLandmark({ ...newLandmark, landmark_type: value, title: lmTypes[value].label })
+                                            }
+                                            else {
+                                                setNewLandmark({ ...newLandmark, landmark_type: undefined, title: 'no title' })
+                                            }
+                                        }}
+                                        cats={Object.keys(catTypes)?.map(icon => {
+                                            return (
+                                                { label: catTypes[parseInt(icon)]?.cat.toUpperCase(), value: icon, key: icon }
+                                            )
+                                    })}
+                                        items={Object.keys(lmTypes)?.map(icon => {
+                                            return (
+                                                { label: lmTypes[parseInt(icon)]?.label.toUpperCase(), 
+                                                value: icon, key: lmTypes[parseInt(icon)]?.cat.toUpperCase() }
+                                            )
+                                    })}/>
 
-                                        {newLandmark?.landmark_type ? <Image style={{ marginLeft: 20 }} source={lmTypes[newLandmark.landmark_type].image} />
-                                            : null}
-                                    </View>
                                 </View>
                                 {newLandmark?.landmark_type ?
                                     <View style={{ justifyContent: 'flex-end', flexDirection: 'row', paddingHorizontal: 20, marginTop: 5 }}>

+ 31 - 9
src/components/Map/Panels/LandmarkDetailsPanel/DetailsBody.tsx

@@ -17,7 +17,7 @@ import { Landmark, LMPhoto } from "../../../../data/landmarks";
 import MapView, {Marker} from "react-native-maps";
 import { usePermissions } from "../../../../data/PermissionsContext";
 import { MainTabsNavigationProp } from "../../../../navigation/MainTabsNavigator";
-import { lmTypes as allLmTypes, lmTypesIndoor } from "../../../../utils/GlobalUtils";
+import { lmTypes as allLmTypes, lmTypesIndoor, catTypes } from "../../../../utils/GlobalUtils";
 import LandmarkTypePicker from "../../../LandmarkTypePicker";
 import { Separator } from "../../../Separator";
 import { CommentsContainer } from "./CommentsContainer";
@@ -96,9 +96,8 @@ export const DetailsBody: React.FC<DetailsBodyProps> = (props) => {
      * @param 
      */
     const LandmarkTypePickerContainer: React.FC = () => {
-        return (
-        <View style={{flexDirection: 'row', marginBottom: 20, justifyContent: "space-between"}}>
-            {props.updatedLandmark?.landmark_type ? 
+        if (props.updatedLandmark?.landmark_type){
+            return(
             <>
                 <LandmarkTypePicker 
                     placeholder={{}}
@@ -106,15 +105,38 @@ export const DetailsBody: React.FC<DetailsBodyProps> = (props) => {
                     onValueChange={(value) => {
                         props.setUpdatedLandmark({...props.updatedLandmark, landmark_type: value, title: lmTypes[value].label})
                     }}  
+                    cats={Object.keys(lmTypes)?.filter(icon => parseInt(icon) != props.landmark?.landmark_type).map(icon => {
+                        return (
+                            {label: catTypes[parseInt(icon)]?.cat.toUpperCase(), value: icon, key: icon}
+                        )})}
                     items={Object.keys(lmTypes)?.filter(icon => parseInt(icon) != props.landmark?.landmark_type).map(icon => {
                         return (
-                            {label: lmTypes[parseInt(icon)].label.toUpperCase(), value: icon, key: icon}
+                            {label: lmTypes[parseInt(icon)].label.toUpperCase(), value: icon, 
+                                key: lmTypes[parseInt(icon)].cat.toUpperCase()}
                         )})}/>
-                {props.updatedLandmark ? <Image style={{marginLeft: 20}} source={lmTypes[props.updatedLandmark?.landmark_type].image}/> : null}
             </>
-            : null}
-        </View>
-        )
+            )
+        }
+        else return(null)
+        // return (
+        // <View style={{flexDirection: 'row', marginBottom: 20, justifyContent: "space-between"}}>
+        //     {props.updatedLandmark?.landmark_type ? 
+        //     <>
+        //         <LandmarkTypePicker 
+        //             placeholder={{}}
+        //             value={props.updatedLandmark?.landmark_type} 
+        //             onValueChange={(value) => {
+        //                 props.setUpdatedLandmark({...props.updatedLandmark, landmark_type: value, title: lmTypes[value].label})
+        //             }}  
+        //             items={Object.keys(lmTypes)?.filter(icon => parseInt(icon) != props.landmark?.landmark_type).map(icon => {
+        //                 return (
+        //                     {label: lmTypes[parseInt(icon)].label.toUpperCase(), value: icon, key: icon}
+        //                 )})}/>
+        //         {props.updatedLandmark ? <Image style={{marginLeft: 20}} source={lmTypes[props.updatedLandmark?.landmark_type].image}/> : null}
+        //     </>
+        //     : null}
+        // </View>
+        // )
     }
 
     /**

+ 69 - 47
src/utils/GlobalUtils.ts

@@ -18,56 +18,78 @@ export const SECURESTORE_REFRESHTOKEN = "refresh"
 export const SECURESTORE_NOTIFTOKEN = 'notif'
 export const SECURESTORE_IDTOKEN = 'id'
 
-export const lmTypes: {[key: number]: {image: ImageRequireSource, label: string}} = {
-    // 1: {image: require('../../assets/uneven.png'), label: "rough terrain"}, not currently in use
-    2: {image: require('../../assets/stairs.png'), label: "stairs"},
-    3: {image: require('../../assets/barrier.png'), label: "barrier"},
-    4: {image: require('../../assets/uneven.png'), label: "rough terrain"},
-    5: {image: require('../../assets/information.png'), label: "information"},
-    6: {image: require('../../assets/washroom.png'), label: "accessible washroom"},
-    7: {image: require('../../assets/power.png'), label: "power issue"},
-    8: {image: require('../../assets/crosswalk.png'), label: "crosswalk issue"},
-    9: {image: require('../../assets/ice.png'), label: "ice"},
-    14: {image: require('../../assets/ramp.png'), label: "ramp"},
-    16: {image: require('../../assets/childfriendly.png'), label: "child friendly area"},
-    21: {image: require('../../assets/accessibleEntrance.png'), label: 'accessible entrance'},
-    22: {image: require('../../assets/misc.png'), label: 'misc'}
-}
+export const catTypes: {[key: number]: {cat: string}} = {
+    1: {cat: "temporary"},
+    2: {cat: "permanent"},
+    3: {cat: "difficult access"},
+    4: {cat: "accessible"},
+    5: {cat: "unpleasant"},
+    6: {cat: "not in list"}
+} // works for now, but better solution would be to take categories from lmTypes and remove duplicates
 
-export const lmTypesIndoor: {[key: number]: {image: ImageRequireSource, label: string}} = {
-    2: {image: require('../../assets/stairs.png'), label: "stairs"},
-    5: {image: require('../../assets/information.png'), label: "information"},
-    6: {image: require('../../assets/washroom.png'), label: "accessible washroom"},
-    10: {image: require('../../assets/desk.png'), label: "desk"},
-    11: {image: require('../../assets/elevator.png'), label: "elevator"},
-    12: {image: require('../../assets/kiosk.png'), label: "kiosk"},
-    13: {image: require('../../assets/monitor.png'), label: "monitor"},
-    14: {image: require('../../assets/ramp.png'), label: "ramp"},
-    15: {image: require('../../assets/water.png'), label: "water fountain"},
-    16: {image: require('../../assets/childfriendly.png'), label: "child friendly area"},
-    17: {image: require('../../assets/garbage.png'), label: "garbage cans"},
-    18: {image: require('../../assets/loudnoise.png'), label: "loud area"},
-    19: {image: require('../../assets/tripping.png'), label: "tripping hazard"},
-    20: {image: require('../../assets/locator.png'), label: 'locator'},
-    22: {image: require('../../assets/misc.png'), label: 'misc'}
+export const lmTypes: {[key: number]: {image: ImageRequireSource, label: string, cat: string}} = {
+    1: {image: require('../../assets/pothole.png'), label: "pothole", cat: "temporary"}, //done
+    2: {image: require('../../assets/stairs.png'), label: "stairs", cat: "permanent"}, //done
+    3: {image: require('../../assets/barrier.png'), label: "small construction", cat: "temporary"}, //done
+    4: {image: require('../../assets/uneven.png'), label: "rough terrain", cat: "difficult access"}, //done
+    5: {image: require('../../assets/information.png'), label: "information kiosk", cat: "accessible"}, //done
+    6: {image: require('../../assets/washroom.png'), label: "accessible washroom", cat: "accessible"}, //done
+    7: {image: require('../../assets/power.png'), label: "out-of-service", cat: "temporary"}, //done
+    8: {image: require('../../assets/crosswalk.png'), label: "crosswalk issue", cat: "permanent"}, //done
+    9: {image: require('../../assets/ice.png'), label: "ice", cat: "temporary"}, // done
+    10: {image: require('../../assets/barrier.png'), label: "large construction", cat: "temporary"}, //done, check icon
+    11: {image: require('../../assets/tripping.png'), label: "tripping hazard", cat: "temporary"}, //done
+    12: {image: require('../../assets/stairs.png'), label: "non-power door", cat: "permanent"}, //done
+    13: {image: require('../../assets/tripping.png'), label: "tripping hazard", cat: "difficult access"}, //done
+    14: {image: require('../../assets/ramp.png'), label: "ramp", cat: "accessible"}, //done
+    15: {image: require('../../assets/bump.png'), label: "steep incline", cat: "difficult access"}, //done
+    16: {image: require('../../assets/childfriendly.png'), label: "child friendly area", cat: "accessible"}, //done
+    17: {image: require('../../assets/uneven.png'), label: "narrow path", cat: "difficult access"}, //done
+    18: {image: require('../../assets/barrier.png'), label: "height issue", cat: "difficult access"}, //done
+    19: {image: require('../../assets/bump.png'), label: "signage issue", cat: "difficult access"}, //done
+    20: {image: require('../../assets/information.png'), label: 'mobility aid provided', cat: "accessible"}, //done
+    21: {image: require('../../assets/accessibleEntrance.png'), label: 'accessible entrance', cat: "accessible"}, //done
+    22: {image: require('../../assets/misc.png'), label: 'not in list', cat: "not in list"}, //done
+    23: {image: require('../../assets/elevator.png'), label: 'elevator', cat: "accessible"}, //done
+    24: {image: require('../../assets/accessibleEntrance.png'), label: 'power door', cat: "accessible"}, //done
+    25: {image: require('../../assets/desk.png'), label: 'accessible desk', cat: "accessible"}, //done
+    26: {image: require('../../assets/ramp.png'), label: 'curb cut', cat: "accessible"}, //done
+    27: {image: require('../../assets/water.png'), label: 'water fountain', cat: "accessible"}, //done
+    28: {image: require('../../assets/loudnoise.png'), label: 'loud', cat: "unpleasant"}, //done
+    29: {image: require('../../assets/garbage.png'), label: 'stinky', cat: "unpleasant"}, //done
 }
 
-// 2: {image: require('../../assets/stairs.png'), label: "stairs"},
-// 3: {image: require('../../assets/barrier.png'), label: "barrier"},
-// 4: {image: require('../../assets/uneven.png'), label: "rough terrain"},
-// 5: {image: require('../../assets/information.png'), label: "information"},
-// 6: {image: require('../../assets/washroom.png'), label: "accessible washroom"},
-// 7: {image: require('../../assets/power.png'), label: "power issue"},
-// 8: {image: require('../../assets/crosswalk.png'), label: "crosswalk issue"},
-// 9: {image: require('../../assets/ice.png'), label: "ice"},
-// 10: {image: require('../../assets/desk.png'), label: "desk"},
-// 11: {image: require('../../assets/elevator.png'), label: "elevator"},
-// 12: {image: require('../../assets/kiosk.png'), label: "kiosk"},
-// 13: {image: require('../../assets/monitor.png'), label: "monitor"},
-// 14: {image: require('../../assets/ramp.png'), label: "ramp"},
-// 15: {image: require('../../assets/water.png'), label: "water fountain"},
-// 16: {image: require('../../assets/childfriendly.png'), label: "child friendly area"},
-
+export const lmTypesIndoor: {[key: number]: {image: ImageRequireSource, label: string, cat: string}} = {
+    1: {image: require('../../assets/pothole.png'), label: "pothole", cat: "temporary"}, //done
+    2: {image: require('../../assets/stairs.png'), label: "stairs", cat: "permanent"}, //done
+    3: {image: require('../../assets/barrier.png'), label: "small construction", cat: "temporary"}, //done
+    4: {image: require('../../assets/uneven.png'), label: "rough terrain", cat: "difficult access"}, //done
+    5: {image: require('../../assets/information.png'), label: "information kiosk", cat: "accessible"}, //done
+    6: {image: require('../../assets/washroom.png'), label: "accessible washroom", cat: "accessible"}, //done
+    7: {image: require('../../assets/power.png'), label: "out-of-service", cat: "temporary"}, //done
+    8: {image: require('../../assets/crosswalk.png'), label: "crosswalk issue", cat: "permanent"}, //done
+    9: {image: require('../../assets/ice.png'), label: "ice", cat: "temporary"}, // done
+    10: {image: require('../../assets/barrier.png'), label: "large construction", cat: "temporary"}, //done, check icon
+    11: {image: require('../../assets/tripping.png'), label: "tripping hazard", cat: "temporary"}, //done
+    12: {image: require('../../assets/stairs.png'), label: "non-power door", cat: "permanent"}, //done
+    13: {image: require('../../assets/tripping.png'), label: "tripping hazard", cat: "difficult access"}, //done
+    14: {image: require('../../assets/ramp.png'), label: "ramp", cat: "accessible"}, //done
+    15: {image: require('../../assets/bump.png'), label: "steep incline", cat: "difficult access"}, //done
+    16: {image: require('../../assets/childfriendly.png'), label: "child friendly area", cat: "accessible"}, //done
+    17: {image: require('../../assets/uneven.png'), label: "narrow path", cat: "difficult access"}, //done
+    18: {image: require('../../assets/barrier.png'), label: "height issue", cat: "difficult access"}, //done
+    19: {image: require('../../assets/bump.png'), label: "signage issue", cat: "difficult access"}, //done
+    20: {image: require('../../assets/information.png'), label: 'mobility aid provided', cat: "accessible"}, //done
+    21: {image: require('../../assets/accessibleEntrance.png'), label: 'accessible entrance', cat: "accessible"}, //done
+    22: {image: require('../../assets/misc.png'), label: 'not in list', cat: "not in list"}, //done
+    23: {image: require('../../assets/elevator.png'), label: 'elevator', cat: "accessible"}, //done
+    24: {image: require('../../assets/accessibleEntrance.png'), label: 'power door', cat: "accessible"}, //done
+    25: {image: require('../../assets/desk.png'), label: 'accessible desk', cat: "accessible"}, //done
+    26: {image: require('../../assets/ramp.png'), label: 'curb cut', cat: "accessible"}, //done
+    27: {image: require('../../assets/water.png'), label: 'water fountain', cat: "accessible"}, //done
+    28: {image: require('../../assets/loudnoise.png'), label: 'loud', cat: "unpleasant"}, //done
+    29: {image: require('../../assets/garbage.png'), label: 'stinky', cat: "unpleasant"}, //done
+}
 
 export const GlobalStyles = StyleSheet.create({
     itemRowContainer: {

+ 1 - 0
src/utils/RequestUtils.ts

@@ -12,6 +12,7 @@
 // export const API_URL = 'https://staging.clicknpush.ca'
 
 export const API_URL = 'https://app.clicknpush.ca'
+//export const API_URL = 'http://192.168.1.100:8000' // Nathan
 //export const API_URL = 'http://192.168.1.64:8000'   // Chase
 //export const API_URL = 'http://192.168.0.22:8000'       // Eric
 

+ 14 - 13
yarn.lock

@@ -1076,9 +1076,9 @@
     "to-fast-properties" "^2.0.0"
 
 "@callstack/react-theme-provider@^3.0.6":
-  "integrity" "sha512-wwKMXfmklfogpalNZT0W+jh76BIquiYUiQHOaPmt/PCyCEP/E6rP+e7Uie6mBZrfkea9WJYJ+mus6r+45JAEhg=="
-  "resolved" "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.6.tgz"
-  "version" "3.0.6"
+  "integrity" "sha512-Ab6rbD2w4u9W3yf7LQQ8evx9m8fZNsoWxt+MFm3AyZnyKQNCJf4K7ip9tHHZgSs+HTdoj38lEqPehvFOVQKvAg=="
+  "resolved" "https://registry.npmjs.org/@callstack/react-theme-provider/-/react-theme-provider-3.0.7.tgz"
+  "version" "3.0.7"
   dependencies:
     "deepmerge" "^3.2.0"
     "hoist-non-react-statics" "^3.3.0"
@@ -2481,6 +2481,11 @@
   dependencies:
     "flow-bin" "0.113.0"
 
+"@react-native-picker/picker@^1.8.3":
+  "integrity" "sha512-pacdQDX6V6EmjF+HoiIh6u++qx4mTK0WnhgUHRc01B+Qt5eoeUwseBqmqfTSXTx/aHDEd6PiIw7UGvKgFoqgFQ=="
+  "resolved" "https://registry.npmjs.org/@react-native-picker/picker/-/picker-1.16.8.tgz"
+  "version" "1.16.8"
+
 "@react-native-picker/picker@^2.3.0":
   "integrity" "sha512-bdpo8T0Bye0TN+xUIMMgmkFk8jYLxHq1GuBeO9fsLMtElGE9iIDQRe5wbIRIih2w+Iw/t6c8nNCROWEFkjj6Sg=="
   "resolved" "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.3.0.tgz"
@@ -7771,11 +7776,6 @@
     "loader-utils" "^2.0.0"
     "schema-utils" "^2.6.5"
 
-"file-uri-to-path@1.0.0":
-  "integrity" "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
-  "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
-  "version" "1.0.0"
-
 "filesize@6.1.0":
   "integrity" "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg=="
   "resolved" "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz"
@@ -13000,11 +13000,12 @@
   "resolved" "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-3.1.0.tgz"
   "version" "3.1.0"
 
-"react-native-picker-select@^7.0.0":
-  "integrity" "sha512-SO7b7wHfeM07oVTsLhBlT/VDvMXg2aP0Xy5CA+kL7+oV2Bq6nfKTVjpB2+HLVhFik9i/tlq5ROuGdUrfPhl3rg=="
-  "resolved" "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-7.0.0.tgz"
-  "version" "7.0.0"
+"react-native-picker-select@^8.0.0":
+  "integrity" "sha512-orBjPIwBkV5oipyVw263YNMI56f6Kj3p/ejabZoCYYNSG3AiLVVhC2RqsxMgDA7IayyURAW+AlV+mDJyVqLBkg=="
+  "resolved" "https://registry.npmjs.org/react-native-picker-select/-/react-native-picker-select-8.0.4.tgz"
+  "version" "8.0.4"
   dependencies:
+    "@react-native-picker/picker" "^1.8.3"
     "lodash.isequal" "^4.5.0"
 
 "react-native-popup-menu@^0.15.12":
@@ -13234,7 +13235,7 @@
   "resolved" "https://registry.npmjs.org/react-timer-mixin/-/react-timer-mixin-0.13.4.tgz"
   "version" "0.13.4"
 
-"react@*", "react@^16.3.0", "react@^16.8.0 || ^17", "react@^16.8.0 || ^17.0.0", "react@^16.8.6 || ^17.0.0", "react@>= 16.0 || < 18.0", "react@>=16.13.1", "react@>=16.5.1", "react@>=16.8.0", "react@>16.6.0", "react@16 || 17", "react@17.0.1":
+"react@*", "react@^16.8.0 || ^17", "react@^16.8.0 || ^17.0.0", "react@^16.8.6 || ^17.0.0", "react@^17.0.1", "react@>= 16.0 || < 18.0", "react@>=16.13.1", "react@>=16.3.0", "react@>=16.5.1", "react@>=16.8.0", "react@>16.6.0", "react@16 || 17", "react@17.0.1":
   "integrity" "sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w=="
   "resolved" "https://registry.npmjs.org/react/-/react-17.0.1.tgz"
   "version" "17.0.1"