diff --git a/android/app/src/main/assets/fonts/INatIcon.ttf b/android/app/src/main/assets/fonts/INatIcon.ttf index 92c325b69..5893d49bb 100644 Binary files a/android/app/src/main/assets/fonts/INatIcon.ttf and b/android/app/src/main/assets/fonts/INatIcon.ttf differ diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json index 8b12586a6..f4479335d 100644 --- a/android/link-assets-manifest.json +++ b/android/link-assets-manifest.json @@ -3,7 +3,7 @@ "data": [ { "path": "assets/fonts/INatIcon.ttf", - "sha1": "2691c217d3dfbcba545ce985c306fa93f9610606" + "sha1": "fe95cee7255fc1323f469c2d76d483925a0b4eef" }, { "path": "assets/fonts/Whitney-BookItalic-Pro.otf", @@ -19,7 +19,7 @@ }, { "path": "assets/fonts/inaturalisticons.ttf", - "sha1": "d5a9b116c0d7857ec446f4f045fe5316196d22ec" + "sha1": "177ae18eacc4a277489677b4abdc441b4487df13" } ] } diff --git a/assets/fonts/INatIcon.ttf b/assets/fonts/INatIcon.ttf index 92c325b69..5893d49bb 100644 Binary files a/assets/fonts/INatIcon.ttf and b/assets/fonts/INatIcon.ttf differ diff --git a/e2e/signIn.e2e.js b/e2e/signIn.e2e.js index 1030af652..b72bcc213 100644 --- a/e2e/signIn.e2e.js +++ b/e2e/signIn.e2e.js @@ -47,7 +47,7 @@ describe( "Sign into app as logged-in user", () => { const loginButton = element( by.id( "Login.loginButton" ) ); await expect( loginButton ).toBeVisible(); await element( by.id( "Login.loginButton" ) ).tap(); - const username = element( by.text( `@${Config.E2E_TEST_USERNAME}` ) ); + const username = element( by.text( `@${Config.E2E_TEST_USERNAME}` ) ).atIndex( 1 ); await waitFor( username ).toBeVisible().withTimeout( 10000 ); await expect( username ).toBeVisible(); } ); diff --git a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj index 406e38088..315d21f75 100644 --- a/ios/iNaturalistReactNative.xcodeproj/project.pbxproj +++ b/ios/iNaturalistReactNative.xcodeproj/project.pbxproj @@ -8,14 +8,14 @@ /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* iNaturalistReactNativeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* iNaturalistReactNativeTests.m */; }; - 015B74B1048846199E2104BF /* INatIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C9904C04E3DD410FA07BB0A1 /* INatIcon.ttf */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 374CB22F29943E63005885ED /* Whitney-BookItalic-Pro.otf in Resources */ = {isa = PBXBuildFile; fileRef = 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */; }; + 4FB3B444D46A4115B867B9CC /* inaturalisticons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE004FD2EC174086A7AB2908 /* inaturalisticons.ttf */; }; + 78D1665778AF449EA28D8F35 /* INatIcon.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 30806DE4AD83423EB6F3DCF6 /* INatIcon.ttf */; }; 7F29616A6267D5F6EC5F67B7 /* libPods-iNaturalistReactNative.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B935DA49196EBFE90895C8DD /* libPods-iNaturalistReactNative.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - 862E651A41DD461AAE4331B2 /* inaturalisticons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 142B10AEC7284E94AE0D2300 /* inaturalisticons.ttf */; }; 8B65ED3129F575C10054CCEF /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8B65ED2F29F575C10054CCEF /* MainInterface.storyboard */; }; 8B65ED3529F575C10054CCEF /* iNaturalistReactNative-ShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 8B65ED2B29F575C10054CCEF /* iNaturalistReactNative-ShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 8B65ED3B29F575FE0054CCEF /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B65ED3A29F575FE0054CCEF /* ShareViewController.swift */; }; @@ -66,8 +66,8 @@ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iNaturalistReactNative/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iNaturalistReactNative/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iNaturalistReactNative/main.m; sourceTree = ""; }; - 142B10AEC7284E94AE0D2300 /* inaturalisticons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = inaturalisticons.ttf; path = ../assets/fonts/inaturalisticons.ttf; sourceTree = ""; }; 19A5877328F8E3310016D128 /* iNaturalistReactNative-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "iNaturalistReactNative-Bridging-Header.h"; sourceTree = ""; }; + 30806DE4AD83423EB6F3DCF6 /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = ""; }; 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "Whitney-BookItalic-Pro.otf"; path = "../assets/fonts/Whitney-BookItalic-Pro.otf"; sourceTree = ""; }; 52305C33CFC262F17ADC692E /* Pods-iNaturalistReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative.release.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative/Pods-iNaturalistReactNative.release.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = iNaturalistReactNative/LaunchScreen.storyboard; sourceTree = ""; }; @@ -82,10 +82,10 @@ ADBDD0D061046941F61CA31D /* libPods-iNaturalistReactNative-ShareExtension.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iNaturalistReactNative-ShareExtension.a"; sourceTree = BUILT_PRODUCTS_DIR; }; B935DA49196EBFE90895C8DD /* libPods-iNaturalistReactNative.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-iNaturalistReactNative.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BA9D41ECEBFA4C38B74009B3 /* Whitney-Light-Pro.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Whitney-Light-Pro.otf"; path = "../assets/fonts/Whitney-Light-Pro.otf"; sourceTree = ""; }; - C9904C04E3DD410FA07BB0A1 /* INatIcon.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = INatIcon.ttf; path = ../assets/fonts/INatIcon.ttf; sourceTree = ""; }; D09FA3A0162844FF80A5EF96 /* Whitney-Medium-Pro.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Whitney-Medium-Pro.otf"; path = "../assets/fonts/Whitney-Medium-Pro.otf"; sourceTree = ""; }; DEB901D3F8FB2DAE1CCED0CC /* Pods-iNaturalistReactNative-ShareExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-iNaturalistReactNative-ShareExtension.release.xcconfig"; path = "Target Support Files/Pods-iNaturalistReactNative-ShareExtension/Pods-iNaturalistReactNative-ShareExtension.release.xcconfig"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + EE004FD2EC174086A7AB2908 /* inaturalisticons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = inaturalisticons.ttf; path = ../assets/fonts/inaturalisticons.ttf; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -220,8 +220,8 @@ BA9D41ECEBFA4C38B74009B3 /* Whitney-Light-Pro.otf */, D09FA3A0162844FF80A5EF96 /* Whitney-Medium-Pro.otf */, 374CB22E29943E63005885ED /* Whitney-BookItalic-Pro.otf */, - 142B10AEC7284E94AE0D2300 /* inaturalisticons.ttf */, - C9904C04E3DD410FA07BB0A1 /* INatIcon.ttf */, + 30806DE4AD83423EB6F3DCF6 /* INatIcon.ttf */, + EE004FD2EC174086A7AB2908 /* inaturalisticons.ttf */, ); name = Resources; sourceTree = ""; @@ -349,8 +349,8 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, A252B2AEA64E47C9AC1D20E8 /* Whitney-Light-Pro.otf in Resources */, BA2479FA3D7B40A7BEF7B3CD /* Whitney-Medium-Pro.otf in Resources */, - 862E651A41DD461AAE4331B2 /* inaturalisticons.ttf in Resources */, - 015B74B1048846199E2104BF /* INatIcon.ttf in Resources */, + 78D1665778AF449EA28D8F35 /* INatIcon.ttf in Resources */, + 4FB3B444D46A4115B867B9CC /* inaturalisticons.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/iNaturalistReactNative/Info.plist b/ios/iNaturalistReactNative/Info.plist index fd6e7f5a4..c12837fd9 100644 --- a/ios/iNaturalistReactNative/Info.plist +++ b/ios/iNaturalistReactNative/Info.plist @@ -49,8 +49,8 @@ Whitney-Light-Pro.otf Whitney-Medium-Pro.otf Whitney-BookItalic-Pro.otf - inaturalisticons.ttf INatIcon.ttf + inaturalisticons.ttf UILaunchStoryboardName LaunchScreen @@ -72,15 +72,15 @@ UIViewControllerBasedStatusBarAppearance CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - inaturalistmobile - - - + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + inaturalistmobile + + + diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json index 8b12586a6..f4479335d 100644 --- a/ios/link-assets-manifest.json +++ b/ios/link-assets-manifest.json @@ -3,7 +3,7 @@ "data": [ { "path": "assets/fonts/INatIcon.ttf", - "sha1": "2691c217d3dfbcba545ce985c306fa93f9610606" + "sha1": "fe95cee7255fc1323f469c2d76d483925a0b4eef" }, { "path": "assets/fonts/Whitney-BookItalic-Pro.otf", @@ -19,7 +19,7 @@ }, { "path": "assets/fonts/inaturalisticons.ttf", - "sha1": "d5a9b116c0d7857ec446f4f045fe5316196d22ec" + "sha1": "177ae18eacc4a277489677b4abdc441b4487df13" } ] } diff --git a/src/components/Camera/StandardCamera.js b/src/components/Camera/StandardCamera.js index ff1802cfb..03873a1d2 100644 --- a/src/components/Camera/StandardCamera.js +++ b/src/components/Camera/StandardCamera.js @@ -467,7 +467,7 @@ const StandardCamera = ( ): Node => { testID="camera-button-label-switch-camera" width="100%" height="100%" - whiteBackground + backgroundColor={colors.white} /> ) diff --git a/src/components/CustomDrawerContent.js b/src/components/CustomDrawerContent.js index 2965b66bc..80fc749cd 100644 --- a/src/components/CustomDrawerContent.js +++ b/src/components/CustomDrawerContent.js @@ -4,9 +4,21 @@ import { DrawerContentScrollView, DrawerItem } from "@react-navigation/drawer"; +import { + Body1, + INatIconButton, + List2, + UserIcon +} from "components/SharedComponents"; +import { View } from "components/styledComponents"; import type { Node } from "react"; import React from "react"; -import useCurrentUser from "sharedHooks/useCurrentUser"; +import { Dimensions, Platform } from "react-native"; +import { useTheme } from "react-native-paper"; +import User from "realmModels/User"; +import { BREAKPOINTS } from "sharedHelpers/breakpoint"; +import { useCurrentUser, useTranslation } from "sharedHooks"; +import colors from "styles/tailwindColors"; type Props = { state: any, @@ -14,47 +26,189 @@ type Props = { descriptors: any } +const { width, height } = Dimensions.get( "screen" ); + const CustomDrawerContent = ( { ...props }: Props ): Node => { // $FlowFixMe const { state, navigation, descriptors } = props; const currentUser = useCurrentUser( ); + const theme = useTheme( ); + const { t } = useTranslation( ); + + const labelStyle = { + fontSize: 16, + lineHeight: 19.2, + letterSpacing: 2, + fontFamily: `Whitney-Light${Platform.OS === "ios" + ? "" + : "-Pro"}`, + color: theme.colors.primary, + fontWeight: "700", + textAlign: "left", + textAlignVertical: "center", + marginLeft: -20 + }; + + const drawerItemStyle = { + marginBottom: width <= BREAKPOINTS.lg + ? -15 + : -5 + }; + + const drawerItems = { + search: { + label: t( "SEARCH" ), + navigation: "search", + icon: "magnifying-glass" + }, + identify: { + label: t( "IDENTIFY" ), + navigation: "Identify", + icon: "label", + loggedInOnly: true + }, + projects: { + label: t( "PROJECTS" ), + navigation: "Projects", + icon: "briefcase" + }, + help: { + label: t( "HELP" ), + navigation: "Help", + icon: "help" + }, + blog: { + label: t( "BLOG" ), + navigation: "Blog", + icon: "laptop" + }, + about: { + label: t( "ABOUT" ), + navigation: "about", + icon: "inaturalist" + }, + donate: { + label: t( "DONATE" ), + navigation: "Donate", + icon: "heart" + }, + settings: { + label: t( "SETTINGS" ), + navigation: "settings", + icon: "gear", + loggedInOnly: true + }, + // the following two are only for development mode, + // and should not be included in future app store releases + network: { + label: t( "NETWORK" ), + navigation: "network", + icon: "help" + }, + uiLibrary: { + label: t( "UI-LIBRARY" ), + navigation: "UI Library", + icon: "help" + }, + login: { + label: currentUser + ? t( "LOG-OUT" ) + : t( "LOG-IN" ), + navigation: "Login", + icon: "door-exit", + loggedInOnly: true + } + }; + + const renderIcon = item => { + let color = null; + let backgroundColor = null; + + if ( item === "help" ) { + color = colors.white; + backgroundColor = colors.darkGray; + } + return ( + + ); + }; + + const drawerScrollViewStyle = { + backgroundColor: "white", + borderTopRightRadius: 20, + borderBottomRightRadius: 20, + height + }; return ( - - navigation.navigate( "search" )} - /> - navigation.navigate( "Identify" )} - /> - navigation.navigate( "Projects" )} - /> - navigation.navigate( "about" )} - /> - navigation.navigate( "settings" )} - /> - navigation.navigate( "network" )} - /> - navigation.navigate( "UI Library" )} - /> - navigation.navigate( "Login" )} - /> + + + {currentUser + ? ( + + ) + : ( + navigation.navigate( "Login" )} + /> + ) } + + { + if ( !currentUser ) { + navigation.navigate( "Login" ); + } + }} + > + {currentUser + ? User.userHandle( currentUser ) + : t( "Log-in-to-iNaturalist" )} + + {currentUser && ( + + {t( "X-Observations", { count: currentUser.observations_count } )} + + )} + + + + {Object.keys( drawerItems ).map( item => { + if ( drawerItems[item].loggedInOnly && !currentUser ) { + return null; + } + return ( + navigation.navigate( drawerItems[item].navigation )} + labelStyle={labelStyle} + icon={( ) => renderIcon( item )} + // eslint-disable-next-line react-native/no-inline-styles + style={{ + ...drawerItemStyle, + opacity: ( item === "login" ) + ? 0.5 + : 1 + }} + /> + ); + } )} + ); }; diff --git a/src/components/SharedComponents/Buttons/INatIconButton.js b/src/components/SharedComponents/Buttons/INatIconButton.js index 215fdaedc..0ac3d925f 100644 --- a/src/components/SharedComponents/Buttons/INatIconButton.js +++ b/src/components/SharedComponents/Buttons/INatIconButton.js @@ -6,6 +6,7 @@ import type { Node } from "react"; import React from "react"; import { Pressable } from "react-native"; import { useTheme } from "react-native-paper"; +import colors from "styles/tailwindColors"; type Props = { accessibilityLabel?: string, @@ -17,9 +18,9 @@ type Props = { style?: Object, testID?: string, width?: number, - // Inserts a white view under the icon so an holes in the shape show as + // Inserts a white or colored view under the icon so an holes in the shape show as // white - whiteBackground?: boolean + backgroundColor?: string } const MIN_ACCESSIBLE_DIM = 44; @@ -37,9 +38,10 @@ const INatIconButton = ( { style, testID, width = 44, - whiteBackground + backgroundColor }: Props ): Node => { const theme = useTheme( ); + const isWhite = backgroundColor === colors.white; // width || 0 is to placate flow. width should never be undefined because of // the defaultProps, but I guess flow can't figure that out. if ( ( width || 0 ) < MIN_ACCESSIBLE_DIM ) { @@ -72,17 +74,25 @@ const INatIconButton = ( { testID={testID} > - { whiteBackground && ( + { backgroundColor && ( diff --git a/src/components/SharedComponents/INatIcon/glyphmap.json b/src/components/SharedComponents/INatIcon/glyphmap.json index 00c36edde..3bd392d02 100644 --- a/src/components/SharedComponents/INatIcon/glyphmap.json +++ b/src/components/SharedComponents/INatIcon/glyphmap.json @@ -11,71 +11,77 @@ "arrow-up": 61706, "binoculars": 61707, "book": 61708, - "camera": 61709, - "check": 61710, - "checkmark-circle-outline": 61711, - "checkmark-circle": 61712, - "chevron-left-circle": 61713, - "chevron-left": 61714, - "chevron-right-circle": 61715, - "circle-dots": 61716, - "clock-outline": 61717, - "close-bold": 61718, - "close": 61719, - "comments-outline": 61720, - "comments": 61721, - "compass-rose-outline": 61722, - "copyright": 61723, - "crop": 61724, - "flag": 61725, - "flash-off": 61726, - "flash-on": 61727, - "flip": 61728, - "gallery": 61729, - "globe-outline": 61730, - "grid-square": 61731, - "grid": 61732, - "hamburger-menu": 61733, - "help-circle-outline": 61734, - "help": 61735, - "id-agree": 61736, - "inaturalist": 61737, - "info-circle-outline": 61738, - "kebab-menu": 61739, - "label-outline": 61740, - "label": 61741, - "layers": 61742, - "leaf": 61743, - "list-square": 61744, - "location-crosshairs": 61745, - "magnifying-glass": 61746, - "map-marker-outline": 61747, - "microphone-circle": 61748, - "microphone": 61749, - "noevidence": 61750, - "notifications-bell": 61751, - "pause-circle": 61752, - "pencil-outline": 61753, - "pencil": 61754, - "person": 61755, - "photos-outline": 61756, - "photos": 61757, - "play-circle": 61758, - "play": 61759, - "plus-bold": 61760, - "plus": 61761, - "pot-outline": 61762, - "rotate-exclamation": 61763, - "rotate-right": 61764, - "rotate": 61765, - "sliders": 61766, - "sound-bold-outline": 61767, - "sound-outline": 61768, - "sounds": 61769, - "sparkly-label": 61770, - "star-bold-outline": 61771, - "star": 61772, - "trash-outline": 61773, - "trash": 61774, - "triangle-exclamation": 61775 + "briefcase": 61709, + "camera": 61710, + "check": 61711, + "checkmark-circle-outline": 61712, + "checkmark-circle": 61713, + "chevron-left-circle": 61714, + "chevron-left": 61715, + "chevron-right-circle": 61716, + "circle-dots": 61717, + "clock-outline": 61718, + "close-bold": 61719, + "close": 61720, + "comments-outline": 61721, + "comments": 61722, + "compass-rose-outline": 61723, + "copyright": 61724, + "crop": 61725, + "door-exit": 61726, + "flag": 61727, + "flash-off": 61728, + "flash-on": 61729, + "flip": 61730, + "gallery": 61731, + "gear": 61732, + "globe-outline": 61733, + "grid-square": 61734, + "grid": 61735, + "hamburger-menu": 61736, + "heart": 61737, + "help-circle-outline": 61738, + "help-circle": 61739, + "help": 61740, + "id-agree": 61741, + "inaturalist": 61742, + "info-circle-outline": 61743, + "kebab-menu": 61744, + "label-outline": 61745, + "label": 61746, + "laptop": 61747, + "layers": 61748, + "leaf": 61749, + "list-square": 61750, + "location-crosshairs": 61751, + "magnifying-glass": 61752, + "map-marker-outline": 61753, + "microphone-circle": 61754, + "microphone": 61755, + "noevidence": 61756, + "notifications-bell": 61757, + "pause-circle": 61758, + "pencil-outline": 61759, + "pencil": 61760, + "person": 61761, + "photos-outline": 61762, + "photos": 61763, + "play-circle": 61764, + "play": 61765, + "plus-bold": 61766, + "plus": 61767, + "pot-outline": 61768, + "rotate-exclamation": 61769, + "rotate-right": 61770, + "rotate": 61771, + "sliders": 61772, + "sound-bold-outline": 61773, + "sound-outline": 61774, + "sounds": 61775, + "sparkly-label": 61776, + "star-bold-outline": 61777, + "star": 61778, + "trash-outline": 61779, + "trash": 61780, + "triangle-exclamation": 61781 } \ No newline at end of file diff --git a/src/i18n/l10n/en.ftl b/src/i18n/l10n/en.ftl index 492fbe5cb..a4ecf19c8 100644 --- a/src/i18n/l10n/en.ftl +++ b/src/i18n/l10n/en.ftl @@ -678,6 +678,8 @@ Saved-Observation = Saved observation, in queue to upload Saved-Observation = Saved observation, in queue to upload +SEARCH = SEARCH + Search-for-a-location = Search for a location Search-for-a-project = Search for a project @@ -1169,3 +1171,12 @@ Please-click-the-link = Please click the link in the email within 60 minutes to # Title for dialog telling the user that an Internet connection is required Internet-Connection-Required = Internet Connection Required Please-try-again-when-you-are-connected-to-the-internet=Please try again when you are connected to the Internet. + +IDENTIFY = IDENTIFY +PROJECTS = PROJECTS +HELP = HELP +BLOG = BLOG +DONATE = DONATE +SETTINGS = SETTINGS +LOG-OUT = LOG OUT +Log-in-to-iNaturalist = Log in to iNaturalist \ No newline at end of file diff --git a/src/i18n/l10n/en.ftl.json b/src/i18n/l10n/en.ftl.json index 75eb73917..8beeae335 100644 --- a/src/i18n/l10n/en.ftl.json +++ b/src/i18n/l10n/en.ftl.json @@ -407,6 +407,7 @@ "SAVE-ALL": "SAVE ALL", "SAVE-CHANGES": "SAVE CHANGES", "Saved-Observation": "Saved observation, in queue to upload", + "SEARCH": "SEARCH", "Search-for-a-location": "Search for a location", "Search-for-a-project": "Search for a project", "Search-for-a-taxon": "Search for a taxon", @@ -802,5 +803,12 @@ "comment": "Title for dialog telling the user that an Internet connection is required", "val": "Internet Connection Required" }, - "Please-try-again-when-you-are-connected-to-the-internet": "Please try again when you are connected to the Internet." + "Please-try-again-when-you-are-connected-to-the-internet": "Please try again when you are connected to the Internet.", + "IDENTIFY": "IDENTIFY", + "HELP": "HELP", + "BLOG": "BLOG", + "DONATE": "DONATE", + "SETTINGS": "SETTINGS", + "LOG-OUT": "LOG OUT", + "Log-in-to-iNaturalist": "Log in to iNaturalist" } diff --git a/src/i18n/strings.ftl b/src/i18n/strings.ftl index 492fbe5cb..a4ecf19c8 100644 --- a/src/i18n/strings.ftl +++ b/src/i18n/strings.ftl @@ -678,6 +678,8 @@ Saved-Observation = Saved observation, in queue to upload Saved-Observation = Saved observation, in queue to upload +SEARCH = SEARCH + Search-for-a-location = Search for a location Search-for-a-project = Search for a project @@ -1169,3 +1171,12 @@ Please-click-the-link = Please click the link in the email within 60 minutes to # Title for dialog telling the user that an Internet connection is required Internet-Connection-Required = Internet Connection Required Please-try-again-when-you-are-connected-to-the-internet=Please try again when you are connected to the Internet. + +IDENTIFY = IDENTIFY +PROJECTS = PROJECTS +HELP = HELP +BLOG = BLOG +DONATE = DONATE +SETTINGS = SETTINGS +LOG-OUT = LOG OUT +Log-in-to-iNaturalist = Log in to iNaturalist \ No newline at end of file diff --git a/src/images/icons/briefcase.svg b/src/images/icons/briefcase.svg new file mode 100644 index 000000000..723ab4e94 --- /dev/null +++ b/src/images/icons/briefcase.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/door-exit.svg b/src/images/icons/door-exit.svg new file mode 100644 index 000000000..b9d7e00e7 --- /dev/null +++ b/src/images/icons/door-exit.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/gear.svg b/src/images/icons/gear.svg new file mode 100644 index 000000000..520b666b1 --- /dev/null +++ b/src/images/icons/gear.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/heart.svg b/src/images/icons/heart.svg new file mode 100644 index 000000000..63ac439c3 --- /dev/null +++ b/src/images/icons/heart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/help-circle.svg b/src/images/icons/help-circle.svg new file mode 100644 index 000000000..c2312e799 --- /dev/null +++ b/src/images/icons/help-circle.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/icons/laptop.svg b/src/images/icons/laptop.svg new file mode 100644 index 000000000..a73e9e8df --- /dev/null +++ b/src/images/icons/laptop.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/navigation/BottomTabNavigator/index.js b/src/navigation/BottomTabNavigator/index.js index 329cb4933..10f6ef202 100644 --- a/src/navigation/BottomTabNavigator/index.js +++ b/src/navigation/BottomTabNavigator/index.js @@ -367,6 +367,19 @@ const BottomTabs = ( ) => { + + + + ); diff --git a/src/navigation/rootDrawerNavigation.js b/src/navigation/rootDrawerNavigation.js index 840027ada..8c6d097ee 100644 --- a/src/navigation/rootDrawerNavigation.js +++ b/src/navigation/rootDrawerNavigation.js @@ -12,7 +12,11 @@ import BottomTabNavigator from "./BottomTabNavigator"; const drawerOptions = { ...showHeader, // this removes the default hamburger menu from header - headerLeft: ( ) => + headerLeft: ( ) => , + drawerType: "front", + drawerStyle: { + backgroundColor: "transparent" + } }; const Drawer = createDrawerNavigator( ); diff --git a/tests/unit/components/SharedComponents/ActivityCount/__snapshots__/ActivityCount.test.js.snap b/tests/unit/components/SharedComponents/ActivityCount/__snapshots__/ActivityCount.test.js.snap index 489fc2d05..1f703563a 100644 --- a/tests/unit/components/SharedComponents/ActivityCount/__snapshots__/ActivityCount.test.js.snap +++ b/tests/unit/components/SharedComponents/ActivityCount/__snapshots__/ActivityCount.test.js.snap @@ -36,7 +36,7 @@ exports[`ActivityCount renders reliably 1`] = ` ] } > -  +  - -  - - - 1 - - -`; - -exports[`CommentsCount renders filled reliably 1`] = ` `; +exports[`CommentsCount renders filled reliably 1`] = ` + + +  + + + 1 + + +`; + exports[`CommentsCount renders white reliably 1`] = ` -  +  -  +  -  +  -  +  -  +  diff --git a/tests/unit/components/SharedComponents/InlineUser/__snapshots__/InlineUser.test.js.snap b/tests/unit/components/SharedComponents/InlineUser/__snapshots__/InlineUser.test.js.snap index f12b296a9..ba20cca70 100644 --- a/tests/unit/components/SharedComponents/InlineUser/__snapshots__/InlineUser.test.js.snap +++ b/tests/unit/components/SharedComponents/InlineUser/__snapshots__/InlineUser.test.js.snap @@ -174,7 +174,7 @@ exports[`InlineUser when offline renders reliably 1`] = ` } testID="InlineUser.NoInternetPicture" > -  +  -  +  -  +  diff --git a/tests/unit/components/__snapshots__/INatIcon.test.js.snap b/tests/unit/components/__snapshots__/INatIcon.test.js.snap index c9e9c87a2..dfae288d0 100644 --- a/tests/unit/components/__snapshots__/INatIcon.test.js.snap +++ b/tests/unit/components/__snapshots__/INatIcon.test.js.snap @@ -20,6 +20,6 @@ exports[`INatIcon renders correctly 1`] = ` ] } > -  +  `;