feat: complete all screens - client tabs, payments list, remittance detail, new ticket, installations tab

- Client detail: Subscription/Invoices/Payments tabs now fully functional
- Payments: proper list with today's total + live search prefill from client
- Record payment: debounced live search, reference required for non-cash
- Remittances: detail screen with included payments breakdown
- Tickets: status filter chips + create button, new ticket with categories
- Installations: tab now visible with list + confirm flow
- Fix: remove duplicate @react-navigation/elements causing Metro asset error
- Fix: metro.config.js asset resolution from node_modules
This commit is contained in:
Nemo
2026-03-23 21:22:57 +08:00
parent 8f5027413c
commit baed6dc8d5
18 changed files with 1685 additions and 665 deletions

39
types/expo-modules.d.ts vendored Normal file
View File

@@ -0,0 +1,39 @@
declare module 'expo-image-picker' {
export function requestCameraPermissionsAsync(): Promise<{ status: string }>;
export function launchCameraAsync(options?: {
quality?: number;
base64?: boolean;
allowsEditing?: boolean;
}): Promise<{ canceled: boolean; assets: Array<{ uri: string; base64?: string }> }>;
export function launchImageLibraryAsync(options?: {
quality?: number;
base64?: boolean;
mediaTypes?: string;
}): Promise<{ canceled: boolean; assets: Array<{ uri: string; base64?: string }> }>;
}
declare module 'expo-location' {
export enum Accuracy {
Lowest = 1,
Low = 2,
Balanced = 3,
High = 4,
Highest = 5,
BestForNavigation = 6,
}
export function requestForegroundPermissionsAsync(): Promise<{ status: string }>;
export function getCurrentPositionAsync(options?: {
accuracy?: Accuracy;
}): Promise<{
coords: {
latitude: number;
longitude: number;
altitude: number | null;
accuracy: number;
altitudeAccuracy: number | null;
heading: number | null;
speed: number | null;
};
timestamp: number;
}>;
}