├── .eslintignore ├── .fingerprintignore ├── assets ├── icon.png ├── favicon.png ├── splash.png ├── icons │ ├── gift.png │ └── icon-desert.png ├── images │ ├── desert.png │ ├── hotel.png │ ├── react-blue.png │ ├── react-green.png │ ├── react-logo.png │ ├── react-orange.png │ ├── react-dark-blue.png │ ├── reactlogo-cyan.png │ ├── reactlogo-white.png │ ├── sponsor-abbott.png │ ├── sponsor-amazon.png │ ├── sponsor-amazon.webp │ ├── x.svg │ ├── linkedin.svg │ ├── sponsor-vercel.svg │ ├── sponsor-sentry.svg │ ├── sponsor-mui.svg │ ├── sponsor-expo.svg │ ├── not-found.svg │ ├── meta-logo.svg │ ├── react-logo.svg │ ├── sponsor-abbott.svg │ ├── callstack-logo.svg │ ├── sponsor-remix-spotify.svg │ └── sponsor-redwood.svg ├── bootsplash │ ├── logo.png │ ├── brand.png │ ├── logo@2x.png │ ├── logo@3x.png │ ├── logo@4x.png │ ├── brand@2x.png │ ├── brand@3x.png │ ├── brand@4x.png │ ├── logo@1,5x.png │ ├── brand@1,5x.png │ ├── android │ │ ├── drawable-hdpi │ │ │ ├── bootsplash_logo.png │ │ │ └── bootsplash_brand.png │ │ ├── drawable-mdpi │ │ │ ├── bootsplash_logo.png │ │ │ └── bootsplash_brand.png │ │ ├── drawable-xhdpi │ │ │ ├── bootsplash_brand.png │ │ │ └── bootsplash_logo.png │ │ ├── drawable-xxhdpi │ │ │ ├── bootsplash_logo.png │ │ │ └── bootsplash_brand.png │ │ └── drawable-xxxhdpi │ │ │ ├── bootsplash_brand.png │ │ │ └── bootsplash_logo.png │ ├── ios │ │ ├── Images.xcassets │ │ │ ├── BootSplashLogo-adxe67.imageset │ │ │ │ ├── logo-adxe67.png │ │ │ │ ├── logo-adxe67@2x.png │ │ │ │ ├── logo-adxe67@3x.png │ │ │ │ └── Contents.json │ │ │ └── BootSplashBrand-adxe67.imageset │ │ │ │ ├── brand-adxe67.png │ │ │ │ ├── brand-adxe67@2x.png │ │ │ │ ├── brand-adxe67@3x.png │ │ │ │ └── Contents.json │ │ ├── Colors.xcassets │ │ │ └── BootSplashBackground-adxe67.colorset │ │ │ │ └── Contents.json │ │ └── BootSplash.storyboard │ └── manifest.json ├── icon-android-foreground.png └── fonts │ ├── FreightSansProBlack-Italic.ttf │ ├── FreightSansProBlack-Regular.ttf │ ├── FreightSansProBold-Italic.ttf │ ├── FreightSansProBold-Regular.ttf │ ├── FreightSansProBook-Italic.ttf │ ├── FreightSansProBook-Regular.ttf │ ├── FreightSansProLight-Italic.ttf │ ├── FreightSansProLight-Regular.ttf │ ├── FreightSansProMedium-Italic.ttf │ ├── FreightSansProMedium-Regular.ttf │ ├── FreightSansProSemibold-Italic.ttf │ └── FreightSansProSemibold-Regular.ttf ├── consts.ts ├── declarations.d.ts ├── lib └── react-compiler-runtime │ ├── README.md │ ├── package.json │ └── index.js ├── tsconfig.json ├── .eslintrc.js ├── babel.config.js ├── utils ├── useAppStateEffect.ts ├── openWebBrowserAsync.ts ├── registerForPushNotificationsAsync.ts ├── useQuickActionCallback.ts ├── sessions.ts ├── formatDate.ts ├── sessions.test.ts └── useScrollToTopWithOffset.ts ├── .gitignore ├── scripts └── syncApi.js ├── .github └── workflows │ └── pr-preview.yml ├── types.ts ├── components ├── DiscordInfo.tsx ├── PoweredByExpo.tsx ├── LiveStreamInfo.tsx ├── BackButton.tsx ├── PressableArea.tsx ├── Tags.tsx ├── InfoSection.tsx ├── Heading.tsx ├── IconButton.tsx ├── BuildDetails.tsx ├── ActivityCard.tsx ├── Button.tsx ├── NotFound.tsx ├── TabBarButton.tsx ├── ChangeAppIcon.tsx ├── SpeakerCard.tsx ├── OfflineBanner.tsx ├── TimeZoneSwitch.tsx ├── Themed.tsx ├── VenueInfo.tsx ├── OrganizersInfo.tsx ├── SearchInput.tsx ├── SpeakerImage.tsx ├── Bookmark.tsx ├── MiniTalkCard.tsx ├── AnimatedBootSplash.tsx ├── ReactConfHeader.tsx ├── ExpoImageDemo.tsx ├── TalkCard.tsx └── SponsorsInfo.tsx ├── patches ├── expo-modules-core+1.12.10.patch ├── expo-quick-actions+2.0.0.patch └── react-native-bootsplash+6.0.0-beta.6.patch ├── eas.json ├── store ├── bookmarkStore.ts └── reactConfStore.ts ├── app ├── (tabs) │ ├── speakers │ │ ├── _layout.tsx │ │ └── index.tsx │ ├── info.tsx │ ├── bookmarks.tsx │ └── _layout.tsx ├── secretModal.tsx ├── speaker │ └── [speakerId].tsx └── _layout.tsx ├── theme.ts ├── package.json ├── README.md └── app.config.js /.eslintignore: -------------------------------------------------------------------------------- 1 | ios 2 | android 3 | lib -------------------------------------------------------------------------------- /.fingerprintignore: -------------------------------------------------------------------------------- 1 | node_modules/sharp/**/* 2 | -------------------------------------------------------------------------------- /assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/icon.png -------------------------------------------------------------------------------- /assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/favicon.png -------------------------------------------------------------------------------- /assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/splash.png -------------------------------------------------------------------------------- /assets/icons/gift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/icons/gift.png -------------------------------------------------------------------------------- /assets/images/desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/desert.png -------------------------------------------------------------------------------- /assets/images/hotel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/hotel.png -------------------------------------------------------------------------------- /assets/bootsplash/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/logo.png -------------------------------------------------------------------------------- /assets/bootsplash/brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/brand.png -------------------------------------------------------------------------------- /assets/bootsplash/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/logo@2x.png -------------------------------------------------------------------------------- /assets/bootsplash/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/logo@3x.png -------------------------------------------------------------------------------- /assets/bootsplash/logo@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/logo@4x.png -------------------------------------------------------------------------------- /assets/icons/icon-desert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/icons/icon-desert.png -------------------------------------------------------------------------------- /assets/images/react-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/react-blue.png -------------------------------------------------------------------------------- /assets/images/react-green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/react-green.png -------------------------------------------------------------------------------- /assets/images/react-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/react-logo.png -------------------------------------------------------------------------------- /assets/bootsplash/brand@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/brand@2x.png -------------------------------------------------------------------------------- /assets/bootsplash/brand@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/brand@3x.png -------------------------------------------------------------------------------- /assets/bootsplash/brand@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/brand@4x.png -------------------------------------------------------------------------------- /assets/bootsplash/logo@1,5x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/logo@1,5x.png -------------------------------------------------------------------------------- /assets/images/react-orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/react-orange.png -------------------------------------------------------------------------------- /assets/bootsplash/brand@1,5x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/brand@1,5x.png -------------------------------------------------------------------------------- /assets/icon-android-foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/icon-android-foreground.png -------------------------------------------------------------------------------- /assets/images/react-dark-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/react-dark-blue.png -------------------------------------------------------------------------------- /assets/images/reactlogo-cyan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/reactlogo-cyan.png -------------------------------------------------------------------------------- /assets/images/reactlogo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/reactlogo-white.png -------------------------------------------------------------------------------- /assets/images/sponsor-abbott.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/sponsor-abbott.png -------------------------------------------------------------------------------- /assets/images/sponsor-amazon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/sponsor-amazon.png -------------------------------------------------------------------------------- /assets/images/sponsor-amazon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/images/sponsor-amazon.webp -------------------------------------------------------------------------------- /consts.ts: -------------------------------------------------------------------------------- 1 | export const COLLAPSED_HEADER = 55; 2 | export const EXPANDED_HEADER = 176; 3 | export const ROW_HEIGHT = 55; 4 | -------------------------------------------------------------------------------- /declarations.d.ts: -------------------------------------------------------------------------------- 1 | declare module "react-native-dynamic-app-icon" { 2 | function setAppIcon(iconIndex: stirng): void; 3 | } 4 | -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBlack-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBlack-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBlack-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBlack-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBold-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBold-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBold-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBold-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBook-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBook-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProBook-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProBook-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProLight-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProLight-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProLight-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProLight-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProMedium-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProMedium-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProMedium-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProMedium-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProSemibold-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProSemibold-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/FreightSansProSemibold-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/fonts/FreightSansProSemibold-Regular.ttf -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-hdpi/bootsplash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-hdpi/bootsplash_logo.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-mdpi/bootsplash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-mdpi/bootsplash_logo.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-hdpi/bootsplash_brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-hdpi/bootsplash_brand.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-mdpi/bootsplash_brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-mdpi/bootsplash_brand.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xhdpi/bootsplash_brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xhdpi/bootsplash_brand.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xhdpi/bootsplash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xhdpi/bootsplash_logo.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xxhdpi/bootsplash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xxhdpi/bootsplash_logo.png -------------------------------------------------------------------------------- /lib/react-compiler-runtime/README.md: -------------------------------------------------------------------------------- 1 | # Warning: do not use this! 2 | 3 | It is not meant for usage outside of this React Conf app, and it should not be depended on in your app. -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xxhdpi/bootsplash_brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xxhdpi/bootsplash_brand.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xxxhdpi/bootsplash_brand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xxxhdpi/bootsplash_brand.png -------------------------------------------------------------------------------- /assets/bootsplash/android/drawable-xxxhdpi/bootsplash_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/android/drawable-xxxhdpi/bootsplash_logo.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "expo/tsconfig.base", 3 | "compilerOptions": { 4 | "strict": true, 5 | "paths": { 6 | "@/*": [ 7 | "./*" 8 | ] 9 | } 10 | }, 11 | } 12 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://docs.expo.dev/guides/using-eslint/ 2 | module.exports = { 3 | extends: ["expo", "prettier"], 4 | plugins: ["prettier"], 5 | rules: { 6 | "prettier/prettier": "error", 7 | }, 8 | }; 9 | -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67.png -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67.png -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67@2x.png -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/brand-adxe67@3x.png -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67@2x.png -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sync/react-conf-app/main/assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/logo-adxe67@3x.png -------------------------------------------------------------------------------- /assets/bootsplash/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "background": "#091725", 3 | "logo": { 4 | "width": 192, 5 | "height": 192 6 | }, 7 | "brand": { 8 | "bottom": 76.5, 9 | "width": 150, 10 | "height": 47 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/react-compiler-runtime/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-forget-runtime", 3 | "version": "0.0.1", 4 | "description": "Runtime for React Forget", 5 | "license": "MIT", 6 | "main": "index.js", 7 | "dependencies": { 8 | "react": "^18.2.0" 9 | } 10 | } -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function (api) { 2 | api.cache(true); 3 | return { 4 | presets: ["babel-preset-expo"], 5 | plugins: [ 6 | [ 7 | "babel-plugin-react-compiler", 8 | { 9 | runtimeModule: "react-compiler-runtime", 10 | }, 11 | ], 12 | ], 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /assets/images/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/bootsplash/ios/Colors.xcassets/BootSplashBackground-adxe67.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors": [ 3 | { 4 | "idiom": "universal", 5 | "color": { 6 | "color-space": "srgb", 7 | "components": { 8 | "blue": "0.145098039215686", 9 | "green": "0.0901960784313725", 10 | "red": "0.0352941176470588", 11 | "alpha": "1.000" 12 | } 13 | } 14 | } 15 | ], 16 | "info": { 17 | "author": "xcode", 18 | "version": 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashLogo-adxe67.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "logo-adxe67.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "logo-adxe67@2x.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "logo-adxe67@3x.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "author": "xcode", 21 | "version": 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /assets/bootsplash/ios/Images.xcassets/BootSplashBrand-adxe67.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "universal", 5 | "filename": "brand-adxe67.png", 6 | "scale": "1x" 7 | }, 8 | { 9 | "idiom": "universal", 10 | "filename": "brand-adxe67@2x.png", 11 | "scale": "2x" 12 | }, 13 | { 14 | "idiom": "universal", 15 | "filename": "brand-adxe67@3x.png", 16 | "scale": "3x" 17 | } 18 | ], 19 | "info": { 20 | "author": "xcode", 21 | "version": 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /utils/useAppStateEffect.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { AppState, AppStateStatus } from "react-native"; 3 | 4 | export function useAppStateEffect(callback: (state: AppStateStatus) => void) { 5 | useEffect(() => { 6 | function onChange(newState: AppStateStatus) { 7 | callback(newState); 8 | } 9 | 10 | const subscription = AppState.addEventListener("change", onChange); 11 | 12 | // Fire initial state 13 | onChange(AppState.currentState); 14 | 15 | return () => { 16 | subscription.remove(); 17 | }; 18 | }, [callback]); 19 | } 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files 2 | 3 | # dependencies 4 | node_modules/ 5 | 6 | # Expo 7 | .expo/ 8 | dist/ 9 | web-build/ 10 | 11 | # Native 12 | *.orig.* 13 | *.jks 14 | *.p8 15 | *.p12 16 | *.key 17 | *.mobileprovision 18 | 19 | # Metro 20 | .metro-health-check* 21 | 22 | # debug 23 | npm-debug.* 24 | yarn-debug.* 25 | yarn-error.* 26 | 27 | # macOS 28 | .DS_Store 29 | *.pem 30 | 31 | # local env files 32 | .env*.local 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | 37 | # ignoring as we're using CNG 38 | /ios 39 | /android 40 | -------------------------------------------------------------------------------- /scripts/syncApi.js: -------------------------------------------------------------------------------- 1 | const fs = require("node:fs"); 2 | 3 | async function fetchAndSync(url, filePath) { 4 | const result = await fetch(url); 5 | const data = await result.json(); 6 | 7 | fs.writeFile(filePath, JSON.stringify(data, null, " "), (err) => { 8 | if (err) { 9 | console.info(`❌ error updating ${filePath}`); 10 | console.error(err); 11 | } else { 12 | console.info(`✅ ${filePath} updated`); 13 | } 14 | }); 15 | } 16 | 17 | (async () => { 18 | await fetchAndSync( 19 | "https://sessionize.com/api/v2/ctta9bhe/view/All", 20 | "./data/allSessions.json", 21 | ); 22 | })(); 23 | -------------------------------------------------------------------------------- /lib/react-compiler-runtime/index.js: -------------------------------------------------------------------------------- 1 | // lib/react-compiler-runtime.js 2 | const $empty = Symbol.for("react.memo_cache_sentinel"); 3 | /** 4 | * DANGER: this hook is NEVER meant to be called directly! 5 | * 6 | * Note that this is a temporary userspace implementation of this function 7 | * from React 19. It is not as efficient and may invalidate more frequently 8 | * than the official API. Please upgrade to React 19 as soon as you can. 9 | **/ 10 | export function c(size: number) { 11 | return React.useState(() => { 12 | const $ = new Array(size); 13 | for (let ii = 0; ii < size; ii++) { 14 | $[ii] = $empty; 15 | } 16 | // @ts-ignore 17 | $[$empty] = true; 18 | return $; 19 | })[0]; 20 | } 21 | -------------------------------------------------------------------------------- /utils/openWebBrowserAsync.ts: -------------------------------------------------------------------------------- 1 | import * as WebBrowser from "expo-web-browser"; 2 | import { Appearance } from "react-native"; 3 | 4 | import { theme } from "@/theme"; 5 | 6 | export default function openBrowserAsync(url: string) { 7 | const colorScheme = Appearance.getColorScheme(); 8 | 9 | WebBrowser.openBrowserAsync(url, { 10 | enableBarCollapsing: true, 11 | ...(colorScheme === "dark" 12 | ? { 13 | // Optional: we could match this to theme 14 | toolbarColor: theme.colorDarkestBlue, 15 | controlsColor: "#fff", 16 | } 17 | : { 18 | // Optional: we could match this to theme 19 | controlsColor: theme.colorReactDarkBlue, 20 | }), 21 | }); 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/pr-preview.yml: -------------------------------------------------------------------------------- 1 | on: [pull_request] 2 | jobs: 3 | preview: 4 | runs-on: ubuntu-latest 5 | steps: 6 | - name: 🏗 Setup repo 7 | uses: actions/checkout@v3 8 | 9 | - name: 🏗 Setup Node 10 | uses: actions/setup-node@v3 11 | with: 12 | node-version: 18.x 13 | cache: yarn 14 | 15 | - name: 🏗 Setup EAS 16 | uses: expo/expo-github-action@v8 17 | with: 18 | eas-version: latest 19 | token: ${{ secrets.EXPO_TOKEN }} 20 | 21 | - name: 📦 Install dependencies 22 | run: yarn install 23 | 24 | - name: 🚀 Create preview 25 | uses: expo/expo-github-action/preview@v8 26 | with: 27 | command: eas update --auto 28 | -------------------------------------------------------------------------------- /assets/images/linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /types.ts: -------------------------------------------------------------------------------- 1 | import { allSessions } from "@/utils/testData/allSessions"; 2 | 3 | export type Session = { 4 | id: string; 5 | title: string; 6 | description: string | null; 7 | startsAt: string; 8 | endsAt: string; 9 | speakers: Speaker[]; 10 | room: string; 11 | isServiceSession: boolean; 12 | }; 13 | 14 | export type Speaker = { 15 | id: string; 16 | firstName: string; 17 | lastName: string; 18 | bio: string | null; 19 | tagLine: string | null; 20 | profilePicture: string | null; 21 | links: { title: string; url: string; linkType: string }[]; 22 | sessions: number[]; 23 | fullName: string; 24 | categoryItems: number[]; 25 | }; 26 | 27 | export type ApiAllSessions = typeof allSessions; 28 | 29 | export type ApiSpeaker = (typeof allSessions)["speakers"][number]; 30 | -------------------------------------------------------------------------------- /components/DiscordInfo.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from "./Button"; 2 | import { InfoSection } from "./InfoSection"; 3 | import { ThemedText } from "./Themed"; 4 | import * as Linking from "expo-linking"; 5 | 6 | import { theme } from "@/theme"; 7 | 8 | export function DiscordInfo() { 9 | const handlePress = () => { 10 | Linking.openURL("https://discord.gg/reactconf"); 11 | }; 12 | 13 | return ( 14 | 15 | 16 | Chat with other folks at the conference on the React Conf 2024 Discord 17 | server. Coordinate around ridesharing and external activities. 18 | 19 |