From 4862975402088152900f8c2dac001fd0477135ee Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Thu, 19 Feb 2026 14:06:02 +0800 Subject: [PATCH 1/9] Ringkasan Perubahan File yang Dimodifikasi: 1. `service/api-admin/api-admin-investment.ts` - Tambah parameter page untuk pagination 2. `app/(application)/admin/investment/[id]/list-of-investor.tsx` - Clean route file File Baru: 3. `screens/Admin/Investment/ScreenInvestmentListOfInvestor.tsx` - Screen component dengan pagination 4. `screens/Admin/Investment/BoxInvestmentListOfInvestor.tsx` - Box component untuk list item ### No Issue --- QWEN.md | 518 ++++++++++++------ app/(application)/(user)/home.tsx | 16 +- .../admin/investment/[id]/[status]/index.tsx | 14 +- .../[id]/[status]/transaction-detail.tsx | 2 +- .../investment/[id]/list-of-investor.tsx | 194 +------ .../admin/investment/[status]/status.tsx | 112 +--- docs/prompt-for-qwen-code.md | 23 +- screens/Admin/Donation/BoxDonationStatus.tsx | 2 +- .../BoxInvestmentListOfInvestor.tsx | 63 +++ .../Admin/Investment/BoxInvestmentStatus.tsx | 54 ++ .../ScreenInvestmentListOfInvestor.tsx | 132 +++++ .../Investment/ScreenInvestmentStatus.tsx | 109 ++++ screens/Admin/listPageAdmin.tsx | 40 +- service/api-admin/api-admin-investment.ts | 18 +- 14 files changed, 789 insertions(+), 508 deletions(-) create mode 100644 screens/Admin/Investment/BoxInvestmentListOfInvestor.tsx create mode 100644 screens/Admin/Investment/BoxInvestmentStatus.tsx create mode 100644 screens/Admin/Investment/ScreenInvestmentListOfInvestor.tsx create mode 100644 screens/Admin/Investment/ScreenInvestmentStatus.tsx diff --git a/QWEN.md b/QWEN.md index cdaccdf..de3f5de 100644 --- a/QWEN.md +++ b/QWEN.md @@ -2,56 +2,68 @@ ## Project Overview -HIPMI Mobile is a cross-platform mobile application built with Expo and React Native. The application is named "HIPMI Badung Connect" and serves as a platform for the HIPMI (Himpunan Pengusaha dan Pengusaha Indonesia) Badung chapter. It's designed to run on iOS, Android, and web platforms using a single codebase. +HIPMI Mobile is a cross-platform mobile application built with Expo and React Native. The application is named **"HIPMI Badung Connect"** and serves as a platform for the HIPMI (Himpunan Pengusaha dan Pengusaha Indonesia) Badung chapter. It's designed to run on iOS, Android, and web platforms using a single codebase. ### Key Technologies -- **Framework**: Expo (v54.0.0) with React Native (v0.81.4) +- **Framework**: Expo (v54.0.0) with React Native (v0.81.5) - **Language**: TypeScript - **Architecture**: File-based routing with Expo Router -- **State Management**: Context API +- **State Management**: Context API (AuthContext) - **UI Components**: React Native Paper, custom components - **Maps Integration**: Mapbox Maps for React Native - **Push Notifications**: React Native Firebase Messaging - **Build System**: Metro bundler +- **Package Manager**: Bun ### Project Structure ``` hipmi-mobile/ -├── app/ # Main application screens and routing +├── app/ # Main application screens and routing (Expo Router) │ ├── _layout.tsx # Root layout component │ ├── index.tsx # Entry point (Login screen) -│ └── ... +│ └── (application)/ # Main app screens +│ ├── admin/ # Admin panel screens +│ ├── (user)/ # User screens +│ └── ... ├── components/ # Reusable UI components +│ ├── _ShareComponent/ # Shared components (NewWrapper, Admin components) +│ ├── _Icon/ # Icon components +│ └── ... ├── context/ # State management (AuthContext) ├── screens/ # Screen components organized by feature │ ├── Admin/ # Admin panel screens +│ │ ├── Donation/ # Donation management screens +│ │ ├── Voting/ # Voting management screens +│ │ ├── Event/ # Event management screens +│ │ └── ... │ ├── Authentication/ # Login, registration flows -│ ├── Collaboration/ # Collaboration features -│ ├── Event/ # Event management -│ ├── Forum/ # Forum functionality -│ ├── Home/ # Home screen -│ ├── Maps/ # Map integration -│ ├── Profile/ # User profile +│ ├── RootLayout/ # Root layout components │ └── ... -├── assets/ # Images, icons, and static assets -├── constants/ # Constants and configuration values -├── helpers/ # Helper functions (pagination, etc.) -├── hooks/ # Custom React hooks -├── lib/ # Utility libraries -├── navigation/ # Navigation configuration ├── service/ # API services and business logic +│ ├── api-admin/ # Admin API endpoints +│ ├── api-client/ # Client API endpoints +│ └── api-config.ts # Axios configuration +├── hooks/ # Custom React hooks +│ ├── use-pagination.tsx # Pagination hook +│ └── ... +├── helpers/ # Helper functions +│ ├── paginationHelpers.tsx # Pagination UI helpers +│ └── ... ├── types/ # TypeScript type definitions -└── utils/ # Helper functions +├── utils/ # Utility functions +├── constants/ # Constants and configuration values +├── styles/ # Global styles +├── assets/ # Images, icons, and static assets +└── docs/ # Documentation files ``` ## Building and Running ### Prerequisites -- Node.js (with bun as the package manager) -- Expo CLI -- iOS Simulator or Android Emulator (for native builds) -- Android Studio (for Android builds) -- Xcode (for iOS builds, macOS only) +- **Node.js**: v18+ with Bun package manager +- **Expo CLI**: Installed globally or via npx +- **iOS**: Xcode (macOS only) for iOS simulator/builds +- **Android**: Android Studio for Android emulator/builds ### Setup and Development @@ -63,16 +75,27 @@ hipmi-mobile/ 2. **Run Development Server** ```bash bun run start - ``` - Or use the shorthand: - ```bash + # or bunx expo start ``` 3. **Platform-Specific Commands** - - iOS: `bun run ios` or `bunx expo start --ios` - - Android: `bun run android` or `bunx expo start --android` - - Web: `bun run web` or `bunx expo start --web` + ```bash + # iOS Simulator + bun run ios + # or + bunx expo start --ios + + # Android Emulator + bun run android + # or + bunx expo start --android + + # Web Browser + bun run web + # or + bunx expo start --web + ``` 4. **Linting** ```bash @@ -83,13 +106,13 @@ hipmi-mobile/ #### EAS Build (Production) ```bash -# Production build +# Production build (App Store / Play Store) eas build --profile production -# Preview build +# Preview build (Internal distribution) eas build --profile preview -# Development build +# Development build (Development client) eas build --profile development ``` @@ -100,7 +123,7 @@ npx expo prebuild # iOS specific bunx expo prebuild --platform ios -open ios/HIPMIBADUNG.xcworkspace +open ios/HIPMIBadungConnect.xcworkspace # Android specific bunx expo prebuild --platform android @@ -110,6 +133,12 @@ bunx expo prebuild --platform android ```bash # Patch version update npm version patch + +# Update iOS build number +bunx expo prebuild --platform ios + +# Update Android version code +bunx expo prebuild --platform android ``` ### Android Debugging @@ -126,157 +155,336 @@ adb -s install android/app/build/outputs/apk/debug/app-debug.apk ## Environment Variables -The application uses environment variables defined in the `app.config.js` file: -- `API_BASE_URL`: Base URL for API endpoints -- `BASE_URL`: Base application URL -- `DEEP_LINK_URL`: URL for deep linking functionality +Create a `.env` file in the project root with: -Create a `.env` file in the project root with these variables. +```env +API_BASE_URL=https://your-api-base-url.com +BASE_URL=https://your-app-url.com +DEEP_LINK_URL=hipmimobile:// +``` -## EAS Build Configuration +These are loaded in `app.config.js` and accessible via `Constants.expoConfig.extra`. -The project uses Expo Application Services (EAS) for building and deploying: -- **Development**: Development builds with development client -- **Preview**: Internal distribution builds (APK for Android) -- **Production**: App store builds (App Bundle for Android, IPA for iOS) +## Architecture Patterns -Configuration is in `eas.json`. +### 1. Separation of Concerns -## Features and Functionality +**Route Files** (`app/`) should be minimal (max 5 lines): +```typescript +import { Admin_ScreenXXX } from "@/screens/Admin/XXX/ScreenXXX"; -The application includes several key modules: -- **Authentication**: Login with phone number, OTP verification, registration, terms acceptance -- **Admin Panel**: Administrative functions for managing content and users -- **Collaboration**: Tools for member collaboration -- **Events**: Event management and calendar -- **Forum**: Discussion forums -- **Maps**: Location-based services with Mapbox integration -- **Donations**: Donation functionality with fund disbursement tracking -- **Job Board**: Employment opportunities -- **Investment**: Investment-related features -- **Voting**: Voting systems -- **Portfolio**: Member portfolio showcase -- **Notifications**: Push notifications via Firebase +export default function AdminXXX() { + return ; +} +``` + +**Screen Components** (`screens/`) contain all business logic: +```typescript +export function Admin_ScreenXXX() { + // Logic, hooks, state management + return ; +} +``` + +### 2. Pagination Pattern + +Using `usePagination` hook with infinite scroll: + +```typescript +const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiXXX({ page: String(page) }); + if (response.success) { + return { data: response.data }; + } + return { data: [] }; + }, + pageSize: PAGINATION_DEFAULT_TAKE, // 10 + searchQuery: search, + dependencies: [dependency], +}); + +const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + emptyMessage: "Belum ada data", + skeletonCount: PAGINATION_DEFAULT_TAKE, + }); +``` + +### 3. Wrapper Components + +**NewWrapper** (preferred for lists): +```typescript +} +/> +``` + +**AdminBasicBox** (for card layouts): +```typescript + router.push(`/path/${item.id}`)} + style={{ marginHorizontal: 10, marginVertical: 5 }} +> + + Value} /> + + +``` + +### 4. API Service Structure + +```typescript +// service/api-admin/api-xxx.ts +export async function apiXXX({ page = "1" }: { page?: string }) { + try { + const response = await apiConfig.get(`/mobile/admin/xxx?page=${page}`); + return response.data; + } catch (error) { + throw error; + } +} +``` + +**Important**: All list APIs should support pagination with `page` parameter (default: "1"). + +### 5. Authentication Flow + +Managed by `AuthContext`: +- `loginWithNomor()` - Send phone number, receive OTP +- `validateOtp()` - Validate OTP, get token +- `registerUser()` - Register new user +- `logout()` - Clear session and logout +- `userData()` - Fetch user data by token ## Development Conventions ### Coding Standards -- TypeScript is used throughout the project for type safety -- Component-based architecture with reusable components -- Context API for state management (AuthContext) -- File-based routing with Expo Router -- Consistent naming conventions using camelCase for variables and PascalCase for components -- Path aliases: `@/*` maps to project root +- **TypeScript**: Strict mode enabled +- **Naming**: + - Components: PascalCase (`Admin_ScreenDonationStatus`) + - Files: PascalCase for components (`ScreenDonationStatus.tsx`) + - Variables: camelCase + - Constants: UPPER_SNAKE_CASE +- **Path Aliases**: `@/*` maps to project root +- **Imports**: Group imports by type (components, hooks, services, etc.) -### Architecture Patterns +### Component Structure +```typescript +// 1. Imports (grouped) +import { ... } from "@/components"; +import { ... } from "@/hooks"; +import { ... } from "@/service"; -#### Screen Components -- Screen components are stored in `/screens` directory organized by feature -- Route files in `/app` import and use screen components -- Example pattern: - ```tsx - // app/some-route.tsx - import SomeScreen from "@/screens/Feature/ScreenSome"; - - export default function SomeRoute() { - return ; - } - ``` +// 2. Types/Interfaces +interface Props { ... } -#### Wrapper Components -- `NewWrapper` component is used for consistent screen layouts -- Located at `components/_ShareComponent/NewWrapper.tsx` - -#### Pagination Pattern -- Use `hooks/use-pagination.tsx` and `helpers/paginationHelpers.tsx` -- Helper functions: `createSkeletonList`, `createEmptyState`, `createLoadingFooter`, `createPaginationComponents` -- API functions should accept `page` parameter (default: "1") - -### API Service Structure -- Base API configuration: `service/api-config.ts` -- Client APIs: `service/api-client/` -- Admin APIs: `service/api-admin/` -- All API calls use axios with interceptors for auth token injection +// 3. Main Component +export function ComponentName() { + // State + // Hooks + // Functions + // Render +} +``` ### Testing -- Linting is configured with ESLint -- Standard Expo linting configuration +- Linting: `bun run lint` +- No formal test suite configured yet -### Security -- Firebase is integrated for authentication and messaging -- Camera and location permissions are properly configured -- Deep linking is secured with app domain associations -- Auth tokens stored in AsyncStorage +### Git Workflow +- Feature branches: `feature/xxx` or `fixed-admin/xxx` +- Commit messages: Clear and descriptive +- Use CHANGE_LOG.md for tracking changes -## Key Dependencies +## Key Features -### Core Dependencies -- `@react-navigation/*`: Navigation solution for React Native -- `@react-native-firebase/*`: Firebase integration for React Native -- `@rnmapbox/maps`: Mapbox integration for React Native -- `expo-router`: File-based routing for Expo applications -- `react-native-paper`: Material Design components for React Native -- `react-native-toast-message`: Toast notifications -- `react-native-otp-entry`: OTP input components -- `react-native-qrcode-svg`: QR code generation -- `axios`: HTTP client for API calls -- `lodash`: Utility library -- `moti`: Animation library +### Authentication +- Phone number login with OTP +- User registration +- Terms & Conditions acceptance +- Session persistence with AsyncStorage -### Development Dependencies -- `@types/*`: TypeScript type definitions -- `eslint-config-expo`: Expo-specific ESLint configuration -- `typescript`: Type checking +### Admin Module +- **Dashboard**: Overview and statistics +- **User Access**: User management +- **Event**: Event CRUD with status management +- **Voting**: Voting management (publish/review/reject) +- **Donation**: Donation management with categories and transaction tracking +- **Collaboration**: Collaboration requests +- **Investment**: Investment management +- **Maps**: Location-based features +- **App Information**: Bank and business field management -## Platform Support +### User Module +- **Home**: Main dashboard +- **Forum**: Discussion forums +- **Profile**: User profile management +- **Portfolio**: Member portfolio +- **Notifications**: Push notifications via Firebase -The application is configured to support: -- **iOS**: - - Bundle identifier: `com.anonymous.hipmi-mobile` - - Supports tablets - - Build number: 21 - - Google Services integration - - Associated domains for deep linking -- **Android**: - - Package name: `com.bip.hipmimobileapp` - - Version code: 4 - - Adaptive icons - - Edge-to-edge display enabled - - Intent filters for HTTPS deep linking -- **Web**: Static output configuration for web deployment +## API Configuration -## Special Configurations +### Base URLs +```typescript +// From app.config.js extra +API_BASE_URL: process.env.API_BASE_URL +BASE_URL: process.env.BASE_URL +DEEP_LINK_URL: process.env.DEEP_LINK_URL +``` + +### Axios Interceptor +All API calls use `apiConfig` with automatic token injection: +```typescript +apiConfig.interceptors.request.use(async (config) => { + const token = await AsyncStorage.getItem("authToken"); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; +}); +``` + +## Platform Configuration + +### iOS +- **Bundle ID**: `com.anonymous.hipmi-mobile` +- **Build Number**: 21 +- **Google Services**: Configured +- **Associated Domains**: `applinks:cld-dkr-staging-hipmi.wibudev.com` +- **Tablet Support**: Enabled + +### Android +- **Package**: `com.bip.hipmimobileapp` +- **Version Code**: 4 +- **Google Services**: Configured (`google-services.json`) +- **Deep Links**: HTTPS intent filters configured +- **Edge-to-Edge**: Enabled + +### Web +- **Output**: Static +- **Bundler**: Metro + +## Special Integrations + +### Firebase +- Authentication +- Push Notifications (FCM) +- Configured for both iOS and Android + +### Mapbox +- Map integration via `@rnmapbox/maps` +- Location permissions configured ### Deep Linking - Scheme: `hipmimobile://` -- Associated domains: `applinks:cld-dkr-staging-hipmi.wibudev.com` -- Configured for both iOS and Android - -### Maps Integration -The application uses Mapbox for mapping functionality with the `@rnmapbox/maps` plugin. - -### Push Notifications -Firebase Cloud Messaging is integrated for push notifications with proper configuration for both iOS and Android platforms. +- HTTPS: `cld-dkr-staging-hipmi.wibudev.com` +- Configured for both platforms ### Camera -Camera permissions configured for both iOS and Android with microphone access for recording. +- Camera and microphone permissions +- QR code generation support ## Common Development Tasks -### Adding a New Screen -1. Create screen component in appropriate `/screens` subdirectory -2. Add route in `/app` directory if needed -3. Configure navigation in `AppRoot.tsx` if custom header is needed +### Adding a New Admin Screen -### Adding API Endpoint -1. Add function in appropriate service file (`service/api-client/` or `service/api-admin/`) -2. Use `apiConfig` axios instance for requests -3. Include proper error handling +1. **Create Screen Component** (`screens/Admin/Feature/ScreenXXX.tsx`): +```typescript +export function Admin_ScreenXXX() { + const pagination = usePagination({...}); + const renderItem = useCallback(...); + const headerComponent = useMemo(...); + + return ; +} +``` -### Refactoring Pattern (from docs/prompt-for-qwen-code.md) -When moving code from route files to screen components: -1. Create new file in `screens//` directory -2. Rename function with prefix (e.g., `Admin_`, `Donation_`) -3. Use `NewWrapper` component for consistent layout -4. Apply pagination helpers if displaying lists -5. Import and call from original route file +2. **Create Box Component** (optional, for custom item rendering): +```typescript +export default function Admin_BoxXXX({ item }: { item: any }) { + return ( + router.push(...)}> + ... + + ); +} +``` + +3. **Update API** (add pagination if needed): +```typescript +export async function apiXXX({ page = "1" }: { page?: string }) { + // ... +} +``` + +4. **Create Route File** (`app/(application)/admin/feature/xxx.tsx`): +```typescript +import { Admin_ScreenXXX } from "@/screens/Admin/Feature/ScreenXXX"; + +export default function AdminXXX() { + return ; +} +``` + +### Updating API Endpoints + +1. Add function in appropriate service file +2. Include `page` parameter for list endpoints +3. Use `apiConfig` axios instance +4. Handle errors properly + +## Troubleshooting + +### Build Issues +```bash +# Clean and rebuild +rm -rf node_modules +bun install +bunx expo prebuild --clean + +# iOS specific +cd ios && pod install && cd .. + +# Android specific +cd android && ./gradlew clean && cd .. +``` + +### Cache Issues +```bash +# Clear Expo cache +bunx expo start -c + +# Clear Metro cache +bunx expo start --clear +``` + +### Dependency Issues +```bash +# Reinstall dependencies +rm -rf node_modules bun.lock +bun install +``` + +## Documentation Files + +- `docs/CHANGE_LOG.md` - Change log for recent updates +- `docs/COMMIT_NOTES.md` - Commit notes and guidelines +- `docs/hipmi-note.md` - Build and deployment notes +- `docs/prompt-for-qwen-code.md` - Development prompts and patterns + +## Resources + +- [Expo Documentation](https://docs.expo.dev/) +- [React Native Documentation](https://reactnative.dev/) +- [Expo Router Documentation](https://docs.expo.dev/router/introduction/) +- [TypeScript Documentation](https://www.typescriptlang.org/docs/) diff --git a/app/(application)/(user)/home.tsx b/app/(application)/(user)/home.tsx index ad768bd..38dc8a2 100644 --- a/app/(application)/(user)/home.tsx +++ b/app/(application)/(user)/home.tsx @@ -77,14 +77,14 @@ export default function Application() { ); } - // if (data && data?.masterUserRoleId !== "1") { - // console.log("User is not admin"); - // return ( - // - // - // - // ); - // } + if (data && data?.masterUserRoleId !== "1") { + console.log("User is not admin"); + return ( + + + + ); + } return ( <> diff --git a/app/(application)/admin/investment/[id]/[status]/index.tsx b/app/(application)/admin/investment/[id]/[status]/index.tsx index f0ce822..30d44aa 100644 --- a/app/(application)/admin/investment/[id]/[status]/index.tsx +++ b/app/(application)/admin/investment/[id]/[status]/index.tsx @@ -20,6 +20,7 @@ import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButt import AdminButtonReject from "@/components/_ShareComponent/Admin/ButtonReject"; import AdminButtonReview from "@/components/_ShareComponent/Admin/ButtonReview"; import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; import ReportBox from "@/components/Box/ReportBox"; import { MainColor } from "@/constants/color-palet"; @@ -182,9 +183,9 @@ export default function AdminInvestmentDetail() { - File Prospektus} - value={ + File Prospektus} + rightItem={ } /> - File Dokumen} - value={ + File Dokumen} + rightItem={ {_.isEmpty(data?.DokumenInvestasi) ? ( - diff --git a/app/(application)/admin/investment/[id]/[status]/transaction-detail.tsx b/app/(application)/admin/investment/[id]/[status]/transaction-detail.tsx index f751825..1f99826 100644 --- a/app/(application)/admin/investment/[id]/[status]/transaction-detail.tsx +++ b/app/(application)/admin/investment/[id]/[status]/transaction-detail.tsx @@ -60,7 +60,7 @@ export default function AdminInvestmentTransactionDetail() { value: (data && data?.MasterBank?.namaBank) || "-", }, { - label: "Jumlah Investasi", + label: "Nominal", value: (data && `Rp. ${formatCurrencyDisplay(data?.nominal)}`) || "-", }, { diff --git a/app/(application)/admin/investment/[id]/list-of-investor.tsx b/app/(application)/admin/investment/[id]/list-of-investor.tsx index 9d5bbb8..a6c806b 100644 --- a/app/(application)/admin/investment/[id]/list-of-investor.tsx +++ b/app/(application)/admin/investment/[id]/list-of-investor.tsx @@ -1,195 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - BadgeCustom, - CenterCustom, - LoaderCustom, - SelectCustom, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconView } from "@/components/_Icon/IconComponent"; -import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import { GridViewCustomSpan } from "@/components/_ShareComponent/GridViewCustomSpan"; -import NoDataText from "@/components/_ShareComponent/NoDataText"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminInvestmentListOfInvestor } from "@/service/api-admin/api-admin-investment"; -import { apiMasterTransaction } from "@/service/api-client/api-master"; -import { colorBadgeTransaction } from "@/utils/colorBadge"; -import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import _ from "lodash"; -import React, { useEffect } from "react"; -import { View } from "react-native"; -import { Divider } from "react-native-paper"; +import { Admin_ScreenInvestmentListOfInvestor } from "@/screens/Admin/Investment/ScreenInvestmentListOfInvestor"; export default function AdminInvestmentListOfInvestor() { - const { id } = useLocalSearchParams(); - console.log("[ID]", id); - - const [listData, setListData] = React.useState(null); - const [loadData, setLoadData] = React.useState(false); - const [master, setMaster] = React.useState([]); - - const [selectValue, setSelectValue] = React.useState(null); - const [selectedStatus, setSelectedStatus] = React.useState( - null - ); - - useEffect(() => { - onLoadMaster(); - }, []); - - const onLoadMaster = async () => { - try { - const response = await apiMasterTransaction(); - - if (response.success) { - setMaster(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - setMaster([]); - } - }; - - useFocusEffect( - React.useCallback(() => { - onLoadData(); - }, [id, selectValue]) - ); - - const onLoadData = async () => { - try { - setLoadData(true); - const response = await apiAdminInvestmentListOfInvestor({ - id: id as string, - status: selectedStatus as any, - }); - console.log("[LIST OF INVESTOR]", JSON.stringify(response, null, 2)); - - if (response.success) { - setListData(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - setListData([]); - } finally { - setLoadData(false); - } - }; - - useEffect(() => { - onLoadMaster(); - }, []); - - const searchComponent = ( - - ({ - label: item.name, - value: item.id, - })) - } - value={selectValue} - onChange={(value: any) => { - setSelectValue(value); - const nameSelected = master.find((item: any) => item.id === value); - const statusChooses = _.lowerCase(nameSelected?.name); - setSelectedStatus(statusChooses); - }} - styleContainer={{ width: "100%", marginBottom: 0 }} - allowClear - /> - - ); - - const headerComponent = ( - - - {searchComponent} - - ); - - return ( - <> - - - - Aksi - - } - component2={ - - Investor - - } - component3={ - - Status - - } - /> - - - {loadData ? ( - - ) : _.isEmpty(listData) ? ( - - ) : ( - listData?.map((item: any, index: number) => ( - - - - } - onPress={() => { - router.push( - `/admin/investment/${item?.id}/${_.lowerCase( - item?.StatusInvoice?.name - )}/transaction-detail` - ); - }} - /> - - } - component2={ - - {item?.Author?.username || "-"} - - } - component3={ - - {item?.StatusInvoice?.name} - - } - /> - - )) - )} - - - - - ); + return ; } diff --git a/app/(application)/admin/investment/[status]/status.tsx b/app/(application)/admin/investment/[status]/status.tsx index c84c8ad..8f5f084 100644 --- a/app/(application)/admin/investment/[status]/status.tsx +++ b/app/(application)/admin/investment/[status]/status.tsx @@ -1,113 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - LoaderCustom, - SearchInput, - StackCustom, - TextCustom, - ViewWrapper -} from "@/components"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; -import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; -import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; -import NoDataText from "@/components/_ShareComponent/NoDataText"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminInvestment } from "@/service/api-admin/api-admin-investment"; -import { Octicons } from "@expo/vector-icons"; -import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import _ from "lodash"; -import React, { useCallback } from "react"; -import { Divider } from "react-native-paper"; +import { Admin_ScreenInvestmentStatus } from "@/screens/Admin/Investment/ScreenInvestmentStatus"; export default function AdminInvestmentStatus() { - const { status } = useLocalSearchParams(); - const [listData, setListData] = React.useState(null); - const [loadData, setLoadingData] = React.useState(false); - const [search, setSearch] = React.useState(""); - - useFocusEffect( - useCallback(() => { - onLoadData(); - }, [status, search]) - ); - - const onLoadData = async () => { - try { - setLoadingData(true); - const response = await apiAdminInvestment({ - category: status as "publish" | "review" | "reject", - search, - }); - - if (response.success) { - setListData(response.data); - } - } catch (error) { - console.log(error); - setListData([]); - } finally { - setLoadingData(false); - } - }; - - const rightComponent = ( - - ); - return ( - <> - }> - - - - - - - {loadData ? ( - - ) : _.isEmpty(listData) ? ( - - ) : ( - listData?.map((item: any, index: number) => ( - - } - onPress={() => { - router.push(`/admin/investment/${item.id}/${status}`); - }} - /> - } - value2={{item?.author?.username}} - value3={ - - {item?.title} - - } - /> - )) - )} - - - - ); + return ; } diff --git a/docs/prompt-for-qwen-code.md b/docs/prompt-for-qwen-code.md index c0a1ed7..97b34f2 100644 --- a/docs/prompt-for-qwen-code.md +++ b/docs/prompt-for-qwen-code.md @@ -55,10 +55,10 @@ Component yang digunakan: components/_ShareComponent/NewWrapper.tsx -File source: app/(application)/admin/donation/[id]/list-disbursement-of-funds.tsx -Folder tujuan: screens/Admin/Donation -Nama file utama: ScreenDonationListDisbursementOfFunds.tsx -Nama function utama: Admin_ScreenDonationListDisbursementOfFunds +File source: app/(application)/admin/investment/[id]/list-of-investor.tsx +Folder tujuan: screens/Admin/Investment +Nama file utama: ScreenInvestmentListOfInvestor.tsx +Nama function utama: Admin_ScreenInvestmentListOfInvestor File komponen wrapper: components/_ShareComponent/NewWrapper.tsx Buat file baru pada "Folder tujuan" dengan nama "Nama file utama" dan ubah nama function menjadi "Nama function utama" kemudian clean code, import dan panggil function tersebut pada file "File source" @@ -66,8 +66,8 @@ Analisa juga file "Nama file utama" , jika belum menggunakan NewWrapper pada fil -Function fecth: apiAdminDonationDisbursementOfFundsListById -File function fetch: service/api-admin/api-admin-donation.ts +Function fecth: apiAdminInvestmentListOfInvestor +File function fetch: service/api-admin/api-admin-investment.ts Terapkan pagination pada file "Nama file utama" Komponen pagination yang digunaka berada pada file hooks/use-pagination.tsx dan helpers/paginationHelpers.tsx @@ -80,10 +80,10 @@ Gunakan bahasa indonesia pada cli agar saya mudah membacanya. -File refrensi: screens/Admin/Voting/ScreenEventTypeOfEvent.tsx +File refrensi: screens/Admin/Donation/ScreenDonationListOfDonatur.tsx Anda bisa menggunakan refrensi dari "File refrensi" jika butuh pemahaman dengan tipe fitur yang hampir sama -Untuk refrensi tampilan Box bisa anda gunakan dari file: screens/Admin/Donation/BoxDonationCategory.tsx dan buatkan komponen yang mirip untuk list of donatur dengan nama file: BoxDonationListOfDonatur.tsx +Untuk refrensi tampilan Box bisa anda gunakan dari file: screens/Admin/Donation/BoxDonationListOfDonatur.tsx dan buatkan komponen yang mirip untuk list of donatur dengan nama file: BoxDonationListOfInvestor.tsx Terapkan NewWrapper pada file: screens/Admin/App-Information/InformationBankSection.tsx @@ -108,9 +108,10 @@ Jika tidak ada props page maka tambahkan props page dan default page: "1" ( stri Jika butuh refrensi FlatList bisa lihat pada file components/_ShareComponent/NewWrapper.tsx -File Utama: screens/Admin/Donation/Admin_ScreenDonationStatus.tsx -Folder tujuan: screens/Admin/Donation -Buat box component baru pada file "File Utama" di bagian renderItem, +File Utama: screens/Admin/Investment/ScreenInvestmentStatus.tsx +Folder tujuan: screens/Admin/Investment +Reffrensi: screens/Admin/Donation/BoxDonationStatus.tsx +Buatkan box component baru pada file "File Utama" di bagian renderItem agar lebih rapi buat file baru dengan nama BoxInvestmentStatus.tsx diff --git a/screens/Admin/Donation/BoxDonationStatus.tsx b/screens/Admin/Donation/BoxDonationStatus.tsx index 55721e3..e113d5c 100644 --- a/screens/Admin/Donation/BoxDonationStatus.tsx +++ b/screens/Admin/Donation/BoxDonationStatus.tsx @@ -38,7 +38,7 @@ export default function Admin_BoxDonationStatus({ } /> Target} + label={Target Dana} value={ {item?.target diff --git a/screens/Admin/Investment/BoxInvestmentListOfInvestor.tsx b/screens/Admin/Investment/BoxInvestmentListOfInvestor.tsx new file mode 100644 index 0000000..f3e62cf --- /dev/null +++ b/screens/Admin/Investment/BoxInvestmentListOfInvestor.tsx @@ -0,0 +1,63 @@ +import { BadgeCustom, Divider, StackCustom, TextCustom } from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import { colorBadgeTransaction } from "@/utils/colorBadge"; +import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay"; +import { router } from "expo-router"; +import _ from "lodash"; + +interface BoxInvestmentListOfInvestorProps { + item: any; +} + +export default function Admin_BoxInvestmentListOfInvestor({ + item, +}: BoxInvestmentListOfInvestorProps) { + const statusName = item?.StatusInvoice?.name || "-"; + + return ( + <> + { + router.push( + `/admin/investment/${item?.id}/${_.lowerCase( + item?.StatusInvoice?.name, + )}/transaction-detail`, + ); + }} + > + + + + {item?.Author?.username || "-"} + + + + Status} + value={ + + {statusName} + + } + /> + Nominal} + value={ + + {item?.nominal + ? `Rp ${formatCurrencyDisplay(item?.nominal)}` + : "-"} + + } + /> + + + + ); +} diff --git a/screens/Admin/Investment/BoxInvestmentStatus.tsx b/screens/Admin/Investment/BoxInvestmentStatus.tsx new file mode 100644 index 0000000..90c869a --- /dev/null +++ b/screens/Admin/Investment/BoxInvestmentStatus.tsx @@ -0,0 +1,54 @@ +import { Divider, StackCustom, TextCustom } from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import { formatCurrencyDisplay } from "@/utils/formatCurrencyDisplay"; +import { router } from "expo-router"; +import { View } from "react-native"; + +interface BoxInvestmentStatusProps { + item: any; + status?: string; +} + +export default function Admin_BoxInvestmentStatus({ + item, + status, +}: BoxInvestmentStatusProps) { + return ( + <> + { + router.push(`/admin/investment/${item.id}/${status}`); + }} + > + + + + {item?.title || "-"} + + + + Durasi} + value={ + + {item?.MasterPencarianInvestor?.name || "-"} hari + + } + /> + Target Dana} + value={ + + {item?.targetDana + ? `Rp ${formatCurrencyDisplay(item?.targetDana)}` + : "-"} + + } + /> + + + + ); +} diff --git a/screens/Admin/Investment/ScreenInvestmentListOfInvestor.tsx b/screens/Admin/Investment/ScreenInvestmentListOfInvestor.tsx new file mode 100644 index 0000000..e46a28c --- /dev/null +++ b/screens/Admin/Investment/ScreenInvestmentListOfInvestor.tsx @@ -0,0 +1,132 @@ +import { SelectCustom } from "@/components"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminInvestmentListOfInvestor } from "@/service/api-admin/api-admin-investment"; +import { apiMasterTransaction } from "@/service/api-client/api-master"; +import { useLocalSearchParams } from "expo-router"; +import _ from "lodash"; +import { useCallback, useEffect, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; +import Admin_BoxInvestmentListOfInvestor from "./BoxInvestmentListOfInvestor"; + +export function Admin_ScreenInvestmentListOfInvestor() { + const { id } = useLocalSearchParams(); + const [selectValue, setSelectValue] = useState(null); + const [selectedStatus, setSelectedStatus] = useState(null); + const [master, setMaster] = useState([]); + + // Gunakan hook pagination + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminInvestmentListOfInvestor({ + id: id as string, + status: selectedStatus as any, + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } else { + return { data: [] }; + } + }, + pageSize: PAGINATION_DEFAULT_TAKE, + searchQuery: "", + dependencies: [id, selectedStatus], + }); + + // Load master data untuk select option + useEffect(() => { + onLoadMaster(); + }, []); + + const onLoadMaster = async () => { + try { + const response = await apiMasterTransaction(); + if (response.success) { + setMaster(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + setMaster([]); + } + }; + + // Komponen select untuk filter status + const searchComponent = useMemo( + () => ( + ({ + label: item.name, + value: item.id, + })) + } + value={selectValue} + onChange={(value: any) => { + setSelectValue(value); + const nameSelected = master.find((item: any) => item.id === value); + const statusChooses = _.lowerCase(nameSelected?.name); + setSelectedStatus(statusChooses); + }} + styleContainer={{ width: "100%", marginBottom: 0 }} + allowClear + /> + ), + [master, selectValue] + ); + + // Header component dengan back button dan select filter + const headerComponent = useMemo( + () => , + [searchComponent] + ); + + // Render item untuk daftar investor + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + + ), + [] + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: "", + emptyMessage: "Belum ada data investor", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + item.id?.toString() || `fallback-${item.id}`} + headerComponent={headerComponent} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + onEndReached={pagination.loadMore} + refreshControl={ + + } + /> + ); +} diff --git a/screens/Admin/Investment/ScreenInvestmentStatus.tsx b/screens/Admin/Investment/ScreenInvestmentStatus.tsx new file mode 100644 index 0000000..61fa36a --- /dev/null +++ b/screens/Admin/Investment/ScreenInvestmentStatus.tsx @@ -0,0 +1,109 @@ +import { SearchInput } from "@/components"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { + PAGINATION_DEFAULT_TAKE, +} from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminInvestment } from "@/service/api-admin/api-admin-investment"; +import { useLocalSearchParams } from "expo-router"; +import _ from "lodash"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; +import Admin_BoxInvestmentStatus from "./BoxInvestmentStatus"; + +export function Admin_ScreenInvestmentStatus() { + const { status } = useLocalSearchParams(); + const [search, setSearch] = useState(""); + + // Gunakan hook pagination + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminInvestment({ + category: status as "publish" | "review" | "reject", + search: searchQuery, + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } else { + return { data: [] }; + } + }, + pageSize: PAGINATION_DEFAULT_TAKE, + searchQuery: search, + dependencies: [status], + }); + + // Komponen search input untuk header + const rightComponent = useMemo( + () => ( + setSearch(value)} + /> + ), + [search], + ); + + // Render item untuk daftar investasi menggunakan Box Component + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + + ), + [status], + ); + + // Header component dengan judul status investasi + const headerComponent = useMemo( + () => ( + + ), + [status, rightComponent], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: search, + emptyMessage: "Belum ada data", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 120, + }); + + return ( + item.id?.toString() || `fallback-${item.id}`} + headerComponent={headerComponent} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + onEndReached={pagination.loadMore} + refreshControl={ + + } + /> + ); +} diff --git a/screens/Admin/listPageAdmin.tsx b/screens/Admin/listPageAdmin.tsx index 4726614..71e389f 100644 --- a/screens/Admin/listPageAdmin.tsx +++ b/screens/Admin/listPageAdmin.tsx @@ -72,16 +72,16 @@ const adminListMenu: NavbarItem[] = [ { label: "Report Komentar", link: "/admin/forum/report-comment" }, ], }, - { - label: "Collaboration", - icon: "people", - links: [ - { label: "Dashboard", link: "/admin/collaboration" }, - { label: "Publish", link: "/admin/collaboration/publish" }, - { label: "Group", link: "/admin/collaboration/group" }, - { label: "Reject", link: "/admin/collaboration/reject" }, - ], - }, + // { + // label: "Collaboration", + // icon: "people", + // links: [ + // { label: "Dashboard", link: "/admin/collaboration" }, + // { label: "Publish", link: "/admin/collaboration/publish" }, + // { label: "Group", link: "/admin/collaboration/group" }, + // { label: "Reject", link: "/admin/collaboration/reject" }, + // ], + // }, { label: "Maps", icon: "map", link: "/admin/maps" }, { label: "App Information", @@ -165,16 +165,16 @@ const superAdminListMenu: NavbarItem[] = [ { label: "Report Komentar", link: "/admin/forum/report-comment" }, ], }, - { - label: "Collaboration", - icon: "people", - links: [ - { label: "Dashboard", link: "/admin/collaboration" }, - { label: "Publish", link: "/admin/collaboration/publish" }, - { label: "Group", link: "/admin/collaboration/group" }, - { label: "Reject", link: "/admin/collaboration/reject" }, - ], - }, + // { + // label: "Collaboration", + // icon: "people", + // links: [ + // { label: "Dashboard", link: "/admin/collaboration" }, + // { label: "Publish", link: "/admin/collaboration/publish" }, + // { label: "Group", link: "/admin/collaboration/group" }, + // { label: "Reject", link: "/admin/collaboration/reject" }, + // ], + // }, { label: "Maps", icon: "map", link: "/admin/maps" }, { label: "App Information", diff --git a/service/api-admin/api-admin-investment.ts b/service/api-admin/api-admin-investment.ts index 510bd9c..d2901df 100644 --- a/service/api-admin/api-admin-investment.ts +++ b/service/api-admin/api-admin-investment.ts @@ -4,14 +4,16 @@ import { apiConfig } from "../api-config"; export async function apiAdminInvestment({ category, search, + page = "1", }: { category: "dashboard" | "publish" | "review" | "reject"; search?: string; + page?: string; }) { const propsQuery = category === "dashboard" - ? `category=${category}` - : `category=${category}&search=${search}`; + ? `category=${category}&page=${page}` + : `category=${category}&search=${search}&page=${page}`; try { const response = await apiConfig.get( @@ -57,15 +59,23 @@ export async function apiAdminInvestasiUpdateByStatus({ export async function apiAdminInvestmentListOfInvestor({ id, status, + page = "1", }: { id: string; status: "berhasil" | "gagal" | "proses" | "menunggu" | null; + page?: string; }) { - const query = status && status !== null ? `?status=${status}` : ""; + const queryParams = new URLSearchParams(); + + if (status && status !== null) { + queryParams.append("status", status); + } + + queryParams.append("page", page); try { const response = await apiConfig.get( - `/mobile/admin/investment/${id}/investor${query}` + `/mobile/admin/investment/${id}/investor?${queryParams.toString()}` ); return response.data; } catch (error) { -- 2.49.1 From 107d4312e1bf8cc36a214839ec867533d0fd9eda Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Thu, 19 Feb 2026 16:40:35 +0800 Subject: [PATCH 2/9] Fixed UI Admin Admin Forum Pages - app/(application)/admin/forum/[id]/list-report-posting.tsx - app/(application)/admin/forum/posting.tsx - app/(application)/admin/forum/report-comment.tsx - app/(application)/admin/forum/report-posting.tsx Admin Forum Service - service/api-admin/api-admin-forum.ts Docs - docs/prompt-for-qwen-code.md New Admin Screens - screens/Admin/Forum/ ### No Issue --- .../admin/forum/[id]/list-report-posting.tsx | 284 +-------------- app/(application)/admin/forum/posting.tsx | 120 +------ .../admin/forum/report-comment.tsx | 136 +------ .../admin/forum/report-posting.tsx | 123 +------ docs/prompt-for-qwen-code.md | 17 +- .../Forum/ScreenForumDetailReportPosting.tsx | 339 ++++++++++++++++++ screens/Admin/Forum/ScreenForumPosting.tsx | 133 +++++++ .../Admin/Forum/ScreenForumReportComment.tsx | 156 ++++++++ .../Admin/Forum/ScreenForumReportPosting.tsx | 130 +++++++ service/api-admin/api-admin-forum.ts | 8 +- 10 files changed, 783 insertions(+), 663 deletions(-) create mode 100644 screens/Admin/Forum/ScreenForumDetailReportPosting.tsx create mode 100644 screens/Admin/Forum/ScreenForumPosting.tsx create mode 100644 screens/Admin/Forum/ScreenForumReportComment.tsx create mode 100644 screens/Admin/Forum/ScreenForumReportPosting.tsx diff --git a/app/(application)/admin/forum/[id]/list-report-posting.tsx b/app/(application)/admin/forum/[id]/list-report-posting.tsx index e26b625..727441b 100644 --- a/app/(application)/admin/forum/[id]/list-report-posting.tsx +++ b/app/(application)/admin/forum/[id]/list-report-posting.tsx @@ -1,283 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - AlertDefaultSystem, - BadgeCustom, - BaseBox, - CenterCustom, - DrawerCustom, - LoaderCustom, - MenuDrawerDynamicGrid, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconDot, IconView } from "@/components/_Icon/IconComponent"; -import { IconTrash } from "@/components/_Icon/IconTrash"; -import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { MainColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { useAuth } from "@/hooks/use-auth"; -import { - apiAdminForumDeactivatePosting, - apiAdminForumListReportPostingById, - apiAdminForumPostingById, -} from "@/service/api-admin/api-admin-forum"; -import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import _ from "lodash"; -import { useCallback, useState } from "react"; -import { View } from "react-native"; -import { Divider } from "react-native-paper"; -import Toast from "react-native-toast-message"; +import { Admin_ScreenForumDetailReportPosting } from "@/screens/Admin/Forum/ScreenForumDetailReportPosting"; -export default function AdminForumReportPosting() { - const { user } = useAuth(); - const { id } = useLocalSearchParams(); - const [openDrawerPage, setOpenDrawerPage] = useState(false); - const [openDrawerAction, setOpenDrawerAction] = useState(false); - - const [data, setData] = useState(null); - const [listReport, setListReport] = useState(null); - const [loadListReport, setLoadListReport] = useState(false); - const [selectedReport, setSelectedReport] = useState({ - id: "", - username: "", - kategori: "", - keterangan: "", - deskripsi: "", - }); - - useFocusEffect( - useCallback(() => { - onLoadData(); - }, [id]) - ); - - const onLoadData = async () => { - try { - setLoadListReport(true); - const response = await apiAdminForumPostingById({ - id: id as string, - }); - - const responseReport = await apiAdminForumListReportPostingById({ - id: id as string, - }); - - if (response.success) { - setData(response.data); - } - - if (responseReport.success) { - setListReport(responseReport.data); - } - } catch (error) { - console.log("[ERROR]", error); - } finally { - setLoadListReport(false); - } - }; - - return ( - <> - } - onPress={() => setOpenDrawerPage(true)} - /> - } - /> - } - > - - - Username} - text2={{data?.Author?.username || "-"}} - /> - - Status} - text2={ - data && data?.ForumMaster_StatusPosting?.status ? ( - - {data?.ForumMaster_StatusPosting?.status === "Open" - ? "Open" - : "Close"} - - ) : ( - {"-"} - ) - } - /> - - Postingan} - text2={{data?.diskusi || "-"}} - /> - - - - - - - Aksi - - } - text2={Pelapor} - text3={Kategori Report} - /> - - {loadListReport ? ( - - ) : _.isEmpty(listReport) ? ( - - Belum ada report - - ) : ( - listReport?.map((item: any, index: number) => ( - - - - } - onPress={() => { - setOpenDrawerAction(true); - setSelectedReport({ - id: item?.id, - username: item?.User?.username, - kategori: item?.ForumMaster_KategoriReport?.title, - keterangan: - item?.ForumMaster_KategoriReport?.deskripsi, - deskripsi: item?.deskripsi, - }); - }} - /> - - } - text2={ - - {item?.User?.username || "-"} - - } - text3={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> - - - )) - )} - - - - setOpenDrawerPage(false)} - height={"auto"} - > - , - label: "Hapus Posting", - value: "delete", - path: "", - color: MainColor.red, - }, - ]} - onPressItem={(item) => { - AlertDefaultSystem({ - title: "Hapus Posting", - message: "Apakah Anda yakin ingin menghapus posting ini?", - textLeft: "Batal", - textRight: "Hapus", - onPressRight: async () => { - const response = await apiAdminForumDeactivatePosting({ - id: id as string, - data: { - senderId: user?.id as string, - }, - }); - - if (!response.success) { - Toast.show({ - type: "error", - text1: "Posting gagal dihapus", - }); - return; - } - - setOpenDrawerPage(false); - Toast.show({ - type: "success", - text1: "Posting berhasil dihapus", - }); - router.back(); - }, - }); - }} - /> - - - setOpenDrawerAction(false)} - height={"auto"} - > - - Pelapor} - value={{selectedReport?.username || "-"}} - /> - - {selectedReport?.kategori && ( - <> - Kategori Report} - value={ - {selectedReport?.kategori || "-"} - } - /> - Keterangan} - value={ - {selectedReport?.keterangan || "-"} - } - /> - - )} - - {selectedReport?.deskripsi && ( - Deskripsi} - value={ - {selectedReport?.deskripsi || "-"} - } - /> - )} - - - - ); +export default function AdminForumDetailReportPosting() { + return ; } diff --git a/app/(application)/admin/forum/posting.tsx b/app/(application)/admin/forum/posting.tsx index dd7ad70..9693af9 100644 --- a/app/(application)/admin/forum/posting.tsx +++ b/app/(application)/admin/forum/posting.tsx @@ -1,121 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ClickableCustom, - LoaderCustom, - SearchInput, - Spacing, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; -import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; -import { router, useFocusEffect } from "expo-router"; -import _ from "lodash"; -import { useCallback, useState } from "react"; -import { View } from "react-native"; -import { Divider } from "react-native-paper"; +import { Admin_ScreenForumPosting } from "@/screens/Admin/Forum/ScreenForumPosting"; export default function AdminForumPosting() { - const [list, setList] = useState(null); - const [loadList, setLoadList] = useState(false); - const [search, setSearch] = useState(""); - - useFocusEffect( - useCallback(() => { - handlerLoadList(); - }, [search]) - ); - - const handlerLoadList = async () => { - try { - setLoadList(true); - const response = await apiAdminForum({ - category: "posting", - search: search, - }); - - console.log("DATA", JSON.stringify(response, null, 2)); - - if (response.success) { - setList(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - } finally { - setLoadList(false); - } - }; - - const rightComponent = ( - - ); - - return ( - <> - }> - - Username} - text2={ Postingan} - text3={ Report Posting} - text4={ Komentar} - /> - - - - {loadList ? ( - - ) : _.isEmpty(list) ? ( - - Belum ada data - - ) : ( - list?.map((item: any, index: number) => ( - - { - router.push(`/admin/forum/${item.id}`); - }} - > - - {item?.Author?.username || "-"} - - } - text2={ - - {item?.diskusi || "-"} - - } - text3={ - - {item?.reportPosting || "-"} - - } - text4={ - - {item?.komentar || "-"} - - } - /> - - - - - )) - )} - - - - ); + return ; } diff --git a/app/(application)/admin/forum/report-comment.tsx b/app/(application)/admin/forum/report-comment.tsx index b9fa90f..c525a4d 100644 --- a/app/(application)/admin/forum/report-comment.tsx +++ b/app/(application)/admin/forum/report-comment.tsx @@ -1,137 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - ClickableCustom, - LoaderCustom, - SearchInput, - Spacing, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconView } from "@/components/_Icon/IconComponent"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; -import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; -import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { MainColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; -import { router, useFocusEffect } from "expo-router"; -import _ from "lodash"; -import { useCallback, useState } from "react"; -import { View } from "react-native"; -import { Divider } from "react-native-paper"; +import { Admin_ScreenForumReportComment } from "@/screens/Admin/Forum/ScreenForumReportComment"; export default function AdminForumReportComment() { - const [listData, setListData] = useState(null); - const [loadList, setLoadList] = useState(false); - const [search, setSearch] = useState(""); - - useFocusEffect( - useCallback(() => { - onLoadData(); - }, [search]) - ); - - const onLoadData = async () => { - try { - setLoadList(true); - - const response = await apiAdminForum({ - category: "report_comment", - search: search, - }); - - if (response.success) { - setListData(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - } finally { - setLoadList(false); - } - }; - - const rightComponent = ( - - ); - - return ( - <> - }> - - - - Pelapor - - } - text2={ - - Komentar - - } - text3={ - - Jenis Laporan - - } - /> - - - - {loadList ? ( - - ) : _.isEmpty(listData) ? ( - - Belum ada data - - ) : ( - listData?.map((item: any, index: number) => ( - - { - router.push( - `/admin/forum/${item?.Forum_Komentar?.id}/list-report-comment` - ); - }} - > - - {item?.User?.username || "-"} - - } - text2={ - - {item?.Forum_Komentar?.komentar || "-"} - - } - text3={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> - - - - - )) - )} - - - - ); + return ; } diff --git a/app/(application)/admin/forum/report-posting.tsx b/app/(application)/admin/forum/report-posting.tsx index a819676..c9b4146 100644 --- a/app/(application)/admin/forum/report-posting.tsx +++ b/app/(application)/admin/forum/report-posting.tsx @@ -1,124 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - ClickableCustom, - Divider, - LoaderCustom, - SearchInput, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconView } from "@/components/_Icon/IconComponent"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; -import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; -import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { MainColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; -import { router, useFocusEffect } from "expo-router"; -import _ from "lodash"; -import { useCallback, useState } from "react"; -import { View } from "react-native"; +import { Admin_ScreenForumReportPosting } from "@/screens/Admin/Forum/ScreenForumReportPosting"; export default function AdminForumReportPosting() { - const [listData, setListData] = useState(null); - const [loadList, setLoadList] = useState(false); - const [search, setSearch] = useState(""); - - useFocusEffect( - useCallback(() => { - onLoadData(); - }, [search]) - ); - - const onLoadData = async () => { - try { - setLoadList(true); - - const response = await apiAdminForum({ - category: "report_posting", - search: search, - }); - - if (response.success) { - setListData(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - } finally { - setLoadList(false); - } - }; - - const rightComponent = ( - - ); - - return ( - <> - }> - - - - Pelapor - - } - text2={ - - Postingan - - } - /> - - - {loadList ? ( - - ) : _.isEmpty(listData) ? ( - - Belum ada data - - ) : ( - listData?.map((item: any, index: number) => ( - - { - router.push( - `/admin/forum/${item?.Forum_Posting?.id}/list-report-posting` - ); - }} - > - - {item?.User?.username || "-"} - - } - text2={ - - {item?.Forum_Posting?.diskusi || "-"} - - } - /> - - - - )) - )} - - - - ); + return ; } diff --git a/docs/prompt-for-qwen-code.md b/docs/prompt-for-qwen-code.md index 97b34f2..d640487 100644 --- a/docs/prompt-for-qwen-code.md +++ b/docs/prompt-for-qwen-code.md @@ -55,10 +55,10 @@ Component yang digunakan: components/_ShareComponent/NewWrapper.tsx -File source: app/(application)/admin/investment/[id]/list-of-investor.tsx -Folder tujuan: screens/Admin/Investment -Nama file utama: ScreenInvestmentListOfInvestor.tsx -Nama function utama: Admin_ScreenInvestmentListOfInvestor +File source: app/(application)/admin/forum/[id]/list-report-posting.tsx +Folder tujuan: screens/Admin/Forum +Nama file utama: ScreenForumDetailReportPosting.tsx +Nama function utama: Admin_ScreenForumDetailReportPosting File komponen wrapper: components/_ShareComponent/NewWrapper.tsx Buat file baru pada "Folder tujuan" dengan nama "Nama file utama" dan ubah nama function menjadi "Nama function utama" kemudian clean code, import dan panggil function tersebut pada file "File source" @@ -66,8 +66,8 @@ Analisa juga file "Nama file utama" , jika belum menggunakan NewWrapper pada fil -Function fecth: apiAdminInvestmentListOfInvestor -File function fetch: service/api-admin/api-admin-investment.ts +Function fecth: apiAdminForumListReportPostingById +File function fetch: service/api-admin/api-admin-forum.ts Terapkan pagination pada file "Nama file utama" Komponen pagination yang digunaka berada pada file hooks/use-pagination.tsx dan helpers/paginationHelpers.tsx @@ -80,11 +80,14 @@ Gunakan bahasa indonesia pada cli agar saya mudah membacanya. -File refrensi: screens/Admin/Donation/ScreenDonationListOfDonatur.tsx +File refrensi: screens/Admin/Forum/ScreenForumReportPosting.tsx Anda bisa menggunakan refrensi dari "File refrensi" jika butuh pemahaman dengan tipe fitur yang hampir sama Untuk refrensi tampilan Box bisa anda gunakan dari file: screens/Admin/Donation/BoxDonationListOfDonatur.tsx dan buatkan komponen yang mirip untuk list of donatur dengan nama file: BoxDonationListOfInvestor.tsx + + + Terapkan NewWrapper pada file: screens/Admin/App-Information/InformationBankSection.tsx Component yang digunakan: components/_ShareComponent/NewWrapper.tsx diff --git a/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx b/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx new file mode 100644 index 0000000..b254ffd --- /dev/null +++ b/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx @@ -0,0 +1,339 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import { + ActionIcon, + AlertDefaultSystem, + BadgeCustom, + BaseBox, + CenterCustom, + DrawerCustom, + MenuDrawerDynamicGrid, + StackCustom, + TextCustom, +} from "@/components"; +import { IconDot, IconView } from "@/components/_Icon/IconComponent"; +import { IconTrash } from "@/components/_Icon/IconTrash"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { + ICON_SIZE_BUTTON, + PAGINATION_DEFAULT_TAKE, +} from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { useAuth } from "@/hooks/use-auth"; +import { + apiAdminForumDeactivatePosting, + apiAdminForumListReportPostingById, + apiAdminForumPostingById, +} from "@/service/api-admin/api-admin-forum"; +import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; +import _ from "lodash"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl, View } from "react-native"; +import { Divider } from "react-native-paper"; +import Toast from "react-native-toast-message"; + +export function Admin_ScreenForumDetailReportPosting() { + const { user } = useAuth(); + const { id } = useLocalSearchParams(); + const [openDrawerPage, setOpenDrawerPage] = useState(false); + const [openDrawerAction, setOpenDrawerAction] = useState(false); + const [data, setData] = useState(null); + const [selectedReport, setSelectedReport] = useState({ + id: "", + username: "", + kategori: "", + keterangan: "", + deskripsi: "", + }); + + // Load data postingan saat screen fokus + useFocusEffect( + useCallback(() => { + onLoadDataPosting(); + }, [id]) + ); + + // Pagination untuk list report + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminForumListReportPostingById({ + id: id as string, + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } + return { data: [] }; + }, + pageSize: PAGINATION_DEFAULT_TAKE, + dependencies: [id], + }); + + const onLoadDataPosting = async () => { + try { + const response = await apiAdminForumPostingById({ + id: id as string, + }); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } + }; + + // Render item untuk daftar report + const renderItem = useCallback( + ({ item }: { item: any }) => ( + + + } + onPress={() => { + setOpenDrawerAction(true); + setSelectedReport({ + id: item?.id, + username: item?.User?.username, + kategori: item?.ForumMaster_KategoriReport?.title, + keterangan: item?.ForumMaster_KategoriReport?.deskripsi, + deskripsi: item?.deskripsi, + }); + }} + /> + + } + text2={ + + {item?.User?.username || "-"} + + } + text3={ + + {item?.ForumMaster_KategoriReport?.title || "-"} + + } + /> + + + ), + [] + ); + + // Header component dengan detail postingan + const headerComponent = useMemo( + () => ( + } + onPress={() => setOpenDrawerPage(true)} + /> + } + /> + ), + [] + ); + + // Detail postingan component + const postingDetailComponent = useMemo( + () => ( + + + Username} + text2={{data?.Author?.username || "-"}} + /> + + Status} + text2={ + data && data?.ForumMaster_StatusPosting?.status ? ( + + {data?.ForumMaster_StatusPosting?.status === "Open" + ? "Open" + : "Close"} + + ) : ( + {"-"} + ) + } + /> + + Postingan} + text2={{data?.diskusi || "-"}} + /> + + + ), + [data] + ); + + // Box title untuk daftar report + const reportListTitleComponent = useMemo( + () => , + [] + ); + + // Header untuk kolom daftar report + const reportListHeaderComponent = useMemo( + () => ( + + {postingDetailComponent} + {reportListTitleComponent} + + Aksi + + } + text2={Pelapor} + text3={Kategori Report} + /> + + + ), + [postingDetailComponent, reportListTitleComponent] + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + emptyMessage: "Belum ada report", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + <> + + } + /> + + {/* Drawer untuk menu halaman (hapus posting) */} + setOpenDrawerPage(false)} + height={"auto"} + > + , + label: "Hapus Posting", + value: "delete", + path: "", + color: MainColor.red, + }, + ]} + onPressItem={(item) => { + AlertDefaultSystem({ + title: "Hapus Posting", + message: "Apakah Anda yakin ingin menghapus posting ini?", + textLeft: "Batal", + textRight: "Hapus", + onPressRight: async () => { + const response = await apiAdminForumDeactivatePosting({ + id: id as string, + data: { + senderId: user?.id as string, + }, + }); + + if (!response.success) { + Toast.show({ + type: "error", + text1: "Posting gagal dihapus", + }); + return; + } + + setOpenDrawerPage(false); + Toast.show({ + type: "success", + text1: "Posting berhasil dihapus", + }); + router.back(); + }, + }); + }} + /> + + + {/* Drawer untuk detail report */} + setOpenDrawerAction(false)} + height={"auto"} + > + + Pelapor} + value={{selectedReport?.username || "-"}} + /> + + {selectedReport?.kategori && ( + <> + Kategori Report} + value={ + {selectedReport?.kategori || "-"} + } + /> + Keterangan} + value={ + {selectedReport?.keterangan || "-"} + } + /> + + )} + + {selectedReport?.deskripsi && ( + Deskripsi} + value={ + {selectedReport?.deskripsi || "-"} + } + /> + )} + + + + ); +} diff --git a/screens/Admin/Forum/ScreenForumPosting.tsx b/screens/Admin/Forum/ScreenForumPosting.tsx new file mode 100644 index 0000000..0fa8087 --- /dev/null +++ b/screens/Admin/Forum/ScreenForumPosting.tsx @@ -0,0 +1,133 @@ +import { + SearchInput, StackCustom, + TextCustom +} from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; +import { router } from "expo-router"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl, View } from "react-native"; +import { Divider } from "react-native-paper"; + +export function Admin_ScreenForumPosting() { + const [search, setSearch] = useState(""); + + // Gunakan hook pagination + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminForum({ + category: "posting", + search: searchQuery || "", + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } else { + return { data: [] }; + } + }, + pageSize: PAGINATION_DEFAULT_TAKE, + searchQuery: search, + dependencies: [], + }); + + // Komponen search input + const searchComponent = useMemo( + () => ( + + ), + [search], + ); + + // Header component + const headerComponent = useMemo( + () => ( + + ), + [searchComponent], + ); + + // Render item untuk daftar posting + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + { + router.push(`/admin/forum/${item.id}`); + }} + > + + + + {item?.diskusi || "-"} + + + + Komentar} + value={ + {item?.komentar || "-"} + } + /> + Report} + value={ + {item?.reportPosting || "-"} + } + /> + + + ), + [], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: search, + emptyMessage: "Belum ada data posting", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + item.id?.toString() || `fallback-${item.id}`} + headerComponent={headerComponent} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + onEndReached={pagination.loadMore} + refreshControl={ + + } + /> + ); +} diff --git a/screens/Admin/Forum/ScreenForumReportComment.tsx b/screens/Admin/Forum/ScreenForumReportComment.tsx new file mode 100644 index 0000000..f306a77 --- /dev/null +++ b/screens/Admin/Forum/ScreenForumReportComment.tsx @@ -0,0 +1,156 @@ +import { SearchInput, StackCustom, TextCustom } from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; +import { router } from "expo-router"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; +import { Divider } from "react-native-paper"; + +export function Admin_ScreenForumReportComment() { + const [search, setSearch] = useState(""); + + // Gunakan hook pagination + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminForum({ + category: "report_comment", + search: searchQuery || "", + page: String(page), + }); + + if (response.success) { + console.log("CEK", JSON.stringify(response.data, null, 2)); + return { data: response.data }; + } else { + return { data: [] }; + } + }, + pageSize: PAGINATION_DEFAULT_TAKE, + searchQuery: search, + dependencies: [], + }); + + // Komponen search input + const searchComponent = useMemo( + () => ( + + ), + [search], + ); + + // Header component dengan box title + const headerComponent = useMemo( + () => ( + + ), + [searchComponent], + ); + + // Render item untuk daftar report comment + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + { + router.push( + `/admin/forum/${item?.Forum_Komentar?.id}/list-report-comment`, + ); + }} + > + + Pelapor} + value={ + + {item?.User?.username || "-"} + + } + /> + Komentar} + value={ + + {item?.Forum_Komentar?.komentar || "-"} + + } + /> + {item?.deskripsi ? + Deskripsi} + value={ + + {item?.deskripsi|| "-"} + + } + /> : Jenis Laporan} + value={ + + {item?.ForumMaster_KategoriReport?.title || "-"} + + } + /> + } + {/* Jenis Laporan} + value={ + + {item?.ForumMaster_KategoriReport?.title || "-"} + + } + /> */} + + + ), + [], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: search, + emptyMessage: "Belum ada data report komentar", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + item.id?.toString() || `fallback-${item.id}`} + headerComponent={headerComponent} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + onEndReached={pagination.loadMore} + refreshControl={ + + } + /> + ); +} diff --git a/screens/Admin/Forum/ScreenForumReportPosting.tsx b/screens/Admin/Forum/ScreenForumReportPosting.tsx new file mode 100644 index 0000000..00af6c7 --- /dev/null +++ b/screens/Admin/Forum/ScreenForumReportPosting.tsx @@ -0,0 +1,130 @@ +import { SearchInput, StackCustom, TextCustom } from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; +import { router } from "expo-router"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; + +export function Admin_ScreenForumReportPosting() { + const [search, setSearch] = useState(""); + + // Gunakan hook pagination + const pagination = usePagination({ + fetchFunction: async (page, searchQuery) => { + const response = await apiAdminForum({ + category: "report_posting", + search: searchQuery || "", + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } else { + return { data: [] }; + } + }, + pageSize: PAGINATION_DEFAULT_TAKE, + searchQuery: search, + dependencies: [], + }); + + // Komponen search input + const searchComponent = useMemo( + () => ( + + ), + [search], + ); + + // Box title component + const headerComponent = useMemo( + () => ( + + ), + [searchComponent], + ); + + // Render item untuk daftar report posting + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + { + router.push( + `/admin/forum/${item?.Forum_Posting?.id}/list-report-posting`, + ); + }} + > + + Pelapor} + value={ + + {item?.User?.username || "-"} + + } + /> + Postingan} + value={ + + {item?.Forum_Posting?.diskusi || "-"} + + } + /> + + + ), + [], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: search, + emptyMessage: "Belum ada data report posting", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + item.id?.toString() || `fallback-${item.id}`} + headerComponent={headerComponent} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + onEndReached={pagination.loadMore} + refreshControl={ + + } + /> + ); +} diff --git a/service/api-admin/api-admin-forum.ts b/service/api-admin/api-admin-forum.ts index c48a134..3787513 100644 --- a/service/api-admin/api-admin-forum.ts +++ b/service/api-admin/api-admin-forum.ts @@ -3,13 +3,15 @@ import { apiConfig } from "../api-config"; export async function apiAdminForum({ category, search, + page = "1", }: { category: "dashboard" | "posting" | "report_posting" | "report_comment"; search?: string; + page?: string; }) { try { const response = await apiConfig.get( - `/mobile/admin/forum?category=${category}&search=${search}` + `/mobile/admin/forum?category=${category}&search=${search}&page=${page}` ); return response.data; } catch (error) { @@ -78,12 +80,14 @@ export async function apiAdminForumDeactivateComment({ export async function apiAdminForumListReportPostingById({ id, + page = "1", }: { id: string; + page?: string; }) { try { const response = await apiConfig.get( - `/mobile/admin/forum/${id}/report-posting` + `/mobile/admin/forum/${id}/report-posting?page=${page}` ); return response.data; } catch (error) { -- 2.49.1 From 32a42d1b60bff01e4e453ee8db94e43211638ab1 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Fri, 20 Feb 2026 16:48:26 +0800 Subject: [PATCH 3/9] Fix UI Admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User & Image - app/(application)/(image)/take-picture/[id]/index.tsx - app/(application)/(user)/home.tsx Admin – Forum - app/(application)/admin/forum/[id]/index.tsx - app/(application)/admin/forum/[id]/list-comment.tsx - app/(application)/admin/forum/[id]/list-report-comment.tsx Admin Screens – Forum - screens/Admin/Forum/ScreenForumDetailReportPosting.tsx - screens/Admin/Forum/ScreenForumReportComment.tsx - screens/Admin/Forum/ScreenForumReportPosting.tsx New Admin Screens – Forum - screens/Admin/Forum/ScreenForumDetailReportComment.tsx - screens/Admin/Forum/ScreenForumListComment.tsx Home - screens/Home/bottomFeatureSection.tsx Service - service/api-admin/api-admin-forum.ts Docs - docs/prompt-for-qwen-code.md ### No Issue --- .../(image)/take-picture/[id]/index.tsx | 2 +- app/(application)/(user)/home.tsx | 17 +- app/(application)/admin/forum/[id]/index.tsx | 13 +- .../admin/forum/[id]/list-comment.tsx | 90 +----- .../admin/forum/[id]/list-report-comment.tsx | 261 +--------------- docs/prompt-for-qwen-code.md | 10 +- .../Forum/ScreenForumDetailReportComment.tsx | 292 ++++++++++++++++++ .../Forum/ScreenForumDetailReportPosting.tsx | 180 +++++------ .../Admin/Forum/ScreenForumListComment.tsx | 105 +++++++ .../Admin/Forum/ScreenForumReportComment.tsx | 68 ++-- .../Admin/Forum/ScreenForumReportPosting.tsx | 29 +- screens/Home/bottomFeatureSection.tsx | 5 + service/api-admin/api-admin-forum.ts | 8 +- 13 files changed, 547 insertions(+), 533 deletions(-) create mode 100644 screens/Admin/Forum/ScreenForumDetailReportComment.tsx create mode 100644 screens/Admin/Forum/ScreenForumListComment.tsx diff --git a/app/(application)/(image)/take-picture/[id]/index.tsx b/app/(application)/(image)/take-picture/[id]/index.tsx index fd56052..42e22cb 100644 --- a/app/(application)/(image)/take-picture/[id]/index.tsx +++ b/app/(application)/(image)/take-picture/[id]/index.tsx @@ -105,7 +105,7 @@ export default function TakePicture() { - + diff --git a/app/(application)/(user)/home.tsx b/app/(application)/(user)/home.tsx index 38dc8a2..c0a1987 100644 --- a/app/(application)/(user)/home.tsx +++ b/app/(application)/(user)/home.tsx @@ -77,14 +77,14 @@ export default function Application() { ); } - if (data && data?.masterUserRoleId !== "1") { - console.log("User is not admin"); - return ( - - - - ); - } + // if (data && data?.masterUserRoleId !== "1") { + // console.log("User is not admin"); + // return ( + // + // + // + // ); + // } return ( <> @@ -115,6 +115,7 @@ export default function Application() { } footerComponent={ { onLoadData(); - }, [id]) + }, [id]), ); const onLoadData = async () => { @@ -72,6 +72,10 @@ export default function AdminForumDetailPosting() { label: "Total Report", value: data?.JumlahReportPosting || 0, }, + { + label: "Postingan", + value: (data && data?.diskusi) || "-", + }, ]; return ( @@ -111,13 +115,6 @@ export default function AdminForumDetailPosting() { ))} - - - - Postingan - {(data && data?.diskusi) || "-"} - - (null); - const [loadList, setLoadList] = useState(false); - - useFocusEffect( - useCallback(() => { - onLoadComment(); - }, [id]) - ); - - const onLoadComment = async () => { - try { - setLoadList(true); - const response = await apiAdminForumCommentById({ - id: id as string, - category: "get-all", - }); - - if (response.success) { - setListComment(response.data); - } - } catch (error) { - console.log("[ERROR]", error); - setListComment([]); - } finally { - setLoadList(false); - } - }; - - return ( - <> - } - > - - - - {loadList ? ( - - ) : _.isEmpty(listComment) ? ( - - Tidak ada komentar - - ) : ( - listComment?.map((item: any, index: number) => ( - { - router.push( - `/admin/forum/${item.id}/list-report-comment` - ); - }} - /> - } - value2={ - - {item?.countReport || 0} - - } - value3={ - {item?.komentar || "-"} - } - /> - )) - )} - - - - - ); + return ; } diff --git a/app/(application)/admin/forum/[id]/list-report-comment.tsx b/app/(application)/admin/forum/[id]/list-report-comment.tsx index a5915fe..62fe4bd 100644 --- a/app/(application)/admin/forum/[id]/list-report-comment.tsx +++ b/app/(application)/admin/forum/[id]/list-report-comment.tsx @@ -1,262 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - AlertDefaultSystem, - BaseBox, - CenterCustom, - DrawerCustom, - LoaderCustom, - MenuDrawerDynamicGrid, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconDot, IconView } from "@/components/_Icon/IconComponent"; -import { IconTrash } from "@/components/_Icon/IconTrash"; -import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { MainColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { useAuth } from "@/hooks/use-auth"; -import { - apiAdminForumCommentById, - apiAdminForumDeactivateComment, - apiAdminForumListReportCommentById, -} from "@/service/api-admin/api-admin-forum"; -import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import _ from "lodash"; -import { useCallback, useState } from "react"; -import { View } from "react-native"; -import { Divider } from "react-native-paper"; -import Toast from "react-native-toast-message"; +import { Admin_ScreenForumDetailReportComment } from "@/screens/Admin/Forum/ScreenForumDetailReportComment"; export default function AdminForumReportComment() { - const { id } = useLocalSearchParams(); - const { user } = useAuth(); - const [data, setData] = useState(null); - const [listReport, setListReport] = useState(null); - const [loadList, setLoadList] = useState(false); - const [openDrawer, setOpenDrawer] = useState(false); - const [openDrawerAction, setOpenDrawerAction] = useState(false); - const [selectedReport, setSelectedReport] = useState({ - id: "", - username: "", - kategori: "", - keterangan: "", - deskripsi: "", - }); - - useFocusEffect( - useCallback(() => { - onLoadData(); - }, [id]) - ); - - const onLoadData = async () => { - try { - setLoadList(true); - const response = await apiAdminForumCommentById({ - id: id as string, - category: "get-one", - }); - - const responseReport = await apiAdminForumListReportCommentById({ - id: id as string, - }); - - if (response.success) { - setData(response.data); - } - if (responseReport.success) { - setListReport(responseReport.data); - } - } catch (error) { - console.log("[ERROR]", error); - setData(null); - setListReport([]); - } finally { - setLoadList(false); - } - }; - - return ( - <> - } - onPress={() => setOpenDrawer(true)} - /> - } - /> - } - > - - - Username} - text2={{data?.Author?.username || "-"}} - /> - Komentar} - text2={{data?.komentar || "-"}} - /> - - - - - - - - Aksi - - } - text2={Pelapor} - text3={Kategori Report} - /> - - {loadList ? ( - - ) : _.isEmpty(listReport) ? ( - - Tidak ada report - - ) : ( - listReport?.map((item: any, index: number) => ( - - - - } - onPress={() => { - setOpenDrawerAction(true); - setSelectedReport({ - id: item.id, - username: item.User?.username, - kategori: item.ForumMaster_KategoriReport?.title, - keterangan: - item.ForumMaster_KategoriReport?.deskripsi, - deskripsi: item.deskripsi, - }); - }} - /> - - } - text2={ - - {item?.User?.username || "-"} - - } - text3={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> - - - )) - )} - - - - setOpenDrawer(false)} - height={"auto"} - > - , - label: "Hapus Komentar", - value: "delete", - path: "", - color: MainColor.red, - }, - ]} - onPressItem={(item) => { - AlertDefaultSystem({ - title: "Hapus Komentar", - message: "Apakah Anda yakin ingin menghapus komentar ini?", - textLeft: "Batal", - textRight: "Hapus", - onPressRight: async () => { - const deleteComment = await apiAdminForumDeactivateComment({ - id: id as string, - data: { - senderId: user?.id as string, - }, - }); - - // if (!deleteComment.success) { - // Toast.show({ - // type: "error", - // text1: "Komentar gagal dihapus", - // }); - // return; - // } - - setOpenDrawer(false); - Toast.show({ - type: "success", - text1: "Komentar berhasil dihapus", - }); - router.back(); - }, - }); - }} - /> - - - setOpenDrawerAction(false)} - height={"auto"} - > - - Pelapor} - value={{selectedReport?.username || "-"}} - /> - - {selectedReport?.kategori && ( - <> - Kategori Report} - value={ - {selectedReport?.kategori || "-"} - } - /> - Keterangan} - value={ - {selectedReport?.keterangan || "-"} - } - /> - - )} - - {selectedReport?.deskripsi && ( - Deskripsi} - value={ - {selectedReport?.deskripsi || "-"} - } - /> - )} - - - - ); + return ; } diff --git a/docs/prompt-for-qwen-code.md b/docs/prompt-for-qwen-code.md index d640487..1f24be0 100644 --- a/docs/prompt-for-qwen-code.md +++ b/docs/prompt-for-qwen-code.md @@ -55,10 +55,10 @@ Component yang digunakan: components/_ShareComponent/NewWrapper.tsx -File source: app/(application)/admin/forum/[id]/list-report-posting.tsx +File source: app/(application)/admin/forum/[id]/list-comment.tsx Folder tujuan: screens/Admin/Forum -Nama file utama: ScreenForumDetailReportPosting.tsx -Nama function utama: Admin_ScreenForumDetailReportPosting +Nama file utama: ScreenForumListComment.tsx +Nama function utama: Admin_ScreenForumListComment File komponen wrapper: components/_ShareComponent/NewWrapper.tsx Buat file baru pada "Folder tujuan" dengan nama "Nama file utama" dan ubah nama function menjadi "Nama function utama" kemudian clean code, import dan panggil function tersebut pada file "File source" @@ -66,7 +66,7 @@ Analisa juga file "Nama file utama" , jika belum menggunakan NewWrapper pada fil -Function fecth: apiAdminForumListReportPostingById +Function fecth: apiAdminForumCommentById File function fetch: service/api-admin/api-admin-forum.ts Terapkan pagination pada file "Nama file utama" @@ -80,7 +80,7 @@ Gunakan bahasa indonesia pada cli agar saya mudah membacanya. -File refrensi: screens/Admin/Forum/ScreenForumReportPosting.tsx +File refrensi: screens/Admin/Forum/ScreenForumDetailReportPosting.tsx Anda bisa menggunakan refrensi dari "File refrensi" jika butuh pemahaman dengan tipe fitur yang hampir sama Untuk refrensi tampilan Box bisa anda gunakan dari file: screens/Admin/Donation/BoxDonationListOfDonatur.tsx dan buatkan komponen yang mirip untuk list of donatur dengan nama file: BoxDonationListOfInvestor.tsx diff --git a/screens/Admin/Forum/ScreenForumDetailReportComment.tsx b/screens/Admin/Forum/ScreenForumDetailReportComment.tsx new file mode 100644 index 0000000..0f4b19e --- /dev/null +++ b/screens/Admin/Forum/ScreenForumDetailReportComment.tsx @@ -0,0 +1,292 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import { + ActionIcon, + AlertDefaultSystem, + DrawerCustom, + MenuDrawerDynamicGrid, + StackCustom, + TextCustom, +} from "@/components"; +import { IconDot } from "@/components/_Icon/IconComponent"; +import { IconTrash } from "@/components/_Icon/IconTrash"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { useAuth } from "@/hooks/use-auth"; +import { usePagination } from "@/hooks/use-pagination"; +import { + apiAdminForumCommentById, + apiAdminForumDeactivateComment, + apiAdminForumListReportCommentById, +} from "@/service/api-admin/api-admin-forum"; +import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; +import Toast from "react-native-toast-message"; + +export function Admin_ScreenForumDetailReportComment() { + const { user } = useAuth(); + const { id } = useLocalSearchParams(); + const [openDrawerPage, setOpenDrawerPage] = useState(false); + const [openDrawerAction, setOpenDrawerAction] = useState(false); + const [data, setData] = useState(null); + const [selectedReport, setSelectedReport] = useState({ + id: "", + username: "", + kategori: "", + keterangan: "", + deskripsi: "", + }); + + // Load data komentar saat screen fokus + useFocusEffect( + useCallback(() => { + onLoadDataKomentar(); + }, [id]), + ); + + // Pagination untuk list report comment + const pagination = usePagination({ + fetchFunction: async (page) => { + const response = await apiAdminForumListReportCommentById({ + id: id as string, + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } + return { data: [] }; + }, + pageSize: PAGINATION_DEFAULT_TAKE, + dependencies: [id], + }); + + const onLoadDataKomentar = async () => { + try { + const response = await apiAdminForumCommentById({ + id: id as string, + category: "get-one", + }); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } + }; + + // Render item untuk daftar report comment + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + { + setOpenDrawerAction(true); + setSelectedReport({ + id: item?.id, + username: item?.User?.username, + kategori: item?.ForumMaster_KategoriReport?.title, + keterangan: item?.ForumMaster_KategoriReport?.deskripsi, + deskripsi: item?.deskripsi, + }); + }} + > + + Pelapor} + rightItem={ + + {item?.User?.username || "-"} + + } + /> + Jenis Laporan} + rightItem={ + + {item + ? item?.ForumMaster_KategoriReport?.title + ? item?.ForumMaster_KategoriReport?.title + : "Lainnya" + : "-"} + + } + /> + + + ), + [], + ); + + // Header component dengan back button dan menu + const headerComponent = useMemo( + () => ( + } + onPress={() => setOpenDrawerPage(true)} + /> + } + /> + ), + [], + ); + + // Detail komentar component + const ListHeader = useMemo( + () => ( + + + Username} + value={{data?.Author?.username || "-"}} + /> + Komentar} + value={{data?.komentar || "-"}} + /> + + + ), + [data], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + emptyMessage: "Belum ada report komentar", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + <> + + } + /> + + {/* Drawer untuk menu halaman (hapus komentar) */} + setOpenDrawerPage(false)} + height={"auto"} + > + , + label: "Hapus Komentar", + value: "delete", + path: "", + color: MainColor.red, + }, + ]} + onPressItem={(item) => { + AlertDefaultSystem({ + title: "Hapus Komentar", + message: "Apakah Anda yakin ingin menghapus komentar ini?", + textLeft: "Batal", + textRight: "Hapus", + onPressRight: async () => { + const response = await apiAdminForumDeactivateComment({ + id: id as string, + data: { + senderId: user?.id as string, + }, + }); + + if (!response.success) { + Toast.show({ + type: "error", + text1: "Komentar gagal dihapus", + }); + return; + } + + setOpenDrawerPage(false); + Toast.show({ + type: "success", + text1: "Komentar berhasil dihapus", + }); + router.back(); + }, + }); + }} + /> + + + {/* Drawer untuk detail report comment */} + setOpenDrawerAction(false)} + height={"auto"} + > + + Pelapor} + value={{selectedReport?.username || "-"}} + /> + + {selectedReport?.kategori && ( + <> + Kategori Report} + value={ + {selectedReport?.kategori || "-"} + } + /> + Keterangan} + value={ + {selectedReport?.keterangan || "-"} + } + /> + + )} + + {selectedReport?.deskripsi && ( + Deskripsi} + value={ + {selectedReport?.deskripsi || "-"} + } + /> + )} + + + + ); +} diff --git a/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx b/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx index b254ffd..725b437 100644 --- a/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx +++ b/screens/Admin/Forum/ScreenForumDetailReportPosting.tsx @@ -2,39 +2,31 @@ import { ActionIcon, AlertDefaultSystem, - BadgeCustom, - BaseBox, - CenterCustom, DrawerCustom, MenuDrawerDynamicGrid, StackCustom, TextCustom, } from "@/components"; -import { IconDot, IconView } from "@/components/_Icon/IconComponent"; +import { IconDot } from "@/components/_Icon/IconComponent"; import { IconTrash } from "@/components/_Icon/IconTrash"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import { MainColor } from "@/constants/color-palet"; -import { - ICON_SIZE_BUTTON, - PAGINATION_DEFAULT_TAKE, -} from "@/constants/constans-value"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; -import { usePagination } from "@/hooks/use-pagination"; import { useAuth } from "@/hooks/use-auth"; +import { usePagination } from "@/hooks/use-pagination"; import { apiAdminForumDeactivatePosting, apiAdminForumListReportPostingById, apiAdminForumPostingById, } from "@/service/api-admin/api-admin-forum"; import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import _ from "lodash"; import { useCallback, useMemo, useState } from "react"; -import { RefreshControl, View } from "react-native"; -import { Divider } from "react-native-paper"; +import { RefreshControl } from "react-native"; import Toast from "react-native-toast-message"; export function Admin_ScreenForumDetailReportPosting() { @@ -55,12 +47,12 @@ export function Admin_ScreenForumDetailReportPosting() { useFocusEffect( useCallback(() => { onLoadDataPosting(); - }, [id]) + }, [id]), ); // Pagination untuk list report const pagination = usePagination({ - fetchFunction: async (page, searchQuery) => { + fetchFunction: async (page) => { const response = await apiAdminForumListReportPostingById({ id: id as string, page: String(page), @@ -91,41 +83,50 @@ export function Admin_ScreenForumDetailReportPosting() { // Render item untuk daftar report const renderItem = useCallback( - ({ item }: { item: any }) => ( - - - } - onPress={() => { - setOpenDrawerAction(true); - setSelectedReport({ - id: item?.id, - username: item?.User?.username, - kategori: item?.ForumMaster_KategoriReport?.title, - keterangan: item?.ForumMaster_KategoriReport?.deskripsi, - deskripsi: item?.deskripsi, - }); - }} - /> - - } - text2={ - - {item?.User?.username || "-"} - - } - text3={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> - - + ({ item, index }: { item: any; index: number }) => ( + { + setOpenDrawerAction(true); + setSelectedReport({ + id: item?.id, + username: item?.User?.username, + kategori: item?.ForumMaster_KategoriReport?.title, + keterangan: item?.ForumMaster_KategoriReport?.deskripsi, + deskripsi: item?.deskripsi, + }); + }} + > + + Pelapor} + rightItem={ + + {item?.User?.username || "-"} + + } + /> + Jenis Laporan} + rightItem={ + + {item + ? item?.ForumMaster_KategoriReport?.title + ? item?.ForumMaster_KategoriReport?.title + : "Lainnya" + : "-"} + + } + /> + + ), - [] + [], ); // Header component dengan detail postingan @@ -141,75 +142,33 @@ export function Admin_ScreenForumDetailReportPosting() { } /> ), - [] + [], ); // Detail postingan component - const postingDetailComponent = useMemo( + const ListHeader = useMemo( () => ( - - - Username} - text2={{data?.Author?.username || "-"}} - /> - - Status} - text2={ - data && data?.ForumMaster_StatusPosting?.status ? ( - - {data?.ForumMaster_StatusPosting?.status === "Open" - ? "Open" - : "Close"} - - ) : ( - {"-"} - ) + + + Username} + rightItem={ + {data ? data?.Author?.username : "-"} } /> - Postingan} - text2={{data?.diskusi || "-"}} + Postingan} + rightItem={{data ? data?.diskusi : "-"}} /> - + ), - [data] - ); - - // Box title untuk daftar report - const reportListTitleComponent = useMemo( - () => , - [] - ); - - // Header untuk kolom daftar report - const reportListHeaderComponent = useMemo( - () => ( - - {postingDetailComponent} - {reportListTitleComponent} - - Aksi - - } - text2={Pelapor} - text3={Kategori Report} - /> - - - ), - [postingDetailComponent, reportListTitleComponent] + [data], ); // Buat komponen-komponen pagination @@ -231,7 +190,7 @@ export function Admin_ScreenForumDetailReportPosting() { listData={pagination.listData} renderItem={renderItem} headerComponent={headerComponent} - ListHeaderComponent={reportListHeaderComponent} + ListHeaderComponent={ListHeader} ListEmptyComponent={ListEmptyComponent} ListFooterComponent={ListFooterComponent} onEndReached={pagination.loadMore} @@ -295,7 +254,6 @@ export function Admin_ScreenForumDetailReportPosting() { /> - {/* Drawer untuk detail report */} setOpenDrawerAction(false)} diff --git a/screens/Admin/Forum/ScreenForumListComment.tsx b/screens/Admin/Forum/ScreenForumListComment.tsx new file mode 100644 index 0000000..fa8b88b --- /dev/null +++ b/screens/Admin/Forum/ScreenForumListComment.tsx @@ -0,0 +1,105 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import { StackCustom, TextCustom } from "@/components"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { useAuth } from "@/hooks/use-auth"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminForumCommentById } from "@/service/api-admin/api-admin-forum"; +import { router, useLocalSearchParams } from "expo-router"; +import { useCallback, useMemo, useState } from "react"; +import { RefreshControl } from "react-native"; +import { Divider } from "react-native-paper"; + +export function Admin_ScreenForumListComment() { + const { user } = useAuth(); + const { id } = useLocalSearchParams(); + const [openDrawerAction, setOpenDrawerAction] = useState(false); + const [selectedComment, setSelectedComment] = useState({ + id: "", + komentar: "", + }); + + // Pagination untuk list comment + const pagination = usePagination({ + fetchFunction: async (page) => { + const response = await apiAdminForumCommentById({ + id: id as string, + category: "get-all", + page: String(page), + }); + + if (response.success) { + return { data: response.data }; + } + return { data: [] }; + }, + pageSize: PAGINATION_DEFAULT_TAKE, + dependencies: [id], + }); + + // Render item untuk daftar komentar + const renderItem = useCallback( + ({ item, index }: { item: any; index: number }) => ( + { + router.push(`/admin/forum/${item.id}/list-report-comment`); + }} + > + + + Report : {item?.countReport || 0} + + + {item?.komentar || "-"} + + + ), + [], + ); + + // Header component dengan back button + const headerComponent = useMemo( + () => , + [], + ); + + // Buat komponen-komponen pagination + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + emptyMessage: "Belum ada komentar", + emptySearchMessage: "Tidak ada hasil pencarian", + isInitialLoad: pagination.isInitialLoad, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + return ( + <> + + } + /> + + ); +} diff --git a/screens/Admin/Forum/ScreenForumReportComment.tsx b/screens/Admin/Forum/ScreenForumReportComment.tsx index f306a77..437833c 100644 --- a/screens/Admin/Forum/ScreenForumReportComment.tsx +++ b/screens/Admin/Forum/ScreenForumReportComment.tsx @@ -1,16 +1,15 @@ import { SearchInput, StackCustom, TextCustom } from "@/components"; import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { usePagination } from "@/hooks/use-pagination"; import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; -import { router } from "expo-router"; +import { router, useFocusEffect } from "expo-router"; import { useCallback, useMemo, useState } from "react"; import { RefreshControl } from "react-native"; -import { Divider } from "react-native-paper"; export function Admin_ScreenForumReportComment() { const [search, setSearch] = useState(""); @@ -25,7 +24,6 @@ export function Admin_ScreenForumReportComment() { }); if (response.success) { - console.log("CEK", JSON.stringify(response.data, null, 2)); return { data: response.data }; } else { return { data: [] }; @@ -36,6 +34,12 @@ export function Admin_ScreenForumReportComment() { dependencies: [], }); + useFocusEffect( + useCallback(() => { + pagination.onRefresh(); + }, []), + ); + // Komponen search input const searchComponent = useMemo( () => ( @@ -73,47 +77,27 @@ export function Admin_ScreenForumReportComment() { }} > - Pelapor} - value={ - - {item?.User?.username || "-"} + Jumlah Report} + rightItem={ + + {item?.count || "-"} } /> - Komentar} - value={ - - {item?.Forum_Komentar?.komentar || "-"} - - } - /> - {item?.deskripsi ? - Deskripsi} - value={ - - {item?.deskripsi|| "-"} - - } - /> : Jenis Laporan} - value={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> - } - {/* Jenis Laporan} - value={ - - {item?.ForumMaster_KategoriReport?.title || "-"} - - } - /> */} + + Komentar} + rightItem={ + + {item?.Forum_Komentar?.komentar || "-"} + + } + /> ), diff --git a/screens/Admin/Forum/ScreenForumReportPosting.tsx b/screens/Admin/Forum/ScreenForumReportPosting.tsx index 00af6c7..b891919 100644 --- a/screens/Admin/Forum/ScreenForumReportPosting.tsx +++ b/screens/Admin/Forum/ScreenForumReportPosting.tsx @@ -1,14 +1,14 @@ import { SearchInput, StackCustom, TextCustom } from "@/components"; import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import { GridSpan_4_8 } from "@/components/_ShareComponent/GridSpan_4_8"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import { MainColor } from "@/constants/color-palet"; import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { usePagination } from "@/hooks/use-pagination"; import { apiAdminForum } from "@/service/api-admin/api-admin-forum"; -import { router } from "expo-router"; +import { router, useFocusEffect } from "expo-router"; import { useCallback, useMemo, useState } from "react"; import { RefreshControl } from "react-native"; @@ -25,6 +25,7 @@ export function Admin_ScreenForumReportPosting() { }); if (response.success) { + return { data: response.data }; } else { return { data: [] }; @@ -35,6 +36,12 @@ export function Admin_ScreenForumReportPosting() { dependencies: [], }); + useFocusEffect( + useCallback(() => { + pagination.onRefresh(); + }, []), + ); + // Komponen search input const searchComponent = useMemo( () => ( @@ -72,17 +79,21 @@ export function Admin_ScreenForumReportPosting() { }} > - Pelapor} - value={ + Jumlah Report} + rightItem={ - {item?.User?.username || "-"} + {item?.count|| "-"} } /> - Postingan} - value={ + Postingan} + rightItem={ {item?.Forum_Posting?.diskusi || "-"} diff --git a/screens/Home/bottomFeatureSection.tsx b/screens/Home/bottomFeatureSection.tsx index d01e602..9e56f64 100644 --- a/screens/Home/bottomFeatureSection.tsx +++ b/screens/Home/bottomFeatureSection.tsx @@ -6,6 +6,7 @@ import Icon from "react-native-vector-icons/FontAwesome"; import { stylesHome } from "./homeViewStyle"; import { router, useFocusEffect } from "expo-router"; import { apiJobGetAll } from "@/service/api-client/api-job"; +import CustomSkeleton from "@/components/_ShareComponent/SkeletonCustom"; export default function Home_BottomFeatureSection() { const [listData, setListData] = useState([]); @@ -35,6 +36,10 @@ export default function Home_BottomFeatureSection() { }, []) ); + if (!listData || listData.length === 0) { + return + } + return ( <> router.push("/job")}> diff --git a/service/api-admin/api-admin-forum.ts b/service/api-admin/api-admin-forum.ts index 3787513..397a081 100644 --- a/service/api-admin/api-admin-forum.ts +++ b/service/api-admin/api-admin-forum.ts @@ -30,13 +30,15 @@ export async function apiAdminForumPostingById({ id }: { id: string }) { export async function apiAdminForumCommentById({ id, category, + page = "1", }: { id: string; category: "get-all" | "get-one"; + page?: string; }) { try { const response = await apiConfig.get( - `/mobile/admin/forum/${id}/comment?category=${category}` + `/mobile/admin/forum/${id}/comment?category=${category}&page=${page}` ); return response.data; } catch (error) { @@ -46,12 +48,14 @@ export async function apiAdminForumCommentById({ export async function apiAdminForumListReportCommentById({ id, + page = "1", }: { id: string; + page?: string; }) { try { const response = await apiConfig.get( - `/mobile/admin/forum/${id}/report-comment` + `/mobile/admin/forum/${id}/report-comment?page=${page}` ); return response.data; } catch (error) { -- 2.49.1 From 66e6aebf41c53eda9a9352972d1443a7c68b52bb Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Tue, 24 Feb 2026 07:18:01 +0800 Subject: [PATCH 4/9] Fixed Admin Package Config & Dependencies - app.config.js - package.json - bun.lock - ios/Podfile - ios/HIPMIBadungConnect.xcodeproj/project.pbxproj Home - screens/Home/tabsList.ts Maps - screens/Maps/MapsView2.tsx ### No Issue --- app.config.js | 1 + bun.lock | 61 ++++++++++++++++--- .../project.pbxproj | 36 +++++++++++ ios/Podfile | 3 + package.json | 1 + screens/Home/tabsList.ts | 6 +- screens/Maps/MapsView2.tsx | 56 ++++++++++------- 7 files changed, 133 insertions(+), 31 deletions(-) diff --git a/app.config.js b/app.config.js index 82e67ec..ea4a7fd 100644 --- a/app.config.js +++ b/app.config.js @@ -87,6 +87,7 @@ export default { iosDisplayInForeground: true, }, ], + "@maplibre/maplibre-react-native", ], experiments: { diff --git a/bun.lock b/bun.lock index 0fb9e3e..3e34f48 100644 --- a/bun.lock +++ b/bun.lock @@ -5,6 +5,7 @@ "name": "hipmi-mobile", "dependencies": { "@expo/vector-icons": "^15.0.2", + "@maplibre/maplibre-react-native": "^10.4.2", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/datetimepicker": "8.4.4", "@react-native-firebase/app": "^23.7.0", @@ -580,6 +581,8 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + "@maplibre/maplibre-react-native": ["@maplibre/maplibre-react-native@10.4.2", "", { "dependencies": { "@turf/distance": "^7.1.0", "@turf/helpers": "^7.1.0", "@turf/length": "^7.1.0", "@turf/nearest-point-on-line": "^7.1.0", "debounce": "^2.2.0" }, "peerDependencies": { "@expo/config-plugins": ">=7", "@types/geojson": "^7946.0.0", "@types/react": ">=16.6.1", "react": ">=16.6.1", "react-native": ">=0.59.9" }, "optionalPeers": ["@expo/config-plugins", "@types/geojson", "@types/react"] }, "sha512-5qAfaEe66eMXyILklm2DMHwyaXwXxsZWVop4BqfU7AyTg13LHAcaMmLJNJ3jPkMtiJvjH2m8ywGnobdIg2I0lg=="], + "@motionone/animation": ["@motionone/animation@10.18.0", "", { "dependencies": { "@motionone/easing": "^10.18.0", "@motionone/types": "^10.17.1", "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw=="], "@motionone/dom": ["@motionone/dom@10.12.0", "", { "dependencies": { "@motionone/animation": "^10.12.0", "@motionone/generators": "^10.12.0", "@motionone/types": "^10.12.0", "@motionone/utils": "^10.12.0", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } }, "sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw=="], @@ -772,21 +775,21 @@ "@turf/destination": ["@turf/destination@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ=="], - "@turf/distance": ["@turf/distance@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg=="], + "@turf/distance": ["@turf/distance@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@turf/invariant": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-9drWgd46uHPPyzgrcRQLgSvdS/SjVlQ6ZIBoRQagS5P2kSjUbcOXHIMeOSPwfxwlKhEtobLyr+IiR2ns1TfF8w=="], - "@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + "@turf/helpers": ["@turf/helpers@7.3.4", "", { "dependencies": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g=="], - "@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + "@turf/invariant": ["@turf/invariant@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-88Eo4va4rce9sNZs6XiMJowWkikM3cS2TBhaCKlU+GFHdNf8PFEpiU42VDU8q5tOF6/fu21Rvlke5odgOGW4AQ=="], - "@turf/length": ["@turf/length@6.5.0", "", { "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig=="], + "@turf/length": ["@turf/length@7.3.4", "", { "dependencies": { "@turf/distance": "7.3.4", "@turf/helpers": "7.3.4", "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-Dg1GnQ/B2go5NIWXt91N4L7XTjIgIWCftBSYIXkrpIM7QGjItzglek0Z5caytvb8ZRWXzZOGs8//+Q5we91WuQ=="], "@turf/line-intersect": ["@turf/line-intersect@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" } }, "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA=="], "@turf/line-segment": ["@turf/line-segment@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw=="], - "@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], + "@turf/meta": ["@turf/meta@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw=="], - "@turf/nearest-point-on-line": ["@turf/nearest-point-on-line@6.5.0", "", { "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg=="], + "@turf/nearest-point-on-line": ["@turf/nearest-point-on-line@7.3.4", "", { "dependencies": { "@turf/distance": "7.3.4", "@turf/helpers": "7.3.4", "@turf/invariant": "7.3.4", "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-DQrP3lRju83rIXFN68tUEpc7ki/eRwdwBkK2CTT4RAcyCxbcH2NGJPQv8dYiww/Ar77u1WLVn+aINXZH904dWw=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], @@ -2692,11 +2695,41 @@ "@react-native/dev-middleware/open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], + "@rnmapbox/maps/@turf/distance": ["@turf/distance@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg=="], + + "@rnmapbox/maps/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@rnmapbox/maps/@turf/length": ["@turf/length@6.5.0", "", { "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig=="], + + "@rnmapbox/maps/@turf/nearest-point-on-line": ["@turf/nearest-point-on-line@6.5.0", "", { "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg=="], + "@testing-library/react-native/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "@turf/bbox/@turf/helpers": ["@turf/helpers@7.3.4", "", { "dependencies": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g=="], + "@turf/along/@turf/distance": ["@turf/distance@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg=="], - "@turf/bbox/@turf/meta": ["@turf/meta@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw=="], + "@turf/along/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@turf/along/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@turf/bearing/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@turf/bearing/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@turf/destination/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@turf/destination/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@turf/line-intersect/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@turf/line-intersect/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@turf/line-intersect/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], + + "@turf/line-segment/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "@turf/line-segment/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@turf/line-segment/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -2790,6 +2823,10 @@ "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "geojson-rbush/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], + + "geojson-rbush/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], + "geojson-rbush/@types/geojson": ["@types/geojson@7946.0.8", "", {}, "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA=="], "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -3060,6 +3097,14 @@ "@react-native/dev-middleware/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "@rnmapbox/maps/@turf/distance/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@rnmapbox/maps/@turf/length/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], + + "@rnmapbox/maps/@turf/nearest-point-on-line/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], + + "@rnmapbox/maps/@turf/nearest-point-on-line/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], + "@testing-library/react-native/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], "@testing-library/react-native/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], diff --git a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj index 09b1789..50b5e37 100644 --- a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj +++ b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj @@ -150,6 +150,8 @@ 1A2B5C8B77E56B3325ADC6E7 /* [CP] Embed Pods Frameworks */, AECA4AD2A3DFA75F552CA1F1 /* [CP] Copy Pods Resources */, 58D7AF30081BAAEFD090045C /* [CP-User] [RNFB] Core Configuration */, + 7A7548934A6A4A868E76F842 /* Remove signature files (Xcode workaround) */, + 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */, ); buildRules = ( ); @@ -415,6 +417,40 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HIPMIBadungConnect/Pods-HIPMIBadungConnect-resources.sh\"\n"; showEnvVarsInLog = 0; }; + 7A7548934A6A4A868E76F842 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + name = "Remove signature files (Xcode workaround)"; + inputPaths = ( + ); + outputPaths = ( + ); + shellPath = /bin/sh; + shellScript = " + echo \"Remove signature files (Xcode workaround)\"; + rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; + "; + }; + 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + name = "Remove signature files (Xcode workaround)"; + inputPaths = ( + ); + outputPaths = ( + ); + shellPath = /bin/sh; + shellScript = " + echo \"Remove signature files (Xcode workaround)\"; + rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; + "; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/ios/Podfile b/ios/Podfile index 25c17cf..c0cf61f 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -56,6 +56,9 @@ target 'HIPMIBadungConnect' do # @generated begin post_installer - expo prebuild (DO NOT MODIFY) sync-4092f82b887b5b9edb84642c2a56984d69b9a403 post_install do |installer| +# @generated begin @maplibre/maplibre-react-native:post-install - expo prebuild (DO NOT MODIFY) sync-6e76c80af0d70c0003d06822dd59b7c729fca472 + $MLRN.post_install(installer) +# @generated end @maplibre/maplibre-react-native:post-install # @generated begin @rnmapbox/maps-post_installer - expo prebuild (DO NOT MODIFY) sync-c4e8f90e96f6b6c6ea9241dd7b52ab5f57f7bf36 $RNMapboxMaps.post_install(installer) # @generated end @rnmapbox/maps-post_installer diff --git a/package.json b/package.json index b1a150a..f116212 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@expo/vector-icons": "^15.0.2", + "@maplibre/maplibre-react-native": "^10.4.2", "@react-native-async-storage/async-storage": "2.2.0", "@react-native-community/datetimepicker": "8.4.4", "@react-native-firebase/app": "^23.7.0", diff --git a/screens/Home/tabsList.ts b/screens/Home/tabsList.ts index 0a57395..6d23832 100644 --- a/screens/Home/tabsList.ts +++ b/screens/Home/tabsList.ts @@ -33,8 +33,10 @@ export const tabsHome: any = ({ activeIcon: "map", label: "Maps", path: "/maps", - isActive: Platform.OS === "ios" ? true : false, - disabled: Platform.OS === "ios" ? false : true, + // isActive: Platform.OS === "ios" ? true : false, + // disabled: Platform.OS === "ios" ? false : true, + isActive: true, + disabled: false, }, { id: "profile", diff --git a/screens/Maps/MapsView2.tsx b/screens/Maps/MapsView2.tsx index 3bd9e9a..f427dad 100644 --- a/screens/Maps/MapsView2.tsx +++ b/screens/Maps/MapsView2.tsx @@ -1,28 +1,42 @@ -import { TextCustom, ViewWrapper } from "@/components"; -import Mapbox from "@rnmapbox/maps"; -import { View } from "react-native"; +import React from "react"; +import { StyleSheet, View } from "react-native"; -// Nonaktifkan telemetry (opsional, untuk privasi) -Mapbox.setTelemetryEnabled(false); +// Cek versi >= 10.x gunakan ini +import { MapView, Camera, PointAnnotation } from "@maplibre/maplibre-react-native"; + +const MAP_STYLE = "https://tiles.openfreemap.org/styles/liberty"; -// Gunakan style OSM gratis -const MAP_STYLE_URL = "https://tiles.stadiamaps.com/styles/osm_bright.json"; -// Atau gunakan MapLibre default: -// const MAP_STYLE_URL = 'https://demotiles.maplibre.org/style.json'; export default function MapsView2() { return ( - <> - - - - - - - - + + + + + + + + + ); } + +const styles = StyleSheet.create({ + container: { flex: 1 }, + map: { flex: 1 }, + marker: { + width: 16, + height: 16, + borderRadius: 8, + backgroundColor: "red", + }, +}); \ No newline at end of file -- 2.49.1 From 208b0ce813e2c1122c57b4c58e158170271a8580 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Tue, 24 Feb 2026 16:41:43 +0800 Subject: [PATCH 5/9] Fix Maps Config & Dependencies - app.config.js - package.json - bun.lock - ios/Podfile - ios/HIPMIBadungConnect.xcodeproj/project.pbxproj User Pages - app/(application)/(user)/maps/index.tsx - app/(application)/(user)/portofolio/[id]/index.tsx Maps - screens/Maps/MapsView2.tsx ### No Issue --- .../project.pbxproj | 36 +++++++++++++++++++ ios/Podfile | 10 ------ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj index 50b5e37..e2849b6 100644 --- a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj +++ b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj @@ -152,6 +152,8 @@ 58D7AF30081BAAEFD090045C /* [CP-User] [RNFB] Core Configuration */, 7A7548934A6A4A868E76F842 /* Remove signature files (Xcode workaround) */, 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */, + B6436A881D9B484CB6D18085 /* Remove signature files (Xcode workaround) */, + 2BAE9DA9D4244A23B39651C7 /* Remove signature files (Xcode workaround) */, ); buildRules = ( ); @@ -451,6 +453,40 @@ rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; "; }; + B6436A881D9B484CB6D18085 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + name = "Remove signature files (Xcode workaround)"; + inputPaths = ( + ); + outputPaths = ( + ); + shellPath = /bin/sh; + shellScript = " + echo \"Remove signature files (Xcode workaround)\"; + rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; + "; + }; + 2BAE9DA9D4244A23B39651C7 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + name = "Remove signature files (Xcode workaround)"; + inputPaths = ( + ); + outputPaths = ( + ); + shellPath = /bin/sh; + shellScript = " + echo \"Remove signature files (Xcode workaround)\"; + rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; + "; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/ios/Podfile b/ios/Podfile index c0cf61f..4a0dd31 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -35,13 +35,6 @@ target 'HIPMIBadungConnect' do use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] - # @generated begin pre_installer - expo prebuild (DO NOT MODIFY) sync-c8812095000d6054b846ce74840f0ffb540c2757 - pre_install do |installer| - # @generated begin @rnmapbox/maps-pre_installer - expo prebuild (DO NOT MODIFY) sync-ea4905840bf9fcea0acc62e92aa2e784f9d760f8 - $RNMapboxMaps.pre_install(installer) - # @generated end @rnmapbox/maps-pre_installer - end - # @generated end pre_installer use_react_native!( :path => config[:reactNativePath], @@ -59,9 +52,6 @@ target 'HIPMIBadungConnect' do # @generated begin @maplibre/maplibre-react-native:post-install - expo prebuild (DO NOT MODIFY) sync-6e76c80af0d70c0003d06822dd59b7c729fca472 $MLRN.post_install(installer) # @generated end @maplibre/maplibre-react-native:post-install - # @generated begin @rnmapbox/maps-post_installer - expo prebuild (DO NOT MODIFY) sync-c4e8f90e96f6b6c6ea9241dd7b52ab5f57f7bf36 - $RNMapboxMaps.post_install(installer) - # @generated end @rnmapbox/maps-post_installer # Fix all script phases with incorrect paths installer.pods_project.targets.each do |target| -- 2.49.1 From 768b0caa9e8f3d60d9dd6f2705b4c18a70e30e75 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Tue, 24 Feb 2026 16:48:37 +0800 Subject: [PATCH 6/9] Fix maps ### No Issue --- app.config.js | 1 - app/(application)/(user)/maps/index.tsx | 14 +- .../(user)/portofolio/[id]/index.tsx | 37 +-- bun.lock | 69 ----- package.json | 1 - screens/Maps/MapsView2.tsx | 238 ++++++++++++++++-- 6 files changed, 246 insertions(+), 114 deletions(-) diff --git a/app.config.js b/app.config.js index ea4a7fd..3a7b560 100644 --- a/app.config.js +++ b/app.config.js @@ -77,7 +77,6 @@ export default { }, ], "expo-font", - "@rnmapbox/maps", "@react-native-firebase/app", [ "expo-notifications", diff --git a/app/(application)/(user)/maps/index.tsx b/app/(application)/(user)/maps/index.tsx index 96907e9..6e61b6f 100644 --- a/app/(application)/(user)/maps/index.tsx +++ b/app/(application)/(user)/maps/index.tsx @@ -1,6 +1,8 @@ +import { BackButton } from "@/components"; import MapsView from "@/screens/Maps/MapsView"; import MapsView2 from "@/screens/Maps/MapsView2"; -import { Text, View } from "react-native"; +import { Stack } from "expo-router"; +import { Platform, Text, View } from "react-native"; export interface LocationItem { id: string | number; @@ -13,8 +15,14 @@ export interface LocationItem { export default function Maps() { return ( <> - - {/* , */} + {/* , + }} + /> */} + {Platform.OS === "ios" ? : } + {/* */} {/* Map disabled */} ); diff --git a/app/(application)/(user)/portofolio/[id]/index.tsx b/app/(application)/(user)/portofolio/[id]/index.tsx index ecffdfa..0d51e2d 100644 --- a/app/(application)/(user)/portofolio/[id]/index.tsx +++ b/app/(application)/(user)/portofolio/[id]/index.tsx @@ -1,12 +1,12 @@ /* eslint-disable react-hooks/exhaustive-deps */ import { - ButtonCustom, - DrawerCustom, - DummyLandscapeImage, - LoaderCustom, - Spacing, - StackCustom, - TextCustom, + ButtonCustom, + DrawerCustom, + DummyLandscapeImage, + LoaderCustom, + Spacing, + StackCustom, + TextCustom, } from "@/components"; import LeftButtonCustom from "@/components/Button/BackButton"; import GridTwoView from "@/components/_ShareComponent/GridTwoView"; @@ -94,11 +94,14 @@ export default function Portofolio() { data={data} listSubBidang={data?.Portofolio_BidangDanSubBidangBisnis as any[]} /> - + {data?.BusinessMaps && ( + + )} + @@ -135,10 +138,12 @@ export default function Portofolio() { closeDrawer={() => setOpenDrawerLocation(false)} height={"auto"} > - + {data?.BusinessMaps?.imageId && ( + + )} =47.0.0", "mapbox-gl": "^2.9.0", "react": ">=17.0.0", "react-dom": ">= 17.0.0", "react-native": ">=0.69" }, "optionalPeers": ["expo", "mapbox-gl", "react-dom"] }, "sha512-OfjW0rHp5bUWfzBo5fZ7qdKwAzGoocXYTsSssSPVMxZ2Y7axuhcbmsO5bV6gg+BJs5RwEsghzwTIoGydBNUClA=="], - "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], "@sideway/address": ["@sideway/address@4.1.5", "", { "dependencies": { "@hapi/hoek": "^9.0.0" } }, "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q=="], @@ -767,14 +764,6 @@ "@tsconfig/node18": ["@tsconfig/node18@18.2.6", "", {}, "sha512-eAWQzAjPj18tKnDzmWstz4OyWewLUNBm9tdoN9LayzoboRktYx3Enk1ZXPmThj55L7c4VWYq/Bzq0A51znZfhw=="], - "@turf/along": ["@turf/along@6.5.0", "", { "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-LLyWQ0AARqJCmMcIEAXF4GEu8usmd4Kbz3qk1Oy5HoRNpZX47+i5exQtmIWKdqJ1MMhW26fCTXgpsEs5zgJ5gw=="], - - "@turf/bbox": ["@turf/bbox@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA=="], - - "@turf/bearing": ["@turf/bearing@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A=="], - - "@turf/destination": ["@turf/destination@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ=="], - "@turf/distance": ["@turf/distance@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@turf/invariant": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-9drWgd46uHPPyzgrcRQLgSvdS/SjVlQ6ZIBoRQagS5P2kSjUbcOXHIMeOSPwfxwlKhEtobLyr+IiR2ns1TfF8w=="], "@turf/helpers": ["@turf/helpers@7.3.4", "", { "dependencies": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g=="], @@ -783,10 +772,6 @@ "@turf/length": ["@turf/length@7.3.4", "", { "dependencies": { "@turf/distance": "7.3.4", "@turf/helpers": "7.3.4", "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-Dg1GnQ/B2go5NIWXt91N4L7XTjIgIWCftBSYIXkrpIM7QGjItzglek0Z5caytvb8ZRWXzZOGs8//+Q5we91WuQ=="], - "@turf/line-intersect": ["@turf/line-intersect@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-segment": "^6.5.0", "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" } }, "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA=="], - - "@turf/line-segment": ["@turf/line-segment@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw=="], - "@turf/meta": ["@turf/meta@7.3.4", "", { "dependencies": { "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw=="], "@turf/nearest-point-on-line": ["@turf/nearest-point-on-line@7.3.4", "", { "dependencies": { "@turf/distance": "7.3.4", "@turf/helpers": "7.3.4", "@turf/invariant": "7.3.4", "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "sha512-DQrP3lRju83rIXFN68tUEpc7ki/eRwdwBkK2CTT4RAcyCxbcH2NGJPQv8dYiww/Ar77u1WLVn+aINXZH904dWw=="], @@ -1485,8 +1470,6 @@ "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], - "geojson-rbush": ["geojson-rbush@3.2.0", "", { "dependencies": { "@turf/bbox": "*", "@turf/helpers": "6.x", "@turf/meta": "6.x", "@types/geojson": "7946.0.8", "rbush": "^3.0.1" } }, "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w=="], - "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], @@ -2085,14 +2068,10 @@ "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], - "quickselect": ["quickselect@2.0.0", "", {}, "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "raw-body": ["raw-body@2.5.3", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "unpipe": "~1.0.0" } }, "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA=="], - "rbush": ["rbush@3.0.1", "", { "dependencies": { "quickselect": "^2.0.0" } }, "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w=="], - "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], "react": ["react@19.1.0", "", {}, "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg=="], @@ -2695,42 +2674,8 @@ "@react-native/dev-middleware/open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], - "@rnmapbox/maps/@turf/distance": ["@turf/distance@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg=="], - - "@rnmapbox/maps/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@rnmapbox/maps/@turf/length": ["@turf/length@6.5.0", "", { "dependencies": { "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-5pL5/pnw52fck3oRsHDcSGrj9HibvtlrZ0QNy2OcW8qBFDNgZ4jtl6U7eATVoyWPKBHszW3dWETW+iLV7UARig=="], - - "@rnmapbox/maps/@turf/nearest-point-on-line": ["@turf/nearest-point-on-line@6.5.0", "", { "dependencies": { "@turf/bearing": "^6.5.0", "@turf/destination": "^6.5.0", "@turf/distance": "^6.5.0", "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0", "@turf/line-intersect": "^6.5.0", "@turf/meta": "^6.5.0" } }, "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg=="], - "@testing-library/react-native/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], - "@turf/along/@turf/distance": ["@turf/distance@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0", "@turf/invariant": "^6.5.0" } }, "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg=="], - - "@turf/along/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@turf/along/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@turf/bearing/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@turf/bearing/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@turf/destination/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@turf/destination/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@turf/line-intersect/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@turf/line-intersect/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@turf/line-intersect/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], - - "@turf/line-segment/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "@turf/line-segment/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@turf/line-segment/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], - "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], @@ -2823,12 +2768,6 @@ "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - "geojson-rbush/@turf/helpers": ["@turf/helpers@6.5.0", "", {}, "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw=="], - - "geojson-rbush/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], - - "geojson-rbush/@types/geojson": ["@types/geojson@7946.0.8", "", {}, "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA=="], - "glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "hoist-non-react-statics/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], @@ -3097,14 +3036,6 @@ "@react-native/dev-middleware/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "@rnmapbox/maps/@turf/distance/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@rnmapbox/maps/@turf/length/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], - - "@rnmapbox/maps/@turf/nearest-point-on-line/@turf/invariant": ["@turf/invariant@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg=="], - - "@rnmapbox/maps/@turf/nearest-point-on-line/@turf/meta": ["@turf/meta@6.5.0", "", { "dependencies": { "@turf/helpers": "^6.5.0" } }, "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA=="], - "@testing-library/react-native/pretty-format/@jest/schemas": ["@jest/schemas@30.0.5", "", { "dependencies": { "@sinclair/typebox": "^0.34.0" } }, "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA=="], "@testing-library/react-native/pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], diff --git a/package.json b/package.json index f116212..2a8ec92 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "@react-navigation/elements": "^2.3.8", "@react-navigation/native": "^7.1.6", "@react-navigation/native-stack": "^7.3.10", - "@rnmapbox/maps": "^10.2.7", "@types/lodash": "^4.17.20", "@types/react-native-vector-icons": "^6.4.18", "axios": "^1.11.0", diff --git a/screens/Maps/MapsView2.tsx b/screens/Maps/MapsView2.tsx index f427dad..418801f 100644 --- a/screens/Maps/MapsView2.tsx +++ b/screens/Maps/MapsView2.tsx @@ -1,32 +1,222 @@ -import React from "react"; +import React, { useCallback, useState } from "react"; import { StyleSheet, View } from "react-native"; // Cek versi >= 10.x gunakan ini -import { MapView, Camera, PointAnnotation } from "@maplibre/maplibre-react-native"; +import { + MapView, + Camera, + PointAnnotation, + Images, + ShapeSource, + SymbolLayer, +} from "@maplibre/maplibre-react-native"; +import { + ButtonCustom, + DrawerCustom, + DummyLandscapeImage, + Grid, + Spacing, + StackCustom, + TextCustom, + ViewWrapper, +} from "@/components"; +import { apiMapsGetAll } from "@/service/api-client/api-maps"; +import { router, useFocusEffect } from "expo-router"; +import { Image } from "expo-image"; +import API_IMAGE from "@/constants/api-storage"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; +import { ICON_SIZE_SMALL } from "@/constants/constans-value"; +import { openInDeviceMaps } from "@/utils/openInDeviceMaps"; +import { FontAwesome, Ionicons } from "@expo/vector-icons"; const MAP_STYLE = "https://tiles.openfreemap.org/styles/liberty"; +const defaultRegion = { + latitude: -8.737109, + longitude: 115.1756897, + latitudeDelta: 0.1, + longitudeDelta: 0.1, + height: 300, +}; export default function MapsView2() { - return ( - - - + const [list, setList] = useState(null); + const [loadList, setLoadList] = useState(false); + const [openDrawer, setOpenDrawer] = useState(false); + const [selected, setSelected] = useState({ + id: "", + bidangBisnis: "", + nomorTelepon: "", + alamatBisnis: "", + namePin: "", + imageId: "", + portofolioId: "", + latitude: 0, + longitude: 0, + }); - - - - - + useFocusEffect( + useCallback(() => { + handlerLoadList(); + }, []), + ); + + const handlerLoadList = async () => { + try { + setLoadList(true); + const response = await apiMapsGetAll(); + + if (response.success) { + setList(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoadList(false); + } + }; + + // Data GeoJSON untuk marker + const markerData: GeoJSON.FeatureCollection = { + type: "FeatureCollection", + features: [ + { + type: "Feature", + geometry: { + type: "Point", + coordinates: [115.1756897, -8.737109], + }, + properties: { id: "1", title: "Lokasi A" }, + }, + { + type: "Feature", + geometry: { + type: "Point", + coordinates: [106.83, -6.18], + }, + properties: { id: "2", title: "Lokasi B" }, + }, + ], + }; + + return ( + <> + + + + + console.log("Missing:", imageKey)} + /> + + + + + + + setOpenDrawer(false)} + height={"auto"} + > + + + + + } + rightItem={{selected.namePin}} + /> + + + } + rightItem={{selected.bidangBisnis}} + /> + + + } + rightItem={{selected.nomorTelepon}} + /> + + } + rightItem={{selected.alamatBisnis}} + /> + + + + { + setOpenDrawer(false); + router.push(`/portofolio/${selected.portofolioId}`); + }} + > + Detail + + + + { + openInDeviceMaps({ + latitude: selected.latitude, + longitude: selected.longitude, + title: selected.namePin, + }); + }} + > + Buka Maps + + + + + + ); } @@ -34,9 +224,9 @@ const styles = StyleSheet.create({ container: { flex: 1 }, map: { flex: 1 }, marker: { - width: 16, - height: 16, - borderRadius: 8, + width: 30, + height: 30, + borderRadius: 100, backgroundColor: "red", }, -}); \ No newline at end of file +}); -- 2.49.1 From 2ad93a26a8dc33616ec13849af4838c2abd60696 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Tue, 24 Feb 2026 17:57:14 +0800 Subject: [PATCH 7/9] Tampilan maps android - screens/Maps/MapsView2.tsx ### No Issue --- screens/Maps/MapsView2.tsx | 145 ++++++++++++++++++++++--------------- 1 file changed, 86 insertions(+), 59 deletions(-) diff --git a/screens/Maps/MapsView2.tsx b/screens/Maps/MapsView2.tsx index 418801f..df9be3f 100644 --- a/screens/Maps/MapsView2.tsx +++ b/screens/Maps/MapsView2.tsx @@ -1,29 +1,25 @@ -import React, { useCallback, useState } from "react"; -import { StyleSheet, View } from "react-native"; +import { useCallback, useState } from "react"; +import { Image, StyleSheet, View } from "react-native"; // Cek versi >= 10.x gunakan ini +import API_IMAGE from "@/constants/api-storage"; +import { MainColor } from "@/constants/color-palet"; +import { apiMapsGetAll } from "@/service/api-client/api-maps"; import { - MapView, Camera, + MapView, PointAnnotation, - Images, - ShapeSource, - SymbolLayer, } from "@maplibre/maplibre-react-native"; +import { router, useFocusEffect } from "expo-router"; import { - ButtonCustom, DrawerCustom, DummyLandscapeImage, - Grid, Spacing, StackCustom, TextCustom, - ViewWrapper, + Grid, + ButtonCustom, } from "@/components"; -import { apiMapsGetAll } from "@/service/api-client/api-maps"; -import { router, useFocusEffect } from "expo-router"; -import { Image } from "expo-image"; -import API_IMAGE from "@/constants/api-storage"; import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import { ICON_SIZE_SMALL } from "@/constants/constans-value"; import { openInDeviceMaps } from "@/utils/openInDeviceMaps"; @@ -31,6 +27,31 @@ import { FontAwesome, Ionicons } from "@expo/vector-icons"; const MAP_STYLE = "https://tiles.openfreemap.org/styles/liberty"; +interface TypeMaps { + id: string; + isActive: boolean; + createdAt: string; + updatedAt: string; + namePin: string; + latitude: number; + longitude: number; + authorId: string; + portofolioId: string; + imageId: string; + pinId: string | null; + Portofolio: { + id: string; + namaBisnis: string; + logoId: string; + alamatKantor: string; + tlpn: string; + MasterBidangBisnis: { + id: string; + name: string; + }; + }; +} + const defaultRegion = { latitude: -8.737109, longitude: 115.1756897, @@ -40,7 +61,7 @@ const defaultRegion = { }; export default function MapsView2() { - const [list, setList] = useState(null); + const [list, setList] = useState(null); const [loadList, setLoadList] = useState(false); const [openDrawer, setOpenDrawer] = useState(false); const [selected, setSelected] = useState({ @@ -67,6 +88,7 @@ export default function MapsView2() { const response = await apiMapsGetAll(); if (response.success) { + // console.log("[RESPONSE]", JSON.stringify(response.data, null, 2)); setList(response.data); } } catch (error) { @@ -76,57 +98,51 @@ export default function MapsView2() { } }; - // Data GeoJSON untuk marker - const markerData: GeoJSON.FeatureCollection = { - type: "FeatureCollection", - features: [ - { - type: "Feature", - geometry: { - type: "Point", - coordinates: [115.1756897, -8.737109], - }, - properties: { id: "1", title: "Lokasi A" }, - }, - { - type: "Feature", - geometry: { - type: "Point", - coordinates: [106.83, -6.18], - }, - properties: { id: "2", title: "Lokasi B" }, - }, - ], - }; - return ( <> - console.log("Missing:", imageKey)} - /> - - - + {list?.map((item: TypeMaps) => { + const imageUrl = API_IMAGE.GET({ fileId: item.Portofolio.logoId }); + + return ( + { + setOpenDrawer(true); + setSelected({ + id: item?.id, + bidangBisnis: item?.Portofolio?.MasterBidangBisnis?.name, + nomorTelepon: item?.Portofolio?.tlpn, + alamatBisnis: item?.Portofolio?.alamatKantor, + namePin: item?.namePin, + imageId: item?.imageId, + portofolioId: item?.Portofolio?.id, + latitude: item?.latitude, + longitude: item?.longitude, + }); + }} + > + + + console.log("Image error:", e.nativeEvent.error) + } // Tangkap error image + /> + + + ); + })} @@ -223,10 +239,21 @@ export default function MapsView2() { const styles = StyleSheet.create({ container: { flex: 1 }, map: { flex: 1 }, - marker: { + markerContainer: { width: 30, height: 30, borderRadius: 100, - backgroundColor: "red", + overflow: "hidden", // Wajib agar borderRadius terapply pada Image + borderWidth: 1, + borderColor: MainColor.darkblue, // Opsional, biar lebih cantik + elevation: 4, // Shadow Android + shadowColor: "#000", // Shadow iOS + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.3, + shadowRadius: 3, + }, + markerImage: { + width: "100%", + height: "100%", }, }); -- 2.49.1 From 74a4d88277b79d33c3ce38e7536e4fb6e32c2c16 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Wed, 25 Feb 2026 16:37:42 +0800 Subject: [PATCH 8/9] Fix POD File & Maps User Maps - app/(application)/(user)/maps/index.tsx - screens/Maps/MapsView2.tsx iOS - HIPMIBadungConnect.xcodeproj/project.pbxproj - Podfile.lock - HIPMIBadungConnect.xcworkspace/xcshareddata/ New Maps Component - screens/Maps/DrawerMaps.tsx Docs / Backup - docs/PODS.back ### No Issue --- .../project.pbxproj | 121 ++- .../xcshareddata/swiftpm/Package.resolved | 15 + ios/Podfile.lock | 969 +++++++++--------- 3 files changed, 573 insertions(+), 532 deletions(-) create mode 100644 ios/HIPMIBadungConnect.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj index e2849b6..2e5951a 100644 --- a/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj +++ b/ios/HIPMIBadungConnect.xcodeproj/project.pbxproj @@ -154,12 +154,16 @@ 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */, B6436A881D9B484CB6D18085 /* Remove signature files (Xcode workaround) */, 2BAE9DA9D4244A23B39651C7 /* Remove signature files (Xcode workaround) */, + 81D5244C04C44C06AD9AE152 /* Remove signature files (Xcode workaround) */, ); buildRules = ( ); dependencies = ( ); name = HIPMIBadungConnect; + packageProductDependencies = ( + E77D58C237D6674BBDD23EAD /* MapLibre */, + ); productName = HIPMIBadungConnect; productReference = 13B07F961A680F5B00A75B9A /* HIPMIBadungConnect.app */; productType = "com.apple.product-type.application"; @@ -186,6 +190,9 @@ Base, ); mainGroup = 83CBB9F61A601CBA00E9B192; + packageReferences = ( + FA026E77586E9BC3480742E5 /* XCRemoteSwiftPackageReference "maplibre-gl-native-distribution" */, + ); productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; @@ -259,22 +266,14 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-HIPMIBadungConnect/Pods-HIPMIBadungConnect-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/MapboxMaps/MapboxMaps.framework", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCommon/MapboxCommon.framework/MapboxCommon", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/MapboxCoreMaps/MapboxCoreMaps.framework/MapboxCoreMaps", "${PODS_XCFRAMEWORKS_BUILD_DIR}/React-Core-prebuilt/React.framework/React", "${PODS_XCFRAMEWORKS_BUILD_DIR}/ReactNativeDependencies/ReactNativeDependencies.framework/ReactNativeDependencies", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/Turf/Turf.framework/Turf", "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxMaps.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCommon.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MapboxCoreMaps.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/React.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactNativeDependencies.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Turf.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -282,6 +281,20 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HIPMIBadungConnect/Pods-HIPMIBadungConnect-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 2BAE9DA9D4244A23B39651C7 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Remove signature files (Xcode workaround)"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\n echo \"Remove signature files (Xcode workaround)\";\n rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";\n "; + }; 58D7AF30081BAAEFD090045C /* [CP-User] [RNFB] Core Configuration */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -295,6 +308,34 @@ shellPath = /bin/sh; shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##########################################################################\n##########################################################################\n#\n# NOTE THAT IF YOU CHANGE THIS FILE YOU MUST RUN pod install AFTERWARDS\n#\n# This file is installed as an Xcode build script in the project file\n# by cocoapods, and you will not see your changes until you pod install\n#\n##########################################################################\n##########################################################################\n\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"note: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"note: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"note: -> RNFB build script started\"\necho \"note: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"note: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"note: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n if ! _RN_ROOT_EXISTS=$(ruby -Ku -e \"require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\"); then\n echo \"error: Failed to parse firebase.json, check for syntax errors.\"\n exit 1\n fi\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"error: python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_analytics_storage\n _ANALYTICS_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_analytics_storage\")\n if [[ $_ANALYTICS_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_storage\n _ANALYTICS_AD_STORAGE=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_storage\")\n if [[ $_ANALYTICS_AD_STORAGE ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_STORAGE\")\")\n fi\n\n # config.analytics_default_allow_ad_user_data\n _ANALYTICS_AD_USER_DATA=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_user_data\")\n if [[ $_ANALYTICS_AD_USER_DATA ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AD_USER_DATA\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"note: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"note: <- RNFB build script finished\"\n"; }; + 7A7548934A6A4A868E76F842 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Remove signature files (Xcode workaround)"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\n echo \"Remove signature files (Xcode workaround)\";\n rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";\n "; + }; + 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Remove signature files (Xcode workaround)"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\n echo \"Remove signature files (Xcode workaround)\";\n rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";\n "; + }; AA173A81855B88A7082A949D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -419,58 +460,21 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HIPMIBadungConnect/Pods-HIPMIBadungConnect-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 7A7548934A6A4A868E76F842 /* Remove signature files (Xcode workaround) */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - name = "Remove signature files (Xcode workaround)"; - inputPaths = ( - ); - outputPaths = ( - ); - shellPath = /bin/sh; - shellScript = " - echo \"Remove signature files (Xcode workaround)\"; - rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; - "; - }; - 87DB85593ECE4622BCF1F332 /* Remove signature files (Xcode workaround) */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - name = "Remove signature files (Xcode workaround)"; - inputPaths = ( - ); - outputPaths = ( - ); - shellPath = /bin/sh; - shellScript = " - echo \"Remove signature files (Xcode workaround)\"; - rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; - "; - }; B6436A881D9B484CB6D18085 /* Remove signature files (Xcode workaround) */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); - runOnlyForDeploymentPostprocessing = 0; - name = "Remove signature files (Xcode workaround)"; inputPaths = ( ); + name = "Remove signature files (Xcode workaround)"; outputPaths = ( ); + runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = " - echo \"Remove signature files (Xcode workaround)\"; - rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\"; - "; + shellScript = "\n echo \"Remove signature files (Xcode workaround)\";\n rm -rf \"$CONFIGURATION_BUILD_DIR/MapLibre.xcframework-ios.signature\";\n "; }; - 2BAE9DA9D4244A23B39651C7 /* Remove signature files (Xcode workaround) */ = { + 81D5244C04C44C06AD9AE152 /* Remove signature files (Xcode workaround) */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -710,6 +714,25 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + FA026E77586E9BC3480742E5 /* XCRemoteSwiftPackageReference "maplibre-gl-native-distribution" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/maplibre/maplibre-gl-native-distribution"; + requirement = { + kind = exactVersion; + version = 6.17.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + E77D58C237D6674BBDD23EAD /* MapLibre */ = { + isa = XCSwiftPackageProductDependency; + package = FA026E77586E9BC3480742E5 /* XCRemoteSwiftPackageReference "maplibre-gl-native-distribution" */; + productName = MapLibre; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } diff --git a/ios/HIPMIBadungConnect.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/HIPMIBadungConnect.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..7f946eb --- /dev/null +++ b/ios/HIPMIBadungConnect.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "e70d3525c8e2819a8b34f22909815dab5c700c25a06c32388f3930f7b3627768", + "pins" : [ + { + "identity" : "maplibre-gl-native-distribution", + "kind" : "remoteSourceControl", + "location" : "https://github.com/maplibre/maplibre-gl-native-distribution", + "state" : { + "revision" : "c68c970ff3ece56cfc3b36849db70167fa208beb", + "version" : "6.17.1" + } + } + ], + "version" : 3 +} diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a29aba4..50e0c1b 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,17 +1,17 @@ PODS: - - EXApplication (7.0.7): + - EXApplication (7.0.8): - ExpoModulesCore - - EXConstants (18.0.10): + - EXConstants (18.0.13): - ExpoModulesCore - EXImageLoader (6.0.0): - ExpoModulesCore - React-Core - EXJSONUtils (0.15.0) - - EXManifests (1.0.8): + - EXManifests (1.0.10): - ExpoModulesCore - - EXNotifications (0.32.13): + - EXNotifications (0.32.16): - ExpoModulesCore - - Expo (54.0.2): + - Expo (54.0.33): - ExpoModulesCore - hermes-engine - RCTRequired @@ -36,15 +36,15 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-client (6.0.12): + - expo-dev-client (6.0.20): - EXManifests - expo-dev-launcher - expo-dev-menu - expo-dev-menu-interface - EXUpdatesInterface - - expo-dev-launcher (6.0.11): + - expo-dev-launcher (6.0.20): - EXManifests - - expo-dev-launcher/Main (= 6.0.11) + - expo-dev-launcher/Main (= 6.0.20) - expo-dev-menu - expo-dev-menu-interface - ExpoModulesCore @@ -73,7 +73,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-launcher/Main (6.0.11): + - expo-dev-launcher/Main (6.0.20): - EXManifests - expo-dev-launcher/Unsafe - expo-dev-menu @@ -104,7 +104,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-launcher/Unsafe (6.0.11): + - expo-dev-launcher/Unsafe (6.0.20): - EXManifests - expo-dev-menu - expo-dev-menu-interface @@ -134,9 +134,9 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-menu (7.0.11): - - expo-dev-menu/Main (= 7.0.11) - - expo-dev-menu/ReactNativeCompatibles (= 7.0.11) + - expo-dev-menu (7.0.18): + - expo-dev-menu/Main (= 7.0.18) + - expo-dev-menu/ReactNativeCompatibles (= 7.0.18) - hermes-engine - RCTRequired - RCTTypeSafety @@ -159,7 +159,7 @@ PODS: - ReactNativeDependencies - Yoga - expo-dev-menu-interface (2.0.0) - - expo-dev-menu/Main (7.0.11): + - expo-dev-menu/Main (7.0.18): - EXManifests - expo-dev-menu-interface - ExpoModulesCore @@ -185,7 +185,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - expo-dev-menu/ReactNativeCompatibles (7.0.11): + - expo-dev-menu/ReactNativeCompatibles (7.0.18): - hermes-engine - RCTRequired - RCTTypeSafety @@ -207,45 +207,45 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoAsset (12.0.8): + - ExpoAsset (12.0.12): - ExpoModulesCore - - ExpoCamera (17.0.7): + - ExpoCamera (17.0.10): - ExpoModulesCore - ZXingObjC/OneD - ZXingObjC/PDF417 - - ExpoClipboard (8.0.7): + - ExpoClipboard (8.0.8): - ExpoModulesCore - - ExpoDevice (8.0.9): + - ExpoDevice (8.0.10): - ExpoModulesCore - - ExpoDocumentPicker (14.0.7): + - ExpoDocumentPicker (14.0.8): - ExpoModulesCore - - ExpoFileSystem (19.0.15): + - ExpoFileSystem (19.0.21): - ExpoModulesCore - - ExpoFont (14.0.8): + - ExpoFont (14.0.11): - ExpoModulesCore - - ExpoHaptics (15.0.7): + - ExpoHaptics (15.0.8): - ExpoModulesCore - - ExpoHead (6.0.1): + - ExpoHead (6.0.23): - ExpoModulesCore - RNScreens - - ExpoImage (3.0.8): + - ExpoImage (3.0.11): - ExpoModulesCore - libavif/libdav1d - SDWebImage (~> 5.21.0) - SDWebImageAVIFCoder (~> 0.11.0) - SDWebImageSVGCoder (~> 1.7.0) - SDWebImageWebPCoder (~> 0.14.6) - - ExpoImagePicker (17.0.8): + - ExpoImagePicker (17.0.10): - ExpoModulesCore - - ExpoKeepAwake (15.0.7): + - ExpoKeepAwake (15.0.8): - ExpoModulesCore - - ExpoLinearGradient (15.0.7): + - ExpoLinearGradient (15.0.8): - ExpoModulesCore - - ExpoLinking (8.0.8): + - ExpoLinking (8.0.11): - ExpoModulesCore - - ExpoLocation (19.0.7): + - ExpoLocation (19.0.8): - ExpoModulesCore - - ExpoModulesCore (3.0.15): + - ExpoModulesCore (3.0.29): - hermes-engine - RCTRequired - RCTTypeSafety @@ -268,61 +268,61 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - ExpoSplashScreen (31.0.9): + - ExpoSplashScreen (31.0.13): - ExpoModulesCore - - ExpoSymbols (1.0.7): + - ExpoSymbols (1.0.8): - ExpoModulesCore - - ExpoSystemUI (6.0.7): + - ExpoSystemUI (6.0.9): - ExpoModulesCore - - ExpoWebBrowser (15.0.9): + - ExpoWebBrowser (15.0.10): - ExpoModulesCore - EXUpdatesInterface (2.0.0): - ExpoModulesCore - - FBLazyVector (0.81.4) - - Firebase (12.6.0): - - Firebase/Core (= 12.6.0) - - Firebase/Core (12.6.0): + - FBLazyVector (0.81.5) + - Firebase (12.8.0): + - Firebase/Core (= 12.8.0) + - Firebase/Core (12.8.0): - Firebase/CoreOnly - - FirebaseAnalytics (~> 12.6.0) - - Firebase/CoreOnly (12.6.0): - - FirebaseCore (~> 12.6.0) - - Firebase/Messaging (12.6.0): + - FirebaseAnalytics (~> 12.8.0) + - Firebase/CoreOnly (12.8.0): + - FirebaseCore (~> 12.8.0) + - Firebase/Messaging (12.8.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 12.6.0) - - FirebaseAnalytics (12.6.0): - - FirebaseAnalytics/Default (= 12.6.0) - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) + - FirebaseMessaging (~> 12.8.0) + - FirebaseAnalytics (12.8.0): + - FirebaseAnalytics/Default (= 12.8.0) + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseAnalytics/Default (12.6.0): - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) - - GoogleAppMeasurement/Default (= 12.6.0) + - FirebaseAnalytics/Default (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) + - GoogleAppMeasurement/Default (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - FirebaseCore (12.6.0): - - FirebaseCoreInternal (~> 12.6.0) + - FirebaseCore (12.8.0): + - FirebaseCoreInternal (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.6.0): - - FirebaseCore (~> 12.6.0) - - FirebaseCoreInternal (12.6.0): + - FirebaseCoreExtension (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseCoreInternal (12.8.0): - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.6.0): - - FirebaseCore (~> 12.6.0) + - FirebaseInstallations (12.8.0): + - FirebaseCore (~> 12.8.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - PromisesObjC (~> 2.4) - - FirebaseMessaging (12.6.0): - - FirebaseCore (~> 12.6.0) - - FirebaseInstallations (~> 12.6.0) + - FirebaseMessaging (12.8.0): + - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (~> 12.8.0) - GoogleDataTransport (~> 10.1) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/Environment (~> 8.1) @@ -334,23 +334,23 @@ PODS: - GoogleUtilities/Logger (~> 8.1) - GoogleUtilities/Network (~> 8.1) - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Core (12.6.0): + - GoogleAppMeasurement/Core (12.8.0): - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/Default (12.6.0): + - GoogleAppMeasurement/Default (12.8.0): - GoogleAdsOnDeviceConversion (~> 3.2.0) - - GoogleAppMeasurement/Core (= 12.6.0) - - GoogleAppMeasurement/IdentitySupport (= 12.6.0) + - GoogleAppMeasurement/Core (= 12.8.0) + - GoogleAppMeasurement/IdentitySupport (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) - "GoogleUtilities/NSData+zlib (~> 8.1)" - nanopb (~> 3.30910.0) - - GoogleAppMeasurement/IdentitySupport (12.6.0): - - GoogleAppMeasurement/Core (= 12.6.0) + - GoogleAppMeasurement/IdentitySupport (12.8.0): + - GoogleAppMeasurement/Core (= 12.8.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/MethodSwizzler (~> 8.1) - GoogleUtilities/Network (~> 8.1) @@ -386,11 +386,11 @@ PODS: - GoogleUtilities/UserDefaults (8.1.0): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - hermes-engine (0.81.4): - - hermes-engine/Pre-built (= 0.81.4) - - hermes-engine/Pre-built (0.81.4) - - libavif/core (0.11.1) - - libavif/libdav1d (0.11.1): + - hermes-engine (0.81.5): + - hermes-engine/Pre-built (= 0.81.5) + - hermes-engine/Pre-built (0.81.5) + - libavif/core (1.0.0) + - libavif/libdav1d (1.0.0): - libavif/core - libdav1d (>= 0.6.0) - libdav1d (1.2.0) @@ -406,45 +406,44 @@ PODS: - libwebp/sharpyuv (1.5.0) - libwebp/webp (1.5.0): - libwebp/sharpyuv - - MapboxCommon (24.15.4): - - Turf (= 4.0.0) - - MapboxCoreMaps (11.15.4): - - MapboxCommon (= 24.15.4) - - MapboxMaps (11.15.4): - - MapboxCommon (= 24.15.4) - - MapboxCoreMaps (= 11.15.4) - - Turf (= 4.0.0) + - maplibre-react-native (10.4.2): + - maplibre-react-native/DynamicLibrary (= 10.4.2) + - React + - React-Core + - maplibre-react-native/DynamicLibrary (10.4.2): + - React + - React-Core - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) - nanopb/decode (3.30910.0) - nanopb/encode (3.30910.0) - PromisesObjC (2.4.0) - - RCTDeprecation (0.81.4) - - RCTRequired (0.81.4) - - RCTTypeSafety (0.81.4): - - FBLazyVector (= 0.81.4) - - RCTRequired (= 0.81.4) - - React-Core (= 0.81.4) - - React (0.81.4): - - React-Core (= 0.81.4) - - React-Core/DevSupport (= 0.81.4) - - React-Core/RCTWebSocket (= 0.81.4) - - React-RCTActionSheet (= 0.81.4) - - React-RCTAnimation (= 0.81.4) - - React-RCTBlob (= 0.81.4) - - React-RCTImage (= 0.81.4) - - React-RCTLinking (= 0.81.4) - - React-RCTNetwork (= 0.81.4) - - React-RCTSettings (= 0.81.4) - - React-RCTText (= 0.81.4) - - React-RCTVibration (= 0.81.4) - - React-callinvoker (0.81.4) - - React-Core (0.81.4): + - RCTDeprecation (0.81.5) + - RCTRequired (0.81.5) + - RCTTypeSafety (0.81.5): + - FBLazyVector (= 0.81.5) + - RCTRequired (= 0.81.5) + - React-Core (= 0.81.5) + - React (0.81.5): + - React-Core (= 0.81.5) + - React-Core/DevSupport (= 0.81.5) + - React-Core/RCTWebSocket (= 0.81.5) + - React-RCTActionSheet (= 0.81.5) + - React-RCTAnimation (= 0.81.5) + - React-RCTBlob (= 0.81.5) + - React-RCTImage (= 0.81.5) + - React-RCTLinking (= 0.81.5) + - React-RCTNetwork (= 0.81.5) + - React-RCTSettings (= 0.81.5) + - React-RCTText (= 0.81.5) + - React-RCTVibration (= 0.81.5) + - React-callinvoker (0.81.5) + - React-Core (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt - - React-Core/Default (= 0.81.4) + - React-Core/Default (= 0.81.5) - React-cxxreact - React-featureflags - React-hermes @@ -459,9 +458,9 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core-prebuilt (0.81.4): + - React-Core-prebuilt (0.81.5): - ReactNativeDependencies - - React-Core/CoreModulesHeaders (0.81.4): + - React-Core/CoreModulesHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -480,7 +479,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/Default (0.81.4): + - React-Core/Default (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -498,12 +497,12 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/DevSupport (0.81.4): + - React-Core/DevSupport (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt - - React-Core/Default (= 0.81.4) - - React-Core/RCTWebSocket (= 0.81.4) + - React-Core/Default (= 0.81.5) + - React-Core/RCTWebSocket (= 0.81.5) - React-cxxreact - React-featureflags - React-hermes @@ -518,7 +517,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTActionSheetHeaders (0.81.4): + - React-Core/RCTActionSheetHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -537,7 +536,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTAnimationHeaders (0.81.4): + - React-Core/RCTAnimationHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -556,7 +555,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTBlobHeaders (0.81.4): + - React-Core/RCTBlobHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -575,7 +574,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTImageHeaders (0.81.4): + - React-Core/RCTImageHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -594,7 +593,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTLinkingHeaders (0.81.4): + - React-Core/RCTLinkingHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -613,7 +612,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTNetworkHeaders (0.81.4): + - React-Core/RCTNetworkHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -632,7 +631,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTSettingsHeaders (0.81.4): + - React-Core/RCTSettingsHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -651,7 +650,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTTextHeaders (0.81.4): + - React-Core/RCTTextHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -670,7 +669,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTVibrationHeaders (0.81.4): + - React-Core/RCTVibrationHeaders (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt @@ -689,11 +688,11 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-Core/RCTWebSocket (0.81.4): + - React-Core/RCTWebSocket (0.81.5): - hermes-engine - RCTDeprecation - React-Core-prebuilt - - React-Core/Default (= 0.81.4) + - React-Core/Default (= 0.81.5) - React-cxxreact - React-featureflags - React-hermes @@ -708,37 +707,37 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-CoreModules (0.81.4): - - RCTTypeSafety (= 0.81.4) + - React-CoreModules (0.81.5): + - RCTTypeSafety (= 0.81.5) - React-Core-prebuilt - - React-Core/CoreModulesHeaders (= 0.81.4) - - React-jsi (= 0.81.4) + - React-Core/CoreModulesHeaders (= 0.81.5) + - React-jsi (= 0.81.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-NativeModulesApple - React-RCTBlob - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.4) + - React-RCTImage (= 0.81.5) - React-runtimeexecutor - ReactCommon - ReactNativeDependencies - - React-cxxreact (0.81.4): + - React-cxxreact (0.81.5): - hermes-engine - - React-callinvoker (= 0.81.4) + - React-callinvoker (= 0.81.5) - React-Core-prebuilt - - React-debug (= 0.81.4) - - React-jsi (= 0.81.4) + - React-debug (= 0.81.5) + - React-jsi (= 0.81.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-logger (= 0.81.4) - - React-perflogger (= 0.81.4) + - React-logger (= 0.81.5) + - React-perflogger (= 0.81.5) - React-runtimeexecutor - - React-timing (= 0.81.4) + - React-timing (= 0.81.5) - ReactNativeDependencies - - React-debug (0.81.4) - - React-defaultsnativemodule (0.81.4): + - React-debug (0.81.5) + - React-defaultsnativemodule (0.81.5): - hermes-engine - React-Core-prebuilt - React-domnativemodule @@ -749,7 +748,7 @@ PODS: - React-microtasksnativemodule - React-RCTFBReactNativeSpec - ReactNativeDependencies - - React-domnativemodule (0.81.4): + - React-domnativemodule (0.81.5): - hermes-engine - React-Core-prebuilt - React-Fabric @@ -763,7 +762,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-Fabric (0.81.4): + - React-Fabric (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -771,23 +770,23 @@ PODS: - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/animations (= 0.81.4) - - React-Fabric/attributedstring (= 0.81.4) - - React-Fabric/bridging (= 0.81.4) - - React-Fabric/componentregistry (= 0.81.4) - - React-Fabric/componentregistrynative (= 0.81.4) - - React-Fabric/components (= 0.81.4) - - React-Fabric/consistency (= 0.81.4) - - React-Fabric/core (= 0.81.4) - - React-Fabric/dom (= 0.81.4) - - React-Fabric/imagemanager (= 0.81.4) - - React-Fabric/leakchecker (= 0.81.4) - - React-Fabric/mounting (= 0.81.4) - - React-Fabric/observers (= 0.81.4) - - React-Fabric/scheduler (= 0.81.4) - - React-Fabric/telemetry (= 0.81.4) - - React-Fabric/templateprocessor (= 0.81.4) - - React-Fabric/uimanager (= 0.81.4) + - React-Fabric/animations (= 0.81.5) + - React-Fabric/attributedstring (= 0.81.5) + - React-Fabric/bridging (= 0.81.5) + - React-Fabric/componentregistry (= 0.81.5) + - React-Fabric/componentregistrynative (= 0.81.5) + - React-Fabric/components (= 0.81.5) + - React-Fabric/consistency (= 0.81.5) + - React-Fabric/core (= 0.81.5) + - React-Fabric/dom (= 0.81.5) + - React-Fabric/imagemanager (= 0.81.5) + - React-Fabric/leakchecker (= 0.81.5) + - React-Fabric/mounting (= 0.81.5) + - React-Fabric/observers (= 0.81.5) + - React-Fabric/scheduler (= 0.81.5) + - React-Fabric/telemetry (= 0.81.5) + - React-Fabric/templateprocessor (= 0.81.5) + - React-Fabric/uimanager (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -799,7 +798,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/animations (0.81.4): + - React-Fabric/animations (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -818,7 +817,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/attributedstring (0.81.4): + - React-Fabric/attributedstring (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -837,7 +836,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/bridging (0.81.4): + - React-Fabric/bridging (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -856,7 +855,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/componentregistry (0.81.4): + - React-Fabric/componentregistry (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -875,7 +874,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/componentregistrynative (0.81.4): + - React-Fabric/componentregistrynative (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -894,7 +893,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/components (0.81.4): + - React-Fabric/components (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -902,10 +901,10 @@ PODS: - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.4) - - React-Fabric/components/root (= 0.81.4) - - React-Fabric/components/scrollview (= 0.81.4) - - React-Fabric/components/view (= 0.81.4) + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.5) + - React-Fabric/components/root (= 0.81.5) + - React-Fabric/components/scrollview (= 0.81.5) + - React-Fabric/components/view (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -917,7 +916,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/components/legacyviewmanagerinterop (0.81.4): + - React-Fabric/components/legacyviewmanagerinterop (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -936,7 +935,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/components/root (0.81.4): + - React-Fabric/components/root (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -955,7 +954,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/components/scrollview (0.81.4): + - React-Fabric/components/scrollview (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -974,7 +973,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/components/view (0.81.4): + - React-Fabric/components/view (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -995,7 +994,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-Fabric/consistency (0.81.4): + - React-Fabric/consistency (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1014,7 +1013,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/core (0.81.4): + - React-Fabric/core (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1033,7 +1032,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/dom (0.81.4): + - React-Fabric/dom (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1052,7 +1051,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/imagemanager (0.81.4): + - React-Fabric/imagemanager (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1071,7 +1070,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/leakchecker (0.81.4): + - React-Fabric/leakchecker (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1090,7 +1089,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/mounting (0.81.4): + - React-Fabric/mounting (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1109,7 +1108,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/observers (0.81.4): + - React-Fabric/observers (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1117,7 +1116,7 @@ PODS: - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.81.4) + - React-Fabric/observers/events (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -1129,7 +1128,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/observers/events (0.81.4): + - React-Fabric/observers/events (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1148,7 +1147,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/scheduler (0.81.4): + - React-Fabric/scheduler (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1169,7 +1168,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/telemetry (0.81.4): + - React-Fabric/telemetry (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1188,7 +1187,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/templateprocessor (0.81.4): + - React-Fabric/templateprocessor (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1207,7 +1206,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/uimanager (0.81.4): + - React-Fabric/uimanager (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1215,7 +1214,7 @@ PODS: - React-Core-prebuilt - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.81.4) + - React-Fabric/uimanager/consistency (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -1228,7 +1227,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-Fabric/uimanager/consistency (0.81.4): + - React-Fabric/uimanager/consistency (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1248,7 +1247,7 @@ PODS: - React-utils - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-FabricComponents (0.81.4): + - React-FabricComponents (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1257,8 +1256,8 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.81.4) - - React-FabricComponents/textlayoutmanager (= 0.81.4) + - React-FabricComponents/components (= 0.81.5) + - React-FabricComponents/textlayoutmanager (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -1271,7 +1270,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components (0.81.4): + - React-FabricComponents/components (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1280,17 +1279,17 @@ PODS: - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.4) - - React-FabricComponents/components/iostextinput (= 0.81.4) - - React-FabricComponents/components/modal (= 0.81.4) - - React-FabricComponents/components/rncore (= 0.81.4) - - React-FabricComponents/components/safeareaview (= 0.81.4) - - React-FabricComponents/components/scrollview (= 0.81.4) - - React-FabricComponents/components/switch (= 0.81.4) - - React-FabricComponents/components/text (= 0.81.4) - - React-FabricComponents/components/textinput (= 0.81.4) - - React-FabricComponents/components/unimplementedview (= 0.81.4) - - React-FabricComponents/components/virtualview (= 0.81.4) + - React-FabricComponents/components/inputaccessory (= 0.81.5) + - React-FabricComponents/components/iostextinput (= 0.81.5) + - React-FabricComponents/components/modal (= 0.81.5) + - React-FabricComponents/components/rncore (= 0.81.5) + - React-FabricComponents/components/safeareaview (= 0.81.5) + - React-FabricComponents/components/scrollview (= 0.81.5) + - React-FabricComponents/components/switch (= 0.81.5) + - React-FabricComponents/components/text (= 0.81.5) + - React-FabricComponents/components/textinput (= 0.81.5) + - React-FabricComponents/components/unimplementedview (= 0.81.5) + - React-FabricComponents/components/virtualview (= 0.81.5) - React-featureflags - React-graphics - React-jsi @@ -1303,7 +1302,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/inputaccessory (0.81.4): + - React-FabricComponents/components/inputaccessory (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1324,7 +1323,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/iostextinput (0.81.4): + - React-FabricComponents/components/iostextinput (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1345,7 +1344,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/modal (0.81.4): + - React-FabricComponents/components/modal (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1366,7 +1365,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/rncore (0.81.4): + - React-FabricComponents/components/rncore (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1387,7 +1386,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/safeareaview (0.81.4): + - React-FabricComponents/components/safeareaview (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1408,7 +1407,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/scrollview (0.81.4): + - React-FabricComponents/components/scrollview (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1429,7 +1428,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/switch (0.81.4): + - React-FabricComponents/components/switch (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1450,7 +1449,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/text (0.81.4): + - React-FabricComponents/components/text (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1471,7 +1470,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/textinput (0.81.4): + - React-FabricComponents/components/textinput (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1492,7 +1491,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/unimplementedview (0.81.4): + - React-FabricComponents/components/unimplementedview (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1513,7 +1512,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/components/virtualview (0.81.4): + - React-FabricComponents/components/virtualview (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1534,7 +1533,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricComponents/textlayoutmanager (0.81.4): + - React-FabricComponents/textlayoutmanager (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1555,27 +1554,27 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-FabricImage (0.81.4): + - React-FabricImage (0.81.5): - hermes-engine - - RCTRequired (= 0.81.4) - - RCTTypeSafety (= 0.81.4) + - RCTRequired (= 0.81.5) + - RCTTypeSafety (= 0.81.5) - React-Core-prebuilt - React-Fabric - React-featureflags - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.81.4) + - React-jsiexecutor (= 0.81.5) - React-logger - React-rendererdebug - React-utils - ReactCommon - ReactNativeDependencies - Yoga - - React-featureflags (0.81.4): + - React-featureflags (0.81.5): - React-Core-prebuilt - ReactNativeDependencies - - React-featureflagsnativemodule (0.81.4): + - React-featureflagsnativemodule (0.81.5): - hermes-engine - React-Core-prebuilt - React-featureflags @@ -1584,26 +1583,26 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-graphics (0.81.4): + - React-graphics (0.81.5): - hermes-engine - React-Core-prebuilt - React-jsi - React-jsiexecutor - React-utils - ReactNativeDependencies - - React-hermes (0.81.4): + - React-hermes (0.81.5): - hermes-engine - React-Core-prebuilt - - React-cxxreact (= 0.81.4) + - React-cxxreact (= 0.81.5) - React-jsi - - React-jsiexecutor (= 0.81.4) + - React-jsiexecutor (= 0.81.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.4) + - React-perflogger (= 0.81.5) - React-runtimeexecutor - ReactNativeDependencies - - React-idlecallbacksnativemodule (0.81.4): + - React-idlecallbacksnativemodule (0.81.5): - hermes-engine - React-Core-prebuilt - React-jsi @@ -1613,7 +1612,7 @@ PODS: - React-runtimescheduler - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-ImageManager (0.81.4): + - React-ImageManager (0.81.5): - React-Core-prebuilt - React-Core/Default - React-debug @@ -1622,7 +1621,7 @@ PODS: - React-rendererdebug - React-utils - ReactNativeDependencies - - React-jserrorhandler (0.81.4): + - React-jserrorhandler (0.81.5): - hermes-engine - React-Core-prebuilt - React-cxxreact @@ -1631,22 +1630,22 @@ PODS: - React-jsi - ReactCommon/turbomodule/bridging - ReactNativeDependencies - - React-jsi (0.81.4): + - React-jsi (0.81.5): - hermes-engine - React-Core-prebuilt - ReactNativeDependencies - - React-jsiexecutor (0.81.4): + - React-jsiexecutor (0.81.5): - hermes-engine - React-Core-prebuilt - - React-cxxreact (= 0.81.4) - - React-jsi (= 0.81.4) + - React-cxxreact (= 0.81.5) + - React-jsi (= 0.81.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - - React-perflogger (= 0.81.4) + - React-perflogger (= 0.81.5) - React-runtimeexecutor - ReactNativeDependencies - - React-jsinspector (0.81.4): + - React-jsinspector (0.81.5): - hermes-engine - React-Core-prebuilt - React-featureflags @@ -1655,43 +1654,43 @@ PODS: - React-jsinspectornetwork - React-jsinspectortracing - React-oscompat - - React-perflogger (= 0.81.4) + - React-perflogger (= 0.81.5) - React-runtimeexecutor - ReactNativeDependencies - - React-jsinspectorcdp (0.81.4): + - React-jsinspectorcdp (0.81.5): - React-Core-prebuilt - ReactNativeDependencies - - React-jsinspectornetwork (0.81.4): + - React-jsinspectornetwork (0.81.5): - React-Core-prebuilt - React-featureflags - React-jsinspectorcdp - React-performancetimeline - React-timing - ReactNativeDependencies - - React-jsinspectortracing (0.81.4): + - React-jsinspectortracing (0.81.5): - React-Core-prebuilt - React-oscompat - React-timing - ReactNativeDependencies - - React-jsitooling (0.81.4): + - React-jsitooling (0.81.5): - React-Core-prebuilt - - React-cxxreact (= 0.81.4) - - React-jsi (= 0.81.4) + - React-cxxreact (= 0.81.5) + - React-jsi (= 0.81.5) - React-jsinspector - React-jsinspectorcdp - React-jsinspectortracing - React-runtimeexecutor - ReactNativeDependencies - - React-jsitracing (0.81.4): + - React-jsitracing (0.81.5): - React-jsi - - React-logger (0.81.4): + - React-logger (0.81.5): - React-Core-prebuilt - ReactNativeDependencies - - React-Mapbuffer (0.81.4): + - React-Mapbuffer (0.81.5): - React-Core-prebuilt - React-debug - ReactNativeDependencies - - React-microtasksnativemodule (0.81.4): + - React-microtasksnativemodule (0.81.5): - hermes-engine - React-Core-prebuilt - React-jsi @@ -1699,7 +1698,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon/turbomodule/core - ReactNativeDependencies - - react-native-keyboard-controller (1.18.6): + - react-native-keyboard-controller (1.20.7): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1711,7 +1710,7 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-keyboard-controller/common (= 1.18.6) + - react-native-keyboard-controller/common (= 1.20.7) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -1722,7 +1721,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-keyboard-controller/common (1.18.6): + - react-native-keyboard-controller/common (1.20.7): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1768,7 +1767,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context (5.6.1): + - react-native-safe-area-context (5.6.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1780,8 +1779,8 @@ PODS: - React-graphics - React-ImageManager - React-jsi - - react-native-safe-area-context/common (= 5.6.1) - - react-native-safe-area-context/fabric (= 5.6.1) + - react-native-safe-area-context/common (= 5.6.2) + - react-native-safe-area-context/fabric (= 5.6.2) - React-NativeModulesApple - React-RCTFabric - React-renderercss @@ -1792,7 +1791,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context/common (5.6.1): + - react-native-safe-area-context/common (5.6.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1814,7 +1813,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - react-native-safe-area-context/fabric (5.6.1): + - react-native-safe-area-context/fabric (5.6.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1859,7 +1858,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - React-NativeModulesApple (0.81.4): + - React-NativeModulesApple (0.81.5): - hermes-engine - React-callinvoker - React-Core @@ -1873,20 +1872,20 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - React-oscompat (0.81.4) - - React-perflogger (0.81.4): + - React-oscompat (0.81.5) + - React-perflogger (0.81.5): - React-Core-prebuilt - ReactNativeDependencies - - React-performancetimeline (0.81.4): + - React-performancetimeline (0.81.5): - React-Core-prebuilt - React-featureflags - React-jsinspectortracing - React-perflogger - React-timing - ReactNativeDependencies - - React-RCTActionSheet (0.81.4): - - React-Core/RCTActionSheetHeaders (= 0.81.4) - - React-RCTAnimation (0.81.4): + - React-RCTActionSheet (0.81.5): + - React-Core/RCTActionSheetHeaders (= 0.81.5) + - React-RCTAnimation (0.81.5): - RCTTypeSafety - React-Core-prebuilt - React-Core/RCTAnimationHeaders @@ -1896,7 +1895,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - ReactNativeDependencies - - React-RCTAppDelegate (0.81.4): + - React-RCTAppDelegate (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1924,7 +1923,7 @@ PODS: - React-utils - ReactCommon - ReactNativeDependencies - - React-RCTBlob (0.81.4): + - React-RCTBlob (0.81.5): - hermes-engine - React-Core-prebuilt - React-Core/RCTBlobHeaders @@ -1937,7 +1936,7 @@ PODS: - React-RCTNetwork - ReactCommon - ReactNativeDependencies - - React-RCTFabric (0.81.4): + - React-RCTFabric (0.81.5): - hermes-engine - React-Core - React-Core-prebuilt @@ -1966,7 +1965,7 @@ PODS: - React-utils - ReactNativeDependencies - Yoga - - React-RCTFBReactNativeSpec (0.81.4): + - React-RCTFBReactNativeSpec (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1974,10 +1973,10 @@ PODS: - React-Core-prebuilt - React-jsi - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.4) + - React-RCTFBReactNativeSpec/components (= 0.81.5) - ReactCommon - ReactNativeDependencies - - React-RCTFBReactNativeSpec/components (0.81.4): + - React-RCTFBReactNativeSpec/components (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -1994,7 +1993,7 @@ PODS: - ReactCommon - ReactNativeDependencies - Yoga - - React-RCTImage (0.81.4): + - React-RCTImage (0.81.5): - RCTTypeSafety - React-Core-prebuilt - React-Core/RCTImageHeaders @@ -2004,14 +2003,14 @@ PODS: - React-RCTNetwork - ReactCommon - ReactNativeDependencies - - React-RCTLinking (0.81.4): - - React-Core/RCTLinkingHeaders (= 0.81.4) - - React-jsi (= 0.81.4) + - React-RCTLinking (0.81.5): + - React-Core/RCTLinkingHeaders (= 0.81.5) + - React-jsi (= 0.81.5) - React-NativeModulesApple - React-RCTFBReactNativeSpec - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.4) - - React-RCTNetwork (0.81.4): + - ReactCommon/turbomodule/core (= 0.81.5) + - React-RCTNetwork (0.81.5): - RCTTypeSafety - React-Core-prebuilt - React-Core/RCTNetworkHeaders @@ -2023,7 +2022,7 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - ReactNativeDependencies - - React-RCTRuntime (0.81.4): + - React-RCTRuntime (0.81.5): - hermes-engine - React-Core - React-Core-prebuilt @@ -2037,7 +2036,7 @@ PODS: - React-runtimeexecutor - React-RuntimeHermes - ReactNativeDependencies - - React-RCTSettings (0.81.4): + - React-RCTSettings (0.81.5): - RCTTypeSafety - React-Core-prebuilt - React-Core/RCTSettingsHeaders @@ -2046,10 +2045,10 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - ReactNativeDependencies - - React-RCTText (0.81.4): - - React-Core/RCTTextHeaders (= 0.81.4) + - React-RCTText (0.81.5): + - React-Core/RCTTextHeaders (= 0.81.5) - Yoga - - React-RCTVibration (0.81.4): + - React-RCTVibration (0.81.5): - React-Core-prebuilt - React-Core/RCTVibrationHeaders - React-jsi @@ -2057,15 +2056,15 @@ PODS: - React-RCTFBReactNativeSpec - ReactCommon - ReactNativeDependencies - - React-rendererconsistency (0.81.4) - - React-renderercss (0.81.4): + - React-rendererconsistency (0.81.5) + - React-renderercss (0.81.5): - React-debug - React-utils - - React-rendererdebug (0.81.4): + - React-rendererdebug (0.81.5): - React-Core-prebuilt - React-debug - ReactNativeDependencies - - React-RuntimeApple (0.81.4): + - React-RuntimeApple (0.81.5): - hermes-engine - React-callinvoker - React-Core-prebuilt @@ -2088,7 +2087,7 @@ PODS: - React-runtimescheduler - React-utils - ReactNativeDependencies - - React-RuntimeCore (0.81.4): + - React-RuntimeCore (0.81.5): - hermes-engine - React-Core-prebuilt - React-cxxreact @@ -2104,14 +2103,14 @@ PODS: - React-runtimescheduler - React-utils - ReactNativeDependencies - - React-runtimeexecutor (0.81.4): + - React-runtimeexecutor (0.81.5): - React-Core-prebuilt - React-debug - React-featureflags - - React-jsi (= 0.81.4) + - React-jsi (= 0.81.5) - React-utils - ReactNativeDependencies - - React-RuntimeHermes (0.81.4): + - React-RuntimeHermes (0.81.5): - hermes-engine - React-Core-prebuilt - React-featureflags @@ -2126,7 +2125,7 @@ PODS: - React-runtimeexecutor - React-utils - ReactNativeDependencies - - React-runtimescheduler (0.81.4): + - React-runtimescheduler (0.81.5): - hermes-engine - React-callinvoker - React-Core-prebuilt @@ -2142,17 +2141,17 @@ PODS: - React-timing - React-utils - ReactNativeDependencies - - React-timing (0.81.4): + - React-timing (0.81.5): - React-debug - - React-utils (0.81.4): + - React-utils (0.81.5): - hermes-engine - React-Core-prebuilt - React-debug - - React-jsi (= 0.81.4) + - React-jsi (= 0.81.5) - ReactNativeDependencies - - ReactAppDependencyProvider (0.81.4): + - ReactAppDependencyProvider (0.81.5): - ReactCodegen - - ReactCodegen (0.81.4): + - ReactCodegen (0.81.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2172,43 +2171,43 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - ReactCommon (0.81.4): + - ReactCommon (0.81.5): - React-Core-prebuilt - - ReactCommon/turbomodule (= 0.81.4) + - ReactCommon/turbomodule (= 0.81.5) - ReactNativeDependencies - - ReactCommon/turbomodule (0.81.4): + - ReactCommon/turbomodule (0.81.5): - hermes-engine - - React-callinvoker (= 0.81.4) + - React-callinvoker (= 0.81.5) - React-Core-prebuilt - - React-cxxreact (= 0.81.4) - - React-jsi (= 0.81.4) - - React-logger (= 0.81.4) - - React-perflogger (= 0.81.4) - - ReactCommon/turbomodule/bridging (= 0.81.4) - - ReactCommon/turbomodule/core (= 0.81.4) + - React-cxxreact (= 0.81.5) + - React-jsi (= 0.81.5) + - React-logger (= 0.81.5) + - React-perflogger (= 0.81.5) + - ReactCommon/turbomodule/bridging (= 0.81.5) + - ReactCommon/turbomodule/core (= 0.81.5) - ReactNativeDependencies - - ReactCommon/turbomodule/bridging (0.81.4): + - ReactCommon/turbomodule/bridging (0.81.5): - hermes-engine - - React-callinvoker (= 0.81.4) + - React-callinvoker (= 0.81.5) - React-Core-prebuilt - - React-cxxreact (= 0.81.4) - - React-jsi (= 0.81.4) - - React-logger (= 0.81.4) - - React-perflogger (= 0.81.4) + - React-cxxreact (= 0.81.5) + - React-jsi (= 0.81.5) + - React-logger (= 0.81.5) + - React-perflogger (= 0.81.5) - ReactNativeDependencies - - ReactCommon/turbomodule/core (0.81.4): + - ReactCommon/turbomodule/core (0.81.5): - hermes-engine - - React-callinvoker (= 0.81.4) + - React-callinvoker (= 0.81.5) - React-Core-prebuilt - - React-cxxreact (= 0.81.4) - - React-debug (= 0.81.4) - - React-featureflags (= 0.81.4) - - React-jsi (= 0.81.4) - - React-logger (= 0.81.4) - - React-perflogger (= 0.81.4) - - React-utils (= 0.81.4) + - React-cxxreact (= 0.81.5) + - React-debug (= 0.81.5) + - React-featureflags (= 0.81.5) + - React-jsi (= 0.81.5) + - React-logger (= 0.81.5) + - React-perflogger (= 0.81.5) + - React-utils (= 0.81.5) - ReactNativeDependencies - - ReactNativeDependencies (0.81.4) + - ReactNativeDependencies (0.81.5) - RNCAsyncStorage (2.2.0): - hermes-engine - RCTRequired @@ -2253,14 +2252,54 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNFBApp (23.7.0): - - Firebase/CoreOnly (= 12.6.0) + - RNFBApp (23.8.6): + - Firebase/CoreOnly (= 12.8.0) + - hermes-engine + - RCTRequired + - RCTTypeSafety - React-Core - - RNFBMessaging (23.7.0): - - Firebase/Messaging (= 12.6.0) + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - RNFBMessaging (23.8.6): + - Firebase/Messaging (= 12.8.0) - FirebaseCoreExtension + - hermes-engine + - RCTRequired + - RCTTypeSafety - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies - RNFBApp + - Yoga - RNGestureHandler (2.28.0): - hermes-engine - RCTRequired @@ -2283,34 +2322,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - rnmapbox-maps (10.2.7): - - MapboxMaps (~> 11.15.2) - - React - - React-Core - - rnmapbox-maps/DynamicLibrary (= 10.2.7) - - Turf - - rnmapbox-maps/DynamicLibrary (10.2.7): - - hermes-engine - - MapboxMaps (~> 11.15.2) - - RCTRequired - - RCTTypeSafety - - React - - React-Core - - React-Core-prebuilt - - React-featureflags - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Turf - - Yoga - - RNReanimated (4.1.0): + - RNReanimated (4.1.6): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2332,10 +2344,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNReanimated/reanimated (= 4.1.0) + - RNReanimated/reanimated (= 4.1.6) - RNWorklets - Yoga - - RNReanimated/reanimated (4.1.0): + - RNReanimated/reanimated (4.1.6): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2357,10 +2369,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNReanimated/reanimated/apple (= 4.1.0) + - RNReanimated/reanimated/apple (= 4.1.6) - RNWorklets - Yoga - - RNReanimated/reanimated/apple (4.1.0): + - RNReanimated/reanimated/apple (4.1.6): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2476,7 +2488,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNVectorIcons (10.2.0): + - RNVectorIcons (10.3.0): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2498,7 +2510,7 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - RNWorklets (0.5.1): + - RNWorklets (0.5.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2520,9 +2532,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNWorklets/worklets (= 0.5.1) + - RNWorklets/worklets (= 0.5.2) - Yoga - - RNWorklets/worklets (0.5.1): + - RNWorklets/worklets (0.5.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2544,9 +2556,9 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - ReactNativeDependencies - - RNWorklets/worklets/apple (= 0.5.1) + - RNWorklets/worklets/apple (= 0.5.2) - Yoga - - RNWorklets/worklets/apple (0.5.1): + - RNWorklets/worklets/apple (0.5.2): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2569,9 +2581,9 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga - - SDWebImage (5.21.3): - - SDWebImage/Core (= 5.21.3) - - SDWebImage/Core (5.21.3) + - SDWebImage (5.21.6): + - SDWebImage/Core (= 5.21.6) + - SDWebImage/Core (5.21.6) - SDWebImageAVIFCoder (0.11.1): - libavif/core (>= 0.11.0) - SDWebImage (~> 5.10) @@ -2580,7 +2592,6 @@ PODS: - SDWebImageWebPCoder (0.14.6): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - - Turf (4.0.0) - Yoga (0.0.0) - ZXingObjC/Core (3.6.9) - ZXingObjC/OneD (3.6.9): @@ -2625,6 +2636,7 @@ DEPENDENCIES: - Firebase - Firebase/Messaging - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - "maplibre-react-native (from `../node_modules/@maplibre/maplibre-react-native`)" - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) @@ -2700,7 +2712,6 @@ DEPENDENCIES: - "RNFBApp (from `../node_modules/@react-native-firebase/app`)" - "RNFBMessaging (from `../node_modules/@react-native-firebase/messaging`)" - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - - "rnmapbox-maps (from `../node_modules/@rnmapbox/maps`)" - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - RNSVG (from `../node_modules/react-native-svg`) @@ -2724,16 +2735,12 @@ SPEC REPOS: - libavif - libdav1d - libwebp - - MapboxCommon - - MapboxCoreMaps - - MapboxMaps - nanopb - PromisesObjC - SDWebImage - SDWebImageAVIFCoder - SDWebImageSVGCoder - SDWebImageWebPCoder - - Turf - ZXingObjC EXTERNAL SOURCES: @@ -2806,6 +2813,8 @@ EXTERNAL SOURCES: hermes-engine: :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 + maplibre-react-native: + :path: "../node_modules/@maplibre/maplibre-react-native" RCTDeprecation: :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" RCTRequired: @@ -2954,8 +2963,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@react-native-firebase/messaging" RNGestureHandler: :path: "../node_modules/react-native-gesture-handler" - rnmapbox-maps: - :path: "../node_modules/@rnmapbox/maps" RNReanimated: :path: "../node_modules/react-native-reanimated" RNScreens: @@ -2970,147 +2977,143 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - EXApplication: 296622817d459f46b6c5fe8691f4aac44d2b79e7 - EXConstants: fd688cef4e401dcf798a021cfb5d87c890c30ba3 + EXApplication: 1e98d4b1dccdf30627f92917f4b2c5a53c330e5f + EXConstants: fce59a631a06c4151602843667f7cfe35f81e271 EXImageLoader: 189e3476581efe3ad4d1d3fb4735b7179eb26f05 EXJSONUtils: 1d3e4590438c3ee593684186007028a14b3686cd - EXManifests: 224345a575fca389073c416297b6348163f28d1a - EXNotifications: a62e1f8e3edd258dc3b155d3caa49f32920f1c6c - Expo: 9e6ddfbc1f5aefde22029899293c701f1d34c2b1 - expo-dev-client: f3434d6ca09ecb14ae48c2a3912bdbb07464cc85 - expo-dev-launcher: b9538b1e0dc3fd2ddad75017b6ee9c8dfb206925 - expo-dev-menu: 8f868d1bab6d673d59e5a08ca610056b290dd555 + EXManifests: a8d97683e5c7a3b026ffbd58559c64dc655b747b + EXNotifications: 9eec98712cc814ceff916d876cb53859003b0597 + Expo: aadbcc8c6c14ff3105a9154f1683cb1424ff0d2a + expo-dev-client: 425ee077d6754a98cfe3a2e2410d29b440b24c9d + expo-dev-launcher: a4f4cdef064ab1fb8621e5b8c7c457cd6e9568c3 + expo-dev-menu: 05b18812110c175814c6af0d09dd658abcc5e00d expo-dev-menu-interface: 600df12ea01efecdd822daaf13cc0ac091775533 - ExpoAsset: 84810d6fed8179f04d4a7a4a6b37028bbd726e26 - ExpoCamera: ae1d6691b05b753261a845536d2b19a9788a8750 - ExpoClipboard: af650d14765f19c60ce2a1eaf9dfe6445eff7365 - ExpoDevice: 148accb4071873d19fba80a2506c58ffa433d620 - ExpoDocumentPicker: 2200eefc2817f19315fa18f0147e0b80ece86926 - ExpoFileSystem: 5fb091ea11198e109ceef2bdef2e6e66523e62c4 - ExpoFont: 86ceec09ffed1c99cfee36ceb79ba149074901b5 - ExpoHaptics: 807476b0c39e9d82b7270349d6487928ce32df84 - ExpoHead: 9539b6c97faa57b2deb0414205e084b0a2bc15f1 - ExpoImage: e88f500585913969b930e13a4be47277eb7c6de8 - ExpoImagePicker: d251aab45a1b1857e4156fed88511b278b4eee1c - ExpoKeepAwake: 1a2e820692e933c94a565ec3fbbe38ac31658ffe - ExpoLinearGradient: a464898cb95153125e3b81894fd479bcb1c7dd27 - ExpoLinking: f051f28e50ea9269ff539317c166adec81d9342d - ExpoLocation: 93d7faa0c2adbd5a04686af0c1a61bc6ed3ee2f7 - ExpoModulesCore: 9281d8f1cda9d0c37dbce34c26014212b22eb8c0 - ExpoSplashScreen: 0634b705953e6934a5156397162eefc1ee5d6a7c - ExpoSymbols: 1ae04ce686de719b9720453b988d8bc5bf776c68 - ExpoSystemUI: 6cd74248a2282adf6dec488a75fa532d69dee314 - ExpoWebBrowser: b973e1351fdcf5fec0c400997b1851f5a8219ec3 + ExpoAsset: f867e55ceb428aab99e1e8c082b5aee7c159ea18 + ExpoCamera: 6a326deb45ba840749652e4c15198317aa78497e + ExpoClipboard: b36b287d8356887844bb08ed5c84b5979bb4dd1e + ExpoDevice: 6327c3c200816795708885adf540d26ecab83d1a + ExpoDocumentPicker: 7cd9e71a0f66fb19eb0a586d6f26eee1284692e0 + ExpoFileSystem: 858a44267a3e6e9057e0888ad7c7cfbf55d52063 + ExpoFont: f543ce20a228dd702813668b1a07b46f51878d47 + ExpoHaptics: d3a6375d8dcc3a1083d003bc2298ff654fafb536 + ExpoHead: 7e19b2272edf492262acf8afb391a295198a6b23 + ExpoImage: 686f972bff29525733aa13357f6691dc90aa03d8 + ExpoImagePicker: 1af3e4e31512d2f34c95c2a3018a3edc40aee748 + ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 + ExpoLinearGradient: 809102bdb979f590083af49f7fa4805cd931bd58 + ExpoLinking: 8f0aaf69aa56f832913030503b6263dc6f647f37 + ExpoLocation: d5b61cb4970fa982e39ca94246a206a0c3b812ca + ExpoModulesCore: f3da4f1ab5a8375d0beafab763739dbee8446583 + ExpoSplashScreen: bc3cffefca2716e5f22350ca109badd7e50ec14d + ExpoSymbols: 349ee2b4d7d5ff3ea8436467914f8a67635aa354 + ExpoSystemUI: 2ad325f361a2fcd96a464e8574e19935c461c9cc + ExpoWebBrowser: 17b064c621789e41d4816c95c93f429b84971f52 EXUpdatesInterface: 5adf50cb41e079c861da6d9b4b954c3db9a50734 - FBLazyVector: 9e0cd874afd81d9a4d36679daca991b58b260d42 - Firebase: a451a7b61536298fd5cbfe3a746fd40443a50679 - FirebaseAnalytics: d0a97a0db6425e5a5d966340b87f92ca7b13a557 - FirebaseCore: 0e38ad5d62d980a47a64b8e9301ffa311457be04 - FirebaseCoreExtension: 032fd6f8509e591fda8cb76f6651f20d926b121f - FirebaseCoreInternal: 69bf1306a05b8ac43004f6cc1f804bb7b05b229e - FirebaseInstallations: 631b38da2e11a83daa4bfb482f79d286a5dfa7ad - FirebaseMessaging: a61bc42dcab3f7a346d94bbb54dab2c9435b18b2 + FBLazyVector: e95a291ad2dadb88e42b06e0c5fb8262de53ec12 + Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d + FirebaseAnalytics: f20bbad8cb7f65d8a5eaefeb424ae8800a31bdfc + FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c + FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2 + FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21 + FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0 + FirebaseMessaging: 7f42cfd10ec64181db4e01b305a613791c8e782c GoogleAdsOnDeviceConversion: d68c69dd9581a0f5da02617b6f377e5be483970f - GoogleAppMeasurement: 3bf40aff49a601af5da1c3345702fcb4991d35ee + GoogleAppMeasurement: 72c9a682fec6290327ea5e3c4b829b247fcb2c17 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - hermes-engine: 35c763d57c9832d0eef764316ca1c4d043581394 - libavif: 84bbb62fb232c3018d6f1bab79beea87e35de7b7 + hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172 + libavif: 5f8e715bea24debec477006f21ef9e95432e254d libdav1d: 23581a4d8ec811ff171ed5e2e05cd27bad64c39f libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - MapboxCommon: 975faa94b893bb64a1d28b09d9d6d820e1030a26 - MapboxCoreMaps: 105af9894d850290fbb466e9f9a133f5d175abf1 - MapboxMaps: e97e59d6ba48bb6f695a4c1dc2f174cb24743cd4 + maplibre-react-native: 37d86b5b7b04dedaceebc577644e67acd7b5f437 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RCTDeprecation: 7487d6dda857ccd4cb3dd6ecfccdc3170e85dcbc - RCTRequired: 54128b7df8be566881d48c7234724a78cb9b6157 - RCTTypeSafety: d2b07797a79e45d7b19e1cd2f53c79ab419fe217 - React: 2073376f47c71b7e9a0af7535986a77522ce1049 - React-callinvoker: 00fa0972a70df7408a4f088144b67207b157e386 - React-Core: d375dd308561785c739a621a21802e5e7e047dee - React-Core-prebuilt: dde79b89f8863efebb1d532a3335f472927da669 - React-CoreModules: 3eb9b1410a317987c557afc683cc50099562c91d - React-cxxreact: 724210b64158d97f150d8d254a7319e73ef77ee7 - React-debug: c01d176522cf57cdc4a4a66d1974968fcf497f32 - React-defaultsnativemodule: 3953ff49013fa997e72586628e1d218fdaf3abdb - React-domnativemodule: 540b9c7a8f31b6f4ed449aafd3a272e1f1107089 - React-Fabric: 00b792be016edad758a63c4ebac15e01d35f6355 - React-FabricComponents: 16ebdb9245d91ec27985a038d0a6460f499db54e - React-FabricImage: 2a967b5f0293c1c49ec883babfd4992d161e3583 - React-featureflags: 4150b4ddac8210b1e3c538cfb455050b5ee05d8d - React-featureflagsnativemodule: ff977040205b96818ac1f884846493cb8a2aca28 - React-graphics: ec689ac1c13a9ddb1af83baf195264676ecdbeb6 - React-hermes: ff60a3407f27f3fc82f661774a7ab6559a24ab69 - React-idlecallbacksnativemodule: 5f5ce3c424941f77da4ac3adba681149e68b1221 - React-ImageManager: 8d87296a86f9ee290c1d32c68c7be1be63492467 - React-jserrorhandler: 072756f12136284c86e96c33cdfece4d7286a99f - React-jsi: b507852b42a9125dffbf6ae7a33792fb521b29a2 - React-jsiexecutor: f970eed6debb91fe5d5d6cb5734d39cf86c59896 - React-jsinspector: 766e113e9482b22971b30236d10c04d8af38269e - React-jsinspectorcdp: 5b60350e29fe2566d9ed9799858c04b8e6095a3e - React-jsinspectornetwork: b3cc9a20c6b270f792eaaaa14313019a031b327d - React-jsinspectortracing: d99120fcf0864209c45cefbc9fc4605c8189c0ef - React-jsitooling: 9e41724cc47feadefbede31ca91d70f6ff079656 - React-jsitracing: ca020d934502de8e02cccf451501434a5e584027 - React-logger: 7b234de35acb469ce76d6bbb0457f664d6f32f62 - React-Mapbuffer: fbe1da882a187e5898bdf125e1cc6e603d27ecae - React-microtasksnativemodule: 76905804171d8ccbe69329fc84c57eb7934add7f - react-native-keyboard-controller: 229dbaa07ea88c743c3048420478513887f9f3af + RCTDeprecation: 943572d4be82d480a48f4884f670135ae30bf990 + RCTRequired: 8f3cfc90cc25cf6e420ddb3e7caaaabc57df6043 + RCTTypeSafety: 16a4144ca3f959583ab019b57d5633df10b5e97c + React: 914f8695f9bf38e6418228c2ffb70021e559f92f + React-callinvoker: 1c0808402aee0c6d4a0d8e7220ce6547af9fba71 + React-Core: c61410ef0ca6055e204a963992e363227e0fd1c5 + React-Core-prebuilt: 02f0ad625ddd47463c009c2d0c5dd35c0d982599 + React-CoreModules: 1f6d1744b5f9f2ec684a4bb5ced25370f87e5382 + React-cxxreact: 3af79478e8187b63ffc22b794cd42d3fc1f1f2da + React-debug: 6328c2228e268846161f10082e80dc69eac2e90a + React-defaultsnativemodule: d635ef36d755321e5d6fc065bd166b2c5a0e9833 + React-domnativemodule: dd28f6d96cd21236e020be2eff6fe0b7d4ec3b66 + React-Fabric: 2e32c3fdbb1fbcf5fde54607e3abe453c6652ce2 + React-FabricComponents: 5ed0cdb81f6b91656cb4d3be432feaa28a58071a + React-FabricImage: 2bc714f818cb24e454f5d3961864373271b2faf8 + React-featureflags: 847642f41fa71ad4eec5e0351badebcad4fe6171 + React-featureflagsnativemodule: c868a544b2c626fa337bcbd364b1befe749f0d3f + React-graphics: 192ec701def5b3f2a07db2814dfba5a44986cff6 + React-hermes: e875778b496c86d07ab2ccaa36a9505d248a254b + React-idlecallbacksnativemodule: 4d57965cdf82c14ee3b337189836cd8491632b76 + React-ImageManager: bd0b99e370b13de82c9cd15f0f08144ff3de079e + React-jserrorhandler: a2fdef4cbcfdcdf3fa9f5d1f7190f7fd4535248d + React-jsi: 89d43d1e7d4d0663f8ba67e0b39eb4e4672c27de + React-jsiexecutor: abe4874aaab90dfee5dec480680220b2f8af07e3 + React-jsinspector: a0b3e051aef842b0b2be2353790ae2b2a5a65a8f + React-jsinspectorcdp: 6346013b2247c6263fbf5199adf4a8751e53bd89 + React-jsinspectornetwork: 26281aa50d49fc1ec93abf981d934698fa95714f + React-jsinspectortracing: 55eedf6d57540507570259a778663b90060bbd6e + React-jsitooling: 0e001113fa56d8498aa8ac28437ac0d36348e51a + React-jsitracing: b713793eb8a5bbc4d86a84e9d9e5023c0f58cbaf + React-logger: 50fdb9a8236da90c0b1072da5c32ee03aeb5bf28 + React-Mapbuffer: 9050ee10c19f4f7fca8963d0211b2854d624973e + React-microtasksnativemodule: f775db9e991c6f3b8ccbc02bfcde22770f96e23b + react-native-keyboard-controller: c872321fc580f8d815e9e2ad5558b24c26c18b4f react-native-maps: 9febd31278b35cd21e4fad2cf6fa708993be5dab react-native-pager-view: c8817c1d9f4643417e68f0b846c51214b2252eea - react-native-safe-area-context: 42a1b4f8774b577d03b53de7326e3d5757fe9513 + react-native-safe-area-context: 37e680fc4cace3c0030ee46e8987d24f5d3bdab2 react-native-webview: b29007f4723bca10872028067b07abacfa1cb35a - React-NativeModulesApple: a9464983ccc0f66f45e93558671f60fc7536e438 - React-oscompat: 73db7dbc80edef36a9d6ed3c6c4e1724ead4236d - React-perflogger: 123272debf907cc423962adafcf4513320e43757 - React-performancetimeline: 095146e4dc8fa4568e44d7a9debc134f27e103f9 - React-RCTActionSheet: 9fc2a0901af63cefe09c8df95a08c2cf8bb7797b - React-RCTAnimation: 785e743e489bc7aec14415dbc15f4f275b2c0276 - React-RCTAppDelegate: 0602c9e13130edcde4661ea66d11122a3a66f11a - React-RCTBlob: ae53b7508a5ced43378de2a88816f63423df1f24 - React-RCTFabric: 687a0cfb5726adea7fac63560b04410c86d97134 - React-RCTFBReactNativeSpec: 7c55cf4fb4d2baad32ce3850b8504a6ee22e11ce - React-RCTImage: f45474c75cdf1526114f75b27e86d004aa171b90 - React-RCTLinking: 56622ff97570e15e01dd9b5a657010c756a9e2d8 - React-RCTNetwork: 3fffa1ab5d6981f839e7679d56f8cb731ba92c07 - React-RCTRuntime: f38c04f744596fc8e1b4c5f6a57fc05c26955257 - React-RCTSettings: f4a8e1bd36f58ec8273c73d3deefdcf90143ac6a - React-RCTText: da852a51dd1d169b38136a4f4d1eaed35376556b - React-RCTVibration: ff92ef336e32e18efff0fa83c798a2dbbebe09bd - React-rendererconsistency: b83b300e607f4e30478a5c3365e260a760232b04 - React-renderercss: aa6a3cdd4fa4e3726123c42b49ba4dd978f81688 - React-rendererdebug: 6b12a782caf2e7e2f730434264357b7b6aed1781 - React-RuntimeApple: 8934aab108dcab957a87208fef4b6f1b3a04973a - React-RuntimeCore: 1d4345561ecc402e9e88b38e1d9b059a7a13b113 - React-runtimeexecutor: a9a059f222e4d78f45a4e92cada48a5fde989fb8 - React-RuntimeHermes: 05b955709a75038d282a9420342d7bea5857768a - React-runtimescheduler: 4ce23c9157b51101092537d4171ea4de48a5b863 - React-timing: 62441edf291b91ab5b96ab8f2f8fb648c063ce6f - React-utils: 485abe7eaefa04b20e0ef442593e022563a1419b - ReactAppDependencyProvider: 433ddfb4536948630aadd5bd925aff8a632d2fe3 - ReactCodegen: a15ad48730e9fb2a51a4c9f61fe1ed253dfcf10f - ReactCommon: 149b6c05126f2e99f2ed0d3c63539369546f8cae - ReactNativeDependencies: ed6d1e64802b150399f04f1d5728ec16b437251e + React-NativeModulesApple: 8969913947d5b576de4ed371a939455a8daf28aa + React-oscompat: ce47230ed20185e91de62d8c6d139ae61763d09c + React-perflogger: 02b010e665772c7dcb859d85d44c1bfc5ac7c0e4 + React-performancetimeline: 130db956b5a83aa4fb41ddf5ae68da89f3fb1526 + React-RCTActionSheet: 0b14875b3963e9124a5a29a45bd1b22df8803916 + React-RCTAnimation: a7b90fd2af7bb9c084428867445a1481a8cb112e + React-RCTAppDelegate: 3262bedd01263f140ec62b7989f4355f57cec016 + React-RCTBlob: c17531368702f1ebed5d0ada75a7cf5915072a53 + React-RCTFabric: 6409edd8cfdc3133b6cc75636d3b858fdb1d11ea + React-RCTFBReactNativeSpec: c004b27b4fa3bd85878ad2cf53de3bbec85da797 + React-RCTImage: c68078a120d0123f4f07a5ac77bea3bb10242f32 + React-RCTLinking: cf8f9391fe7fe471f96da3a5f0435235eca18c5b + React-RCTNetwork: ca31f7c879355760c2d9832a06ee35f517938a20 + React-RCTRuntime: a6cf4a1e42754fc87f493e538f2ac6b820e45418 + React-RCTSettings: e0e140b2ff4bf86d34e9637f6316848fc00be035 + React-RCTText: 75915bace6f7877c03a840cc7b6c622fb62bfa6b + React-RCTVibration: 25f26b85e5e432bb3c256f8b384f9269e9529f25 + React-rendererconsistency: 2dac03f448ff337235fd5820b10f81633328870d + React-renderercss: 477da167bb96b5ac86d30c5d295412fb853f5453 + React-rendererdebug: 2a1798c6f3ef5f22d466df24c33653edbabb5b89 + React-RuntimeApple: 28cf4d8eb18432f6a21abbed7d801ab7f6b6f0b4 + React-RuntimeCore: 41bf0fd56a00de5660f222415af49879fa49c4f0 + React-runtimeexecutor: 1afb774dde3011348e8334be69d2f57a359ea43e + React-RuntimeHermes: f3b158ea40e8212b1a723a68b4315e7a495c5fc6 + React-runtimescheduler: 3e1e2bec7300bae512533107d8e54c6e5c63fe0f + React-timing: 6fa9883de2e41791e5dc4ec404e5e37f3f50e801 + React-utils: 6e2035b53d087927768649a11a26c4e092448e34 + ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 + ReactCodegen: 7d4593f7591f002d137fe40cef3f6c11f13c88cc + ReactCommon: 08810150b1206cc44aecf5f6ae19af32f29151a8 + ReactNativeDependencies: 71ce9c28beb282aa720ea7b46980fff9669f428a RNCAsyncStorage: 3a4f5e2777dae1688b781a487923a08569e27fe4 RNDateTimePicker: be0e44bcb9ed0607c7c5f47dbedd88cf091f6791 - RNFBApp: 0c4cadae3900893d4631ea9a9effd14f853cd8e0 - RNFBMessaging: 873220424f6f6aa5c787baf5c7099e1e2ba087c9 + RNFBApp: 0301a2330161b0a66bcec40bfd15152d85030e48 + RNFBMessaging: f96ec02d65bac046b87f814a451faafc282ccd40 RNGestureHandler: 2914750df066d89bf9d8f48a10ad5f0051108ac3 - rnmapbox-maps: 3c20ce786a7991498445c32de4fe4244e32aa0ee - RNReanimated: 8d3a14606ad49f022c17d9e12a2d339e9e5ad9b0 + RNReanimated: e5c702a3e24cc1c68b2de67671713f35461678f4 RNScreens: d8d6f1792f6e7ac12b0190d33d8d390efc0c1845 RNSVG: 31d6639663c249b7d5abc9728dde2041eb2a3c34 - RNVectorIcons: 704d89d2f11886824e3bd5cbea34dd00aeade200 - RNWorklets: 76fce72926e28e304afb44f0da23b2d24f2c1fa0 - SDWebImage: 16309af6d214ba3f77a7c6f6fdda888cb313a50a + RNVectorIcons: 4351544f100d4f12cac156a7c13399e60bab3e26 + RNWorklets: 43cd6af94c18f89cbca10ea83fee281b69d75da5 + SDWebImage: 1bb6a1b84b6fe87b972a102bdc77dd589df33477 SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 - Turf: c9eb11a65d96af58cac523460fd40fec5061b081 - Yoga: 051f086b5ccf465ff2ed38a2cf5a558ae01aaaa1 + Yoga: 5934998fbeaef7845dbf698f698518695ab4cd1a ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: 9c1ecbc7e57ca21dc7c93635b18e66f8f6d7bdd9 +PODFILE CHECKSUM: c099c57001b36661ca723fa0edfdb338496e8b9d COCOAPODS: 1.16.2 -- 2.49.1 From e8f5c5b174c4acedd255e875d7ccb116b77cd773 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Wed, 25 Feb 2026 16:46:37 +0800 Subject: [PATCH 9/9] User Maps - app/(application)/(user)/maps/index.tsx - screens/Maps/MapsView2.tsx New Maps Component - screens/Maps/DrawerMaps.tsx Docs / Backup - docs/PODS.back ### No Issue --- app/(application)/(user)/maps/index.tsx | 8 +- docs/PODS.back | 101 +++++++++++++++++++ screens/Maps/DrawerMaps.tsx | 125 ++++++++++++++++++++++++ screens/Maps/MapsView2.tsx | 107 ++------------------ 4 files changed, 235 insertions(+), 106 deletions(-) create mode 100644 docs/PODS.back create mode 100644 screens/Maps/DrawerMaps.tsx diff --git a/app/(application)/(user)/maps/index.tsx b/app/(application)/(user)/maps/index.tsx index 6e61b6f..c8b4573 100644 --- a/app/(application)/(user)/maps/index.tsx +++ b/app/(application)/(user)/maps/index.tsx @@ -1,8 +1,4 @@ -import { BackButton } from "@/components"; -import MapsView from "@/screens/Maps/MapsView"; import MapsView2 from "@/screens/Maps/MapsView2"; -import { Stack } from "expo-router"; -import { Platform, Text, View } from "react-native"; export interface LocationItem { id: string | number; @@ -21,8 +17,8 @@ export default function Maps() { headerLeft: () => , }} /> */} - {Platform.OS === "ios" ? : } - {/* */} + {/* {Platform.OS === "ios" ? : } */} + {/* Map disabled */} ); diff --git a/docs/PODS.back b/docs/PODS.back new file mode 100644 index 0000000..600e3cd --- /dev/null +++ b/docs/PODS.back @@ -0,0 +1,101 @@ +NOTE: + +Untuk Development Selanjutnya: + Sekarang Anda bisa menjalankan: + + 1 # Untuk run iOS dev client + 2 bun run ios + 3 + 4 # Atau dengan Expo + 5 bunx expo run:ios + + Jika di masa depan terjadi error serupa, Anda bisa gunakan command ini: + + 1 cd ios + 2 rm -rf Pods Podfile.lock + 3 pod install + + + +use_modular_headers! + +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") + +require 'json' +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +ENV['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] +ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' +ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false' +platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' + +prepare_react_native_project! + +target 'HIPMIBadungConnect' do + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'npx', + 'expo-modules-autolinking', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) + + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] + + + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/..", + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', + ) + + pod 'Firebase' + pod 'Firebase/Messaging' + + # @generated begin post_installer - expo prebuild (DO NOT MODIFY) sync-4092f82b887b5b9edb84642c2a56984d69b9a403 + post_install do |installer| +# @generated begin @maplibre/maplibre-react-native:post-install - expo prebuild (DO NOT MODIFY) sync-6e76c80af0d70c0003d06822dd59b7c729fca472 + $MLRN.post_install(installer) +# @generated end @maplibre/maplibre-react-native:post-install + + # Fix all script phases with incorrect paths + installer.pods_project.targets.each do |target| + target.build_phases.each do |phase| + next unless phase.respond_to?(:shell_script) + + # Fix duplicated path issue + if phase.shell_script.include?('with-environment.sh') + # Remove any existing path and use proper relative path + phase.shell_script = phase.shell_script.gsub( + %r{(/.*?/node_modules/react-native)+/scripts/xcode/with-environment.sh}, + '${PODS_ROOT}/../../node_modules/react-native/scripts/xcode/with-environment.sh' + ) + end + end + end + + # Standard React Native post install + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + ) + end + # @generated end post_installer + +end \ No newline at end of file diff --git a/screens/Maps/DrawerMaps.tsx b/screens/Maps/DrawerMaps.tsx new file mode 100644 index 0000000..31ddffa --- /dev/null +++ b/screens/Maps/DrawerMaps.tsx @@ -0,0 +1,125 @@ +import { + DrawerCustom, + DummyLandscapeImage, + Spacing, + StackCustom, + TextCustom, + Grid, + ButtonCustom, +} from "@/components"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; +import { ICON_SIZE_SMALL } from "@/constants/constans-value"; +import { openInDeviceMaps } from "@/utils/openInDeviceMaps"; +import { FontAwesome, Ionicons } from "@expo/vector-icons"; +import { router } from "expo-router"; + +interface TypeDrawerMaps { + openDrawer: boolean; + setOpenDrawer: (value: boolean) => void; + selected: { + id: string; + bidangBisnis: string; + nomorTelepon: string; + alamatBisnis: string; + namePin: string; + imageId: string; + portofolioId: string; + latitude: number; + longitude: number; + }; +} + +export default function DrawerMaps({ + openDrawer, + setOpenDrawer, + selected, +}: TypeDrawerMaps) { + return ( + setOpenDrawer(false)} + height={"auto"} + > + + + + + } + rightItem={{selected.namePin}} + /> + + + } + rightItem={{selected.bidangBisnis}} + /> + + + } + rightItem={{selected.nomorTelepon}} + /> + + } + rightItem={{selected.alamatBisnis}} + /> + + + + { + setOpenDrawer(false); + router.push(`/portofolio/${selected.portofolioId}`); + }} + > + Detail + + + + { + openInDeviceMaps({ + latitude: selected.latitude, + longitude: selected.longitude, + title: selected.namePin, + }); + }} + > + Buka Maps + + + + + + ); +} diff --git a/screens/Maps/MapsView2.tsx b/screens/Maps/MapsView2.tsx index df9be3f..a21f522 100644 --- a/screens/Maps/MapsView2.tsx +++ b/screens/Maps/MapsView2.tsx @@ -10,20 +10,8 @@ import { MapView, PointAnnotation, } from "@maplibre/maplibre-react-native"; -import { router, useFocusEffect } from "expo-router"; -import { - DrawerCustom, - DummyLandscapeImage, - Spacing, - StackCustom, - TextCustom, - Grid, - ButtonCustom, -} from "@/components"; -import GridTwoView from "@/components/_ShareComponent/GridTwoView"; -import { ICON_SIZE_SMALL } from "@/constants/constans-value"; -import { openInDeviceMaps } from "@/utils/openInDeviceMaps"; -import { FontAwesome, Ionicons } from "@expo/vector-icons"; +import { useFocusEffect } from "expo-router"; +import DrawerMaps from "./DrawerMaps"; const MAP_STYLE = "https://tiles.openfreemap.org/styles/liberty"; @@ -146,92 +134,11 @@ export default function MapsView2() { - setOpenDrawer(false)} - height={"auto"} - > - - - - - } - rightItem={{selected.namePin}} - /> - - - } - rightItem={{selected.bidangBisnis}} - /> - - - } - rightItem={{selected.nomorTelepon}} - /> - - } - rightItem={{selected.alamatBisnis}} - /> - - - - { - setOpenDrawer(false); - router.push(`/portofolio/${selected.portofolioId}`); - }} - > - Detail - - - - { - openInDeviceMaps({ - latitude: selected.latitude, - longitude: selected.longitude, - title: selected.namePin, - }); - }} - > - Buka Maps - - - - - + ); } -- 2.49.1