|
@@ -1,52 +1,35 @@
|
|
|
import { SQLiteDatabase } from 'expo-sqlite';
|
|
|
|
|
|
export const getData = async (
|
|
|
- db: SQLiteDatabase | null,
|
|
|
- regionId: number,
|
|
|
- name: string,
|
|
|
+ db: SQLiteDatabase | null,
|
|
|
+ regionId: number,
|
|
|
+ name: string,
|
|
|
callback: (data: any, avatars: string[]) => void
|
|
|
-) => {
|
|
|
- return new Promise<void>((resolve, reject) => {
|
|
|
- db?.transaction(tx => {
|
|
|
- tx.executeSql(
|
|
|
- `SELECT * FROM ${name} WHERE id = ${regionId};`,
|
|
|
- [],
|
|
|
- (_, { rows }) => {
|
|
|
- const regionData = rows._array[0];
|
|
|
-
|
|
|
- const avatarPromises = regionData?.visitors_avatars
|
|
|
- ? JSON.parse(regionData.visitors_avatars)?.map((avatarId: number) => {
|
|
|
- return new Promise<string>((resolveAvatar, rejectAvatar) => {
|
|
|
- tx.executeSql(
|
|
|
- `SELECT * FROM avatars WHERE id = ${avatarId};`,
|
|
|
- [],
|
|
|
- (_, { rows }) => resolveAvatar(rows._array[0].data),
|
|
|
- (_, error) => {
|
|
|
- console.error('error', error);
|
|
|
- rejectAvatar(error);
|
|
|
- return false;
|
|
|
- }
|
|
|
- );
|
|
|
- });
|
|
|
- })
|
|
|
- : [];
|
|
|
-
|
|
|
- Promise.all(avatarPromises)
|
|
|
- .then(avatars => {
|
|
|
- callback(regionData, avatars);
|
|
|
- resolve();
|
|
|
- })
|
|
|
- .catch(error => {
|
|
|
- console.error('Error processing avatars', error);
|
|
|
- reject(error);
|
|
|
- });
|
|
|
- },
|
|
|
- (_, error) => {
|
|
|
- console.error('error', error);
|
|
|
- reject(error);
|
|
|
- return false;
|
|
|
- }
|
|
|
- );
|
|
|
- });
|
|
|
- });
|
|
|
+): Promise<void> => {
|
|
|
+ if (!db) throw new Error('Database is null');
|
|
|
+
|
|
|
+ try {
|
|
|
+ const regionRows = await db.getAllAsync<any>(`SELECT * FROM ${name} WHERE id = ?;`, [regionId]);
|
|
|
+
|
|
|
+ const regionData = regionRows[0] ?? null;
|
|
|
+
|
|
|
+ const avatarIds: number[] = regionData?.visitors_avatars
|
|
|
+ ? JSON.parse(regionData.visitors_avatars)
|
|
|
+ : [];
|
|
|
+
|
|
|
+ const avatars: string[] = [];
|
|
|
+ for (const avatarId of avatarIds) {
|
|
|
+ const avatarRows = await db.getAllAsync<any>(`SELECT * FROM avatars WHERE id = ?;`, [
|
|
|
+ avatarId
|
|
|
+ ]);
|
|
|
+ if (avatarRows.length > 0) {
|
|
|
+ avatars.push(avatarRows[0].data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ setTimeout(() => callback(regionData, avatars), 0);
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error in getData:', error);
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
};
|