-
Notifications
You must be signed in to change notification settings - Fork 960
feat(mobile): build out barebones mobile app #843
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
075b4b0
10faa5e
4cedfd9
b32082d
8e6ff07
0fd60be
dc78444
bd31ab5
8140bb2
1c6a3fc
32b7a61
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| # Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files | ||
|
|
||
| # dependencies | ||
| node_modules/ | ||
|
|
||
| # Expo | ||
| .expo/ | ||
| dist/ | ||
| web-build/ | ||
| expo-env.d.ts | ||
|
|
||
| # Native | ||
| .kotlin/ | ||
| *.orig.* | ||
| *.jks | ||
| *.p8 | ||
| *.p12 | ||
| *.key | ||
| *.mobileprovision | ||
|
|
||
| # Metro | ||
| .metro-health-check* | ||
|
|
||
| # debug | ||
| npm-debug.* | ||
| yarn-debug.* | ||
| yarn-error.* | ||
|
|
||
| # macOS | ||
| .DS_Store | ||
| *.pem | ||
|
|
||
| # local env files | ||
| .env*.local | ||
|
|
||
| # typescript | ||
| *.tsbuildinfo | ||
|
|
||
| # generated native folders | ||
| /ios | ||
| /android |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,45 @@ | ||||||
| { | ||||||
| "expo": { | ||||||
| "name": "Superset", | ||||||
| "slug": "superset", | ||||||
| "version": "1.0.0", | ||||||
| "orientation": "portrait", | ||||||
| "icon": "./assets/icon.png", | ||||||
| "userInterfaceStyle": "light", | ||||||
| "newArchEnabled": true, | ||||||
| "scheme": "superset", | ||||||
| "splash": { | ||||||
| "image": "./assets/splash-icon.png", | ||||||
| "resizeMode": "contain", | ||||||
| "backgroundColor": "#ffffff" | ||||||
| }, | ||||||
| "ios": { | ||||||
| "supportsTablet": true, | ||||||
| "bundleIdentifier": "sh.superset.mobile", | ||||||
| "infoPlist": { | ||||||
| "ITSAppUsesNonExemptEncryption": false | ||||||
| } | ||||||
| }, | ||||||
| "android": { | ||||||
| "adaptiveIcon": { | ||||||
| "foregroundImage": "./assets/adaptive-icon.png", | ||||||
| "backgroundColor": "#ffffff" | ||||||
| }, | ||||||
| "package": "sh.superset.mobile", | ||||||
| "edgeToEdgeEnabled": true, | ||||||
| "predictiveBackGestureEnabled": false | ||||||
| }, | ||||||
| "web": { | ||||||
| "favicon": "./assets/favicon.png", | ||||||
| "bundler": "metro" | ||||||
| }, | ||||||
| "plugins": ["expo-router"], | ||||||
| "extra": { | ||||||
| "router": {}, | ||||||
| "eas": { | ||||||
| "projectId": "fa9332a8-896a-4d2a-be5b-d82469b46e5d" | ||||||
| } | ||||||
| }, | ||||||
| "owner": "supserset-sh" | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Typo in the The owner is set to 🔤 Proposed fix- "owner": "supserset-sh"
+ "owner": "superset-sh"📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||
| } | ||||||
| } | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| import { Redirect } from "expo-router"; | ||
| import { useSession } from "@/lib/auth/client"; | ||
| import SignInScreen from "@/screens/(auth)/sign-in"; | ||
|
|
||
| export default function SignInRoute() { | ||
| const { data: session } = useSession(); | ||
|
|
||
| if (session) { | ||
| return <Redirect href="/" />; | ||
| } | ||
|
|
||
| return <SignInScreen />; | ||
|
Comment on lines
+5
to
+12
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🌐 Web query:
💡 Result: Summary — useSession loading status
Sources
Do you want the exact code snippet from the docs or links to the issues? Citations:
🏁 Script executed: # Search for useSession usage in the codebase
rg "useSession" --type tsx --type ts -B 2 -A 5Repository: superset-sh/superset Length of output: 91 🏁 Script executed: # Look for isPending usage specifically
rg "isPending" --type tsx --type ts -B 2 -A 2Repository: superset-sh/superset Length of output: 91 🏁 Script executed: # Check if there are other auth route files for comparison
fd "auth|sign" --type f -e tsx -e tsRepository: superset-sh/superset Length of output: 897 🏁 Script executed: # Search for useSession usage
rg "useSession" -B 2 -A 5Repository: superset-sh/superset Length of output: 16935 🏁 Script executed: # Search for isPending usage
rg "isPending" -B 2 -A 2Repository: superset-sh/superset Length of output: 47630 🏁 Script executed: # Read the sign-in route file
cat -n apps/mobile/app/\(auth\)/sign-in.tsxRepository: superset-sh/superset Length of output: 458 🏁 Script executed: # Read the SignInScreen component
cat -n apps/mobile/screens/\(auth\)/sign-in/SignInScreen.tsxRepository: superset-sh/superset Length of output: 2794 Gate on The const { data: session, isPending } = useSession();
if (isPending) {
return null; // or a loading indicator
}
if (session) {
return <Redirect href="/" />;
}
return <SignInScreen />;The desktop app implements this pattern correctly in 🤖 Prompt for AI Agents |
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| import "../global.css"; | ||
| import { PortalHost } from "@rn-primitives/portal"; | ||
| import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; | ||
| import { Stack } from "expo-router"; | ||
|
|
||
| const queryClient = new QueryClient(); | ||
|
|
||
| export default function RootLayout() { | ||
| return ( | ||
| <QueryClientProvider client={queryClient}> | ||
| <Stack screenOptions={{ headerShown: false }} /> | ||
| <PortalHost /> | ||
| </QueryClientProvider> | ||
| ); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| import { Redirect } from "expo-router"; | ||
| import { useSession } from "@/lib/auth/client"; | ||
| import HomeScreen from "@/screens/index"; | ||
|
|
||
| export default function RootIndex() { | ||
| const { data: session } = useSession(); | ||
|
|
||
| if (!session) { | ||
| return <Redirect href="/(auth)/sign-in" />; | ||
| } | ||
|
|
||
| return <HomeScreen />; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| module.exports = (api) => { | ||
| api.cache(true); | ||
| return { | ||
| presets: ["babel-preset-expo"], | ||
| }; | ||
| }; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| { | ||
| "$schema": "https://rnr.chat/schema.json", | ||
| "style": "default", | ||
| "rsc": false, | ||
| "tsx": true, | ||
| "tailwind": { | ||
| "config": "tailwind.config.js", | ||
| "css": "global.css", | ||
| "baseColor": "neutral", | ||
| "cssVariables": true | ||
| }, | ||
|
Comment on lines
+6
to
+11
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Verify tailwind.config.js exists in apps/mobile/
fd -t f "tailwind.config" apps/mobile/
# Also check for CSS-based Tailwind config
if [ -f "apps/mobile/global.css" ]; then
echo "=== global.css content (first 30 lines) ==="
cat apps/mobile/global.css | head -30
else
echo "global.css not found"
fi
# Check directory structure of apps/mobile
echo "=== apps/mobile/ directory structure ==="
fd -t f . apps/mobile/ -x basename {} | head -20Repository: superset-sh/superset Length of output: 1342 Remove or update the The 🤖 Prompt for AI Agents |
||
| "aliases": { | ||
| "components": "@/components", | ||
| "utils": "@/lib/utils", | ||
| "ui": "@/components/ui", | ||
| "lib": "@/lib", | ||
| "hooks": "@/hooks" | ||
| }, | ||
| "iconLibrary": "lucide-react-native" | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
npm view `@types/react-dom`@19.2.3 peerDependenciesRepository: superset-sh/superset
Length of output: 93
Align
@types/reactwith@types/react-dompeer requirements.@types/react-dom@^19.2.3requires@types/react^19.2.0, but it's pinned to~19.1.0. This creates a peer dependency conflict and can break type compatibility.🐛 Suggested fix
📝 Committable suggestion
🤖 Prompt for AI Agents