From d19066812e27f9988e0d6a2dd618d5632daf8825 Mon Sep 17 00:00:00 2001 From: Jonas Braathen Date: Thu, 30 Jul 2026 00:31:17 +0200 Subject: [PATCH] Replace @expo/vector-icons with @react-native-vector-icons, switch icon for event list items --- README.md | 7 -- app.json | 3 +- package-lock.json | 155 ++++++++++++++++++++++++++++--- package.json | 2 +- src/modules/events/EventList.tsx | 5 +- 5 files changed, 149 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4de70e4..9a04b83 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,6 @@ history, code and binary blobs related to React Native functionality filtered ou - privacy policy - delete my account - ??? -- test in android emulator? (`npm run android`) - test in ios emulator? (`npm run ios`, requires macOS) - use [Expo Application Services](https://expo.dev/eas) to build and submit app to stores - replace redux (`redux` v5 + `redux-thunk`, hand-written actions and the deprecated @@ -85,8 +84,6 @@ history, code and binary blobs related to React Native functionality filtered ou commented-out init in `index.ts`), and its config plugin (now applied via `app.json`) warns about missing `organization`/`project` at every build — either finish the setup or drop the dependency - - verify Android UI on a device/emulator: edge-to-edge is now always enabled and can no - longer be disabled - try the [React Compiler](https://docs.expo.dev/guides/react-compiler/) (enabled by default in new SDK 54 projects, opt-in for existing ones via `"experiments": { "reactCompiler": true }` in `app.json`) @@ -97,10 +94,6 @@ history, code and binary blobs related to React Native functionality filtered ou (now stable) so `npm run android`/`ios` can download a cached build instead of compiling locally when the native fingerprint is unchanged - follow-ups from the [Expo SDK 56 upgrade](https://expo.dev/changelog/sdk-56): - - replace the deprecated `@expo/vector-icons` with the scoped - [`@react-native-vector-icons`](https://github.com/oblador/react-native-vector-icons) packages - (`npx @react-native-vector-icons/codemod`) — only `SimpleLineIcons` in - `src/modules/events/EventList.tsx` uses it, yet it ships ~3.5 MB of fonts into every export - try [`@expo/ui`](https://docs.expo.dev/versions/latest/sdk/ui/), production-ready as of SDK 56: real SwiftUI / Jetpack Compose components that could back the homegrown ones in `src/components/` and finally retire `react-native-simple-radio-button` diff --git a/app.json b/app.json index 8264926..fe68075 100644 --- a/app.json +++ b/app.json @@ -55,7 +55,8 @@ "resizeMode": "contain", "backgroundColor": "#E5E2D7" } - ] + ], + "@react-native-vector-icons/feather" ], "extra": { "eas": { diff --git a/package-lock.json b/package-lock.json index 80ce73a..aad251b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,8 @@ "dependencies": { "@apollo/client": "^3.14.1", "@date-fns/tz": "^1.5.0", - "@expo/vector-icons": "^15.0.3", "@react-native-async-storage/async-storage": "2.2.0", + "@react-native-vector-icons/feather": "^13.1.2", "@react-navigation/bottom-tabs": "^7.4.7", "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.26", @@ -2026,17 +2026,6 @@ "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", "license": "MIT" }, - "node_modules/@expo/vector-icons": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-15.1.1.tgz", - "integrity": "sha512-Iu2VkcoI5vygbtYngm7jb4ifxElNVXQYdDrYkT7UCEIiKLeWnQY0wf2ZhHZ+Wro6Sc5TaumpKUOqDRpLi5rkvw==", - "license": "MIT", - "peerDependencies": { - "expo-font": ">=14.0.4", - "react": "*", - "react-native": "*" - } - }, "node_modules/@expo/ws-tunnel": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-2.0.0.tgz", @@ -2718,6 +2707,136 @@ "react-native": "^0.0.0-0 || >=0.65 <1.0" } }, + "node_modules/@react-native-vector-icons/feather": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/feather/-/feather-13.1.2.tgz", + "integrity": "sha512-4wICYvJ+wF5ERKyVWpie+DFEZ6Jr2541T6E+EtVTEqdubxEjK2/RS9qtEU758BktlPlJUrAoZeW6Fl/iUKf0Vg==", + "license": "MIT", + "dependencies": { + "@react-native-vector-icons/common": "^13.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "@expo/config-plugins": ">=10.0.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@expo/config-plugins": { + "optional": true + } + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/@react-native-vector-icons/common": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@react-native-vector-icons/common/-/common-13.0.1.tgz", + "integrity": "sha512-UPC6L3tW5rXCjBn4kgw9RPURUILIg8tFpEY2uaYwU8aCjEHkywNCMcAO8+PvMCDkR6aICPeHYA0OXvMgrjsF4g==", + "license": "MIT", + "dependencies": { + "find-up": "^8.0.0", + "picocolors": "^1.1.1", + "plist": "^3.1.0" + }, + "bin": { + "rnvi-update-plist": "lib/commonjs/scripts/updatePlist.js" + }, + "engines": { + "node": ">=20.19.0 <21.0.0 || >=22.0.0" + }, + "peerDependencies": { + "@react-native-vector-icons/get-image": "^13.0.0", + "@react-native/assets-registry": "*", + "expo-font": "*", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@react-native-vector-icons/get-image": { + "optional": true + }, + "@react-native/assets-registry": { + "optional": true + }, + "expo-font": { + "optional": true + } + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/find-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-8.0.0.tgz", + "integrity": "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==", + "license": "MIT", + "dependencies": { + "locate-path": "^8.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/locate-path": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-8.0.0.tgz", + "integrity": "sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-native-vector-icons/feather/node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@react-native/assets-registry": { "version": "0.86.0", "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.86.0.tgz", @@ -15379,6 +15498,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", diff --git a/package.json b/package.json index 54c5771..3dc611d 100644 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ "dependencies": { "@apollo/client": "^3.14.1", "@date-fns/tz": "^1.5.0", - "@expo/vector-icons": "^15.0.3", "@react-native-async-storage/async-storage": "2.2.0", + "@react-native-vector-icons/feather": "^13.1.2", "@react-navigation/bottom-tabs": "^7.4.7", "@react-navigation/native": "^7.1.17", "@react-navigation/native-stack": "^7.3.26", diff --git a/src/modules/events/EventList.tsx b/src/modules/events/EventList.tsx index 87ab235..5e8d4a5 100644 --- a/src/modules/events/EventList.tsx +++ b/src/modules/events/EventList.tsx @@ -1,5 +1,5 @@ import { TZDate } from '@date-fns/tz'; -import { SimpleLineIcons as Icon } from '@expo/vector-icons'; +import Icon from '@react-native-vector-icons/feather/static'; import { format, parseISO } from 'date-fns'; import { nb } from 'date-fns/locale'; import React from 'react'; @@ -50,7 +50,7 @@ const EventList = () => { )} - + @@ -138,6 +138,7 @@ const styles = StyleSheet.create({ arrow: { flex: 1, alignItems: 'flex-end', + justifyContent: 'center', }, row: { flex: 1, flexDirection: 'row' }, });