feat: integrate mobile template with backend, add /mobile path routing and Todo dashboard

This commit is contained in:
Plena Finance Dev
2026-07-09 11:36:45 +05:30
parent 420b803cc0
commit 1a5028b8f3
20 changed files with 1021 additions and 0 deletions

23
mobile/utils/api.ts Normal file
View File

@@ -0,0 +1,23 @@
export function getApiUrl(path: string): string {
const cleanPath = path.startsWith('/') ? path : `/${path}`;
if (typeof window !== 'undefined' && window.location) {
const origin = window.location.origin;
// Local Expo dev server direct port
if (origin.includes(':8081')) {
return `http://localhost:8080/api${cleanPath}`;
}
// Deployed Modal Sandbox direct port
if (origin.includes('-8081.modal.run')) {
const backendOrigin = origin.replace('-8081.modal.run', '-8080.modal.run');
return `${backendOrigin}/api${cleanPath}`;
}
// Relative path works when accessed via port 5173 /mobile proxy
return `/api${cleanPath}`;
}
// Fallback for native devices
const baseUrl = process.env.EXPO_PUBLIC_API_URL || 'http://localhost:8080/api';
return `${baseUrl}${cleanPath}`;
}

View File

@@ -0,0 +1,31 @@
import 'react-native-get-random-values';
import 'react-native-url-polyfill/auto';
import { Buffer } from 'buffer';
if (typeof global !== 'undefined') {
if (typeof global.Buffer === 'undefined') {
global.Buffer = Buffer;
}
} else if (typeof window !== 'undefined') {
if (typeof (window as any).Buffer === 'undefined') {
(window as any).Buffer = Buffer;
}
}
const { getRandomValues } = require('react-native-get-random-values');
if (typeof global !== 'undefined') {
if (typeof global.crypto === 'undefined') {
(global as any).crypto = {
getRandomValues: getRandomValues,
};
}
} else if (typeof window !== 'undefined') {
if (typeof window.crypto === 'undefined') {
(window as any).crypto = {
getRandomValues: getRandomValues,
};
}
}
export {};