-
+
);
}
diff --git a/apps/dashboard/src/app/[locale]/(app)/(sidebar)/layout.tsx b/apps/dashboard/src/app/[locale]/(app)/(sidebar)/layout.tsx
index 80fe938..41e9cef 100644
--- a/apps/dashboard/src/app/[locale]/(app)/(sidebar)/layout.tsx
+++ b/apps/dashboard/src/app/[locale]/(app)/(sidebar)/layout.tsx
@@ -1,8 +1,8 @@
import { SidebarInset, SidebarProvider } from "@basango/ui/components/sidebar";
-import { PageHeader } from "@/components/shell/page-header";
-import { AppSidebar } from "@/components/sidebar/app-sidebar";
-import { HydrateClient } from "@/trpc/server";
+import { PageHeader } from "#dashboard/components/shell/page-header";
+import { AppSidebar } from "#dashboard/components/sidebar/app-sidebar";
+import { HydrateClient } from "#dashboard/trpc/server";
export default async function Layout({ children }: { children: React.ReactNode }) {
return (
diff --git a/apps/dashboard/src/app/[locale]/(app)/(sidebar)/sources/page.tsx b/apps/dashboard/src/app/[locale]/(app)/(sidebar)/sources/page.tsx
index 8d70347..af2a7fb 100644
--- a/apps/dashboard/src/app/[locale]/(app)/(sidebar)/sources/page.tsx
+++ b/apps/dashboard/src/app/[locale]/(app)/(sidebar)/sources/page.tsx
@@ -1,26 +1,31 @@
+import { RouterOutputs } from "@basango/api/trpc/routers/_app";
import { Metadata } from "next";
-import { PageLayout } from "@/components/shell/page-layout";
-import { SourceCard } from "@/components/source-card";
-import { batchPrefetch, getQueryClient, trpc } from "@/trpc/server";
+import { PageLayout } from "#dashboard/components/shell/page-layout";
+import { SourceCard } from "#dashboard/components/source-card";
+import { HydrateClient, getQueryClient, prefetch, trpc } from "#dashboard/trpc/server";
export const metadata: Metadata = {
title: "Sources | Basango Dashboard",
};
+type SourceDetails = RouterOutputs["sources"]["get"][number];
+
export default async function Page() {
const queryClient = getQueryClient();
- batchPrefetch([trpc.sources.get.queryOptions()]);
+ prefetch(trpc.sources.get.queryOptions());
const sources = await queryClient.fetchQuery(trpc.sources.get.queryOptions());
return (
-
-
- {sources.map((source) => (
-
- ))}
-
-
+
+
+
+ {sources.map((source: SourceDetails) => (
+
+ ))}
+
+
+
);
}
diff --git a/apps/dashboard/src/app/[locale]/(public)/login/page.tsx b/apps/dashboard/src/app/[locale]/(public)/login/page.tsx
index cb9c391..229d6e4 100644
--- a/apps/dashboard/src/app/[locale]/(public)/login/page.tsx
+++ b/apps/dashboard/src/app/[locale]/(public)/login/page.tsx
@@ -1,6 +1,6 @@
import { GalleryVerticalEnd } from "lucide-react";
-import { LoginForm } from "@/components/forms/login-form";
+import { LoginForm } from "#dashboard/components/forms/login-form";
export default function LoginPage() {
return (
diff --git a/apps/dashboard/src/app/[locale]/providers.tsx b/apps/dashboard/src/app/[locale]/providers.tsx
index 0cc3398..81ce315 100644
--- a/apps/dashboard/src/app/[locale]/providers.tsx
+++ b/apps/dashboard/src/app/[locale]/providers.tsx
@@ -3,8 +3,8 @@
import { ThemeProvider } from "next-themes";
import type { ReactNode } from "react";
-import { I18nProviderClient } from "@/locales/client";
-import { TRPCReactProvider } from "@/trpc/client";
+import { I18nProviderClient } from "#dashboard/locales/client";
+import { TRPCReactProvider } from "#dashboard/trpc/client";
type ProviderProps = {
locale: string;
diff --git a/apps/dashboard/src/components/source-card.tsx b/apps/dashboard/src/components/source-card.tsx
index ab47534..d3909c9 100644
--- a/apps/dashboard/src/components/source-card.tsx
+++ b/apps/dashboard/src/components/source-card.tsx
@@ -1,10 +1,10 @@
"use client";
-import { Badge } from "@basango/ui/components/badge";
import {
Card,
CardContent,
CardDescription,
+ CardFooter,
CardHeader,
CardTitle,
} from "@basango/ui/components/card";
@@ -14,49 +14,9 @@ import {
ChartTooltip,
ChartTooltipContent,
} from "@basango/ui/components/chart";
-import { Separator } from "@basango/ui/components/separator";
import { Bar, BarChart, CartesianGrid, XAxis } from "recharts";
-interface CredibilityMetric {
- bias: string;
- reliability: string;
- transparency: string;
-}
-
-interface PublicationItem {
- date: string;
- count: number;
-}
-
-interface SourceCardProps {
- id: string;
- name: string;
- displayName: string | null;
- url: string;
- description: string;
- publicationGraph: {
- items: PublicationItem[];
- total: number;
- };
- credibility: CredibilityMetric;
-}
-
-const credibilityColors = {
- high: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",
- low: "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200",
- medium: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",
-};
-
-function getCredibilityColor(value: string): string {
- const lower = value.toLowerCase();
- if (lower.includes("high") || lower.includes("strong") || lower.includes("good")) {
- return credibilityColors.high;
- }
- if (lower.includes("medium") || lower.includes("moderate")) {
- return credibilityColors.medium;
- }
- return credibilityColors.low;
-}
+import { formatNumber } from "#dashboard/utils/utils";
const chartConfig = {
count: {
@@ -68,50 +28,34 @@ const chartConfig = {
},
} satisfies ChartConfig;
-export function SourceCard({
- id,
- name,
- displayName,
- url,
- description,
- publicationGraph,
- credibility,
-}: SourceCardProps) {
- const chartData = publicationGraph.items;
+type SourceDetails = {
+ id: string;
+ name: string;
+ displayName: string | null;
+ url: string;
+ description: string;
+ publicationGraph: {
+ items: { date: string; count: number }[];
+ total: number;
+ };
+ credibility: {
+ bias: string;
+ reliability: string;
+ transparency: string;
+ };
+ articles: number;
+};
+export function SourceCard({ source }: { source: SourceDetails }) {
return (
-
-
-
-
-
-
{description}
-
ID: {id}
-
-
+
+
+ {source.name}
+ {source.id}
-
-
-
-
+
+
+
- {
- return new Date(value).toLocaleDateString("en-US", {
- day: "numeric",
- month: "short",
- year: "numeric",
- });
- }}
- nameKey="views"
- />
- }
- />
-
+ } cursor={false} />
+
-
-
-
-
Credibility Metrics
-
-
-
Bias
-
- {credibility.bias}
-
-
-
-
Reliability
-
- {credibility.reliability}
-
-
-
-
Transparency
-
- {credibility.transparency}
-
-
-
-
-
-
-
-
Summary
-
-
-
Total Publications
-
{publicationGraph.total}
-
-
-
Timeline Entries
-
{publicationGraph.items.length}
-
-
-
+
+
+ {formatNumber(source.articles)} articles crawled
+
+
+ Showing last {source.publicationGraph.total} days
+
+
);
}
diff --git a/apps/dashboard/src/trpc/client.tsx b/apps/dashboard/src/trpc/client.tsx
index ee1fd5f..a49b197 100644
--- a/apps/dashboard/src/trpc/client.tsx
+++ b/apps/dashboard/src/trpc/client.tsx
@@ -2,8 +2,8 @@
import type { AppRouter } from "@basango/api/trpc/routers/_app";
import type { QueryClient } from "@tanstack/react-query";
-import { QueryClientProvider, isServer } from "@tanstack/react-query";
-import { createTRPCClient, httpBatchLink, loggerLink } from "@trpc/client";
+import { QueryClientProvider } from "@tanstack/react-query";
+import { createTRPCClient, httpBatchLink } from "@trpc/client";
import { createTRPCContext } from "@trpc/tanstack-react-query";
import { useState } from "react";
import superjson from "superjson";
@@ -15,7 +15,7 @@ export const { TRPCProvider, useTRPC } = createTRPCContext();
let browserQueryClient: QueryClient;
function getQueryClient() {
- if (isServer) {
+ if (typeof window === "undefined") {
// Server: always make a new query client
return makeQueryClient();
}
@@ -34,25 +34,25 @@ export function TRPCReactProvider(
children: React.ReactNode;
}>,
) {
+ // NOTE: Avoid useState when initializing the query client if you don't
+ // have a suspense boundary between this and the code that may
+ // suspend because React will throw away the client on the initial
+ // render if it suspends and there is no boundary
const queryClient = getQueryClient();
const [trpcClient] = useState(() =>
createTRPCClient({
links: [
httpBatchLink({
- async headers() {
- const token = window.localStorage.getItem("auth_token");
+ headers: async () => {
+ //const token = window.localStorage.getItem("auth_token");
+
return {
- Authorization: `Bearer ${token}`,
+ //Authorization: `Bearer ${token}`,
};
},
transformer: superjson,
url: `${process.env.NEXT_PUBLIC_API_URL}/trpc`,
}),
- loggerLink({
- enabled: (opts) =>
- process.env.NODE_ENV === "development" ||
- (opts.direction === "down" && opts.result instanceof Error),
- }),
],
}),
);
diff --git a/apps/dashboard/src/trpc/server.tsx b/apps/dashboard/src/trpc/server.tsx
index 9da7731..720ddff 100644
--- a/apps/dashboard/src/trpc/server.tsx
+++ b/apps/dashboard/src/trpc/server.tsx
@@ -1,7 +1,7 @@
+/** biome-ignore-all lint/suspicious/noExplicitAny: needed for tRPC type inference */
import "server-only";
import type { AppRouter } from "@basango/api/trpc/routers/_app";
-//import { getCountryCode, getLocale, getTimezone } from "@basango/location";
import { HydrationBoundary, dehydrate } from "@tanstack/react-query";
import { createTRPCClient, httpBatchLink, loggerLink } from "@trpc/client";
import { type TRPCQueryOptions, createTRPCOptionsProxy } from "@trpc/tanstack-react-query";
@@ -43,38 +43,14 @@ export const trpc = createTRPCOptionsProxy({
export function HydrateClient(props: { children: React.ReactNode }) {
const queryClient = getQueryClient();
-
return {props.children} ;
}
-export function prefetch>>(queryOptions: T) {
+export function prefetch>>(queryOptions: T) {
const queryClient = getQueryClient();
-
if (queryOptions.queryKey[1]?.type === "infinite") {
- void queryClient.prefetchInfiniteQuery(
- queryOptions as unknown as Parameters[0],
- );
+ void queryClient.prefetchInfiniteQuery(queryOptions as any);
} else {
- void queryClient.prefetchQuery(
- queryOptions as unknown as Parameters[0],
- );
- }
-}
-
-export function batchPrefetch>>(
- queryOptionsArray: T[],
-) {
- const queryClient = getQueryClient();
-
- for (const queryOptions of queryOptionsArray) {
- if (queryOptions.queryKey[1]?.type === "infinite") {
- void queryClient.prefetchInfiniteQuery(
- queryOptions as unknown as Parameters[0],
- );
- } else {
- void queryClient.prefetchQuery(
- queryOptions as unknown as Parameters[0],
- );
- }
+ void queryClient.prefetchQuery(queryOptions);
}
}
diff --git a/apps/dashboard/src/utils/utils.ts b/apps/dashboard/src/utils/utils.ts
new file mode 100644
index 0000000..bfacd3d
--- /dev/null
+++ b/apps/dashboard/src/utils/utils.ts
@@ -0,0 +1,110 @@
+import type { TZDate } from "@date-fns/tz";
+import { format, isSameYear } from "date-fns";
+
+export function formatSize(bytes: number): string {
+ const units = ["byte", "kilobyte", "megabyte", "gigabyte", "terabyte"];
+
+ const unitIndex = Math.max(
+ 0,
+ Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1),
+ );
+
+ return Intl.NumberFormat("en-US", {
+ style: "unit",
+ unit: units[unitIndex],
+ }).format(+Math.round(bytes / 1024 ** unitIndex));
+}
+
+export function secondsToHoursAndMinutes(seconds: number) {
+ const hours = Math.floor(seconds / 3600);
+ const minutes = Math.floor((seconds % 3600) / 60);
+
+ if (hours && minutes) {
+ return `${hours}h ${minutes}m`;
+ }
+
+ if (hours) {
+ return `${hours}h`;
+ }
+
+ if (minutes) {
+ return `${minutes}m`;
+ }
+
+ return "0m";
+}
+
+export function formatDate(date: string, dateFormat?: string | null, checkYear = true) {
+ if (checkYear && isSameYear(new Date(), new Date(date))) {
+ return format(new Date(date), "MMM d");
+ }
+
+ return format(new Date(date), dateFormat ?? "P");
+}
+
+export function formatNumber(value: number): string {
+ return Intl.NumberFormat("en-US").format(value);
+}
+
+export function getInitials(value: string) {
+ const formatted = value.toUpperCase().replace(/[\s.-]/g, "");
+
+ if (formatted.split(" ").length > 1) {
+ return `${formatted.charAt(0)}${formatted.charAt(1)}`;
+ }
+
+ if (value.length > 1) {
+ return formatted.charAt(0) + formatted.charAt(1);
+ }
+
+ return formatted.charAt(0);
+}
+
+export function formatDateRange(dates: TZDate[]): string {
+ if (!dates.length) return "";
+
+ const formatFullDate = (date: TZDate) => format(date, "MMM d");
+ const formatDay = (date: TZDate) => format(date, "d");
+
+ const startDate = dates[0];
+ const endDate = dates[1];
+
+ if (!startDate) return "";
+
+ if (dates.length === 1 || !endDate || startDate.getTime() === endDate.getTime()) {
+ return formatFullDate(startDate);
+ }
+
+ if (startDate.getMonth() === endDate.getMonth()) {
+ // Same month
+ return `${format(startDate, "MMM")} ${formatDay(startDate)} - ${formatDay(endDate)}`;
+ }
+ // Different months
+ return `${formatFullDate(startDate)} - ${formatFullDate(endDate)}`;
+}
+
+export function formatRelativeTime(date: Date): string {
+ const now = new Date();
+ const diffInSeconds = Math.floor((now.getTime() - date.getTime()) / 1000);
+
+ if (diffInSeconds < 60) {
+ return "just now";
+ }
+
+ const intervals = [
+ { label: "y", seconds: 31536000 },
+ { label: "mo", seconds: 2592000 },
+ { label: "d", seconds: 86400 },
+ { label: "h", seconds: 3600 },
+ { label: "m", seconds: 60 },
+ ] as const;
+
+ for (const interval of intervals) {
+ const count = Math.floor(diffInSeconds / interval.seconds);
+ if (count > 0) {
+ return `${count}${interval.label} ago`;
+ }
+ }
+
+ return "just now";
+}
diff --git a/apps/dashboard/tsconfig.json b/apps/dashboard/tsconfig.json
index f4b282d..49bd31a 100644
--- a/apps/dashboard/tsconfig.json
+++ b/apps/dashboard/tsconfig.json
@@ -2,8 +2,9 @@
"compilerOptions": {
"baseUrl": ".",
"paths": {
- "@/*": ["./src/*"],
- "@basango/ui/*": ["../../packages/ui/src/*"]
+ "@basango/api/*": ["../api/src/*"],
+ "@basango/ui/*": ["../../packages/ui/src/*"],
+ "#dashboard/*": ["./src/*"]
},
"plugins": [
{
@@ -13,12 +14,10 @@
},
"exclude": ["node_modules"],
"extends": "@basango/tsconfig/nextjs.json",
- "include": [
- "next-env.d.ts",
- "next.config.ts",
- "**/*.ts",
- "**/*.tsx",
- ".next/types/**/*.ts",
- "../../packages/ui/src/hooks/use-mobile.ts"
+ "include": ["next-env.d.ts", "next.config.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "references": [
+ {
+ "path": "../api"
+ }
]
}
diff --git a/apps/mobile-legacy/.env b/apps/mobile-legacy/.env
deleted file mode 100644
index bf1805b..0000000
--- a/apps/mobile-legacy/.env
+++ /dev/null
@@ -1,3 +0,0 @@
-EXPO_PUBLIC_API_URL=http://172.20.10.2:8000/api
-EXPO_PUBLIC_SENTRY_DSN=
-SENTRY_AUTH_TOKEN=
diff --git a/apps/mobile-legacy/.gitignore b/apps/mobile-legacy/.gitignore
deleted file mode 100644
index 9393cd6..0000000
--- a/apps/mobile-legacy/.gitignore
+++ /dev/null
@@ -1,41 +0,0 @@
-# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
-
-# dependencies
-node_modules/
-
-# Expo
-.expo/
-dist/
-web-build/
-expo-env.d.ts
-
-# Native
-*.orig.*
-*.jks
-*.p8
-*.p12
-*.key
-*.mobileprovision
-
-# Metro
-.metro-health-check*
-
-# debug
-npm-debug.*
-yarn-debug.*
-yarn-error.*
-
-# macOS
-.idea
-.DS_Store
-*.pem
-
-# local env files
-.env*.local
-
-# typescript
-*.tsbuildinfo
-
-app-example
-
-.env.local
diff --git a/apps/mobile-legacy/.prettierignore b/apps/mobile-legacy/.prettierignore
deleted file mode 100644
index 6d06de5..0000000
--- a/apps/mobile-legacy/.prettierignore
+++ /dev/null
@@ -1,6 +0,0 @@
-# Ignore artifacts:
-build
-coverage
-dist
-android
-ios
diff --git a/apps/mobile-legacy/.prettierrc b/apps/mobile-legacy/.prettierrc
deleted file mode 100644
index 6e1efde..0000000
--- a/apps/mobile-legacy/.prettierrc
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "semi": true,
- "trailingComma": "es5",
- "singleQuote": false,
- "tabWidth": 4,
- "useTabs": false,
- "printWidth": 120,
- "bracketSpacing": true,
- "arrowParens": "avoid"
-}
\ No newline at end of file
diff --git a/apps/mobile-legacy/README.md b/apps/mobile-legacy/README.md
deleted file mode 100644
index b029512..0000000
--- a/apps/mobile-legacy/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Mobile
-
-
-
----
-
-### Get started
-
-1. Install dependencies
-
-```bash
-bun install
-```
-
-2. Start the app
-
-```bash
-bunx expo start
-```
-
-In the output, you'll find options to open the app in a
-
-- [development build](https://docs.expo.dev/develop/development-builds/introduction/)
-- [Android emulator](https://docs.expo.dev/workflow/android-studio-emulator/)
-- [iOS simulator](https://docs.expo.dev/workflow/ios-simulator/)
-- [Expo Go](https://expo.dev/go)
diff --git a/apps/mobile-legacy/_package.json b/apps/mobile-legacy/_package.json
deleted file mode 100644
index 1bff74f..0000000
--- a/apps/mobile-legacy/_package.json
+++ /dev/null
@@ -1,128 +0,0 @@
-{
- "commitlint": {
- "extends": ["@commitlint/config-conventional"]
- },
- "config": {
- "commitizen": {
- "path": "cz-conventional-changelog"
- }
- },
- "dependencies": {
- "@expo-google-fonts/inter": "^0.3.0",
- "@expo/vector-icons": "^14.0.2",
- "@hookform/resolvers": "^5.1.1",
- "@react-navigation/bottom-tabs": "^7.2.0",
- "@react-navigation/native": "^7.0.14",
- "@sentry/react-native": "^6.15.1",
- "@shopify/flash-list": "1.7.3",
- "@tamagui/colors": "^1.126.1",
- "@tamagui/config": "^1.126.1",
- "@tamagui/linear-gradient": "^1.126.1",
- "@tamagui/lucide-icons": "^1.129.2",
- "@tamagui/theme-builder": "^1.126.1",
- "@tanstack/react-query": "^5.74.4",
- "axios": "^1.9.0",
- "date-fns": "^4.1.0",
- "expo": "~52.0.46",
- "expo-blur": "~14.0.3",
- "expo-build-properties": "~0.13.2",
- "expo-constants": "~17.0.8",
- "expo-dev-client": "~5.0.20",
- "expo-font": "~13.0.4",
- "expo-haptics": "~14.0.1",
- "expo-linear-gradient": "~14.0.2",
- "expo-linking": "~7.0.5",
- "expo-localization": "~16.0.1",
- "expo-network": "~7.0.5",
- "expo-router": "~4.0.20",
- "expo-secure-store": "^14.0.1",
- "expo-splash-screen": "~0.29.24",
- "expo-status-bar": "~2.0.1",
- "expo-symbols": "~0.2.2",
- "expo-system-ui": "~4.0.9",
- "expo-web-browser": "~14.0.2",
- "joi": "^17.13.3",
- "qs": "^6.14.0",
- "react": "18.3.1",
- "react-content-loader": "^7.0.2",
- "react-dom": "18.3.1",
- "react-hook-form": "^7.58.1",
- "react-native": "0.76.9",
- "react-native-gesture-handler": "~2.20.2",
- "react-native-reanimated": "~3.16.1",
- "react-native-safe-area-context": "^5.4.0",
- "react-native-screens": "~4.4.0",
- "react-native-svg": "^15.11.2",
- "react-native-toast-message": "^2.3.0",
- "react-native-web": "~0.19.13",
- "react-native-webview": "13.12.5",
- "tamagui": "^1.126.1",
- "zustand": "^5.0.5"
- },
- "devDependencies": {
- "@babel/core": "^7.25.2",
- "@commitlint/cli": "^19.8.1",
- "@commitlint/config-conventional": "^19.8.1",
- "@types/jest": "^29.5.12",
- "@types/qs": "^6.9.18",
- "@types/react": "~18.3.12",
- "@types/react-test-renderer": "^18.3.0",
- "@typescript-eslint/eslint-plugin": "^8.32.1",
- "@typescript-eslint/parser": "^8.32.1",
- "commitizen": "^4.3.1",
- "cz-conventional-changelog": "^3.3.0",
- "husky": "^9.1.7",
- "jest": "^29.2.1",
- "jest-expo": "~52.0.6",
- "lint-staged": "^16.0.0",
- "prettier": "^3.5.3",
- "react-test-renderer": "18.3.1",
- "typescript": "^5.3.3"
- },
- "jest": {
- "preset": "jest-expo"
- },
- "lint-staged": {
- "*.ts": ["prettier --write", "eslint --fix"],
- "*.tsx": ["prettier --write", "eslint --fix"]
- },
- "main": "expo-router/entry",
- "name": "drc-news",
- "overrides": {
- "globals": "14.0.0"
- },
- "private": true,
- "scripts": {
- "=========== CODE STYLE ============": "",
- "============= EAS BUILD =============": "",
- "============= HUSKY =============": "",
- "============= MISCELLANEOUS =============": "",
- "===================== EAS SUBMIT =====================": "",
- "android": "expo run:android",
- "build:android:dev": "eas build --profile development --platform android",
- "build:android:e2e": "eas build --profile android-e2e --platform android",
- "build:android:prev": "eas build --profile preview --platform android",
- "build:android:prod": "eas build --profile production --platform android",
- "build:android:sim": "eas build --profile dev-sim --platform android",
- "build:ios:dev": "eas build --profile development --platform ios",
- "build:ios:e2e": "eas build --profile ios-e2e --platform ios",
- "build:ios:prev": "eas build --profile preview --platform ios",
- "build:ios:prod": "eas build --profile production --platform ios",
- "build:ios:sim": "eas build --profile dev-sim --platform ios",
- "check": "prettier src --check",
- "check-types": "tsc --noEmit",
- "commit": "cz",
- "delete:dstore": "find -name '.DS_Store' -type f -delete",
- "eas:android:submit": "eas submit -p android --profile production",
- "eas:ios:submit": "eas submit -p ios --profile production",
- "format": "prettier src --write",
- "ios": "expo run:ios",
- "lint:check": "eslint src --debug",
- "lint:fix": "eslint src --fix",
- "prepare": "husky",
- "start": "expo start",
- "test": "jest --watchAll",
- "web": "expo start --web"
- },
- "version": "1.0.0"
-}
diff --git a/apps/mobile-legacy/app.json b/apps/mobile-legacy/app.json
deleted file mode 100644
index 82adf55..0000000
--- a/apps/mobile-legacy/app.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "expo": {
- "android": {
- "adaptiveIcon": {
- "backgroundColor": "#ffffff",
- "foregroundImage": "./src/assets/images/logo.png",
- "package": "dev.ngandu.basango"
- },
- "package": "dev.ngandu.basango"
- },
- "experiments": {
- "typedRoutes": true
- },
- "extra": {
- "eas": {
- "projectId": "57281e7a-46e3-4aac-8715-5165fa0bf560"
- },
- "router": {
- "origin": false
- }
- },
- "githubUrl": "https://github.com/bernard-ng/basango",
- "icon": "./src/assets/images/logo.png",
- "ios": {
- "bundleIdentifier": "dev.ngandu.basango",
- "supportsTablet": true
- },
- "name": "basango",
- "newArchEnabled": true,
- "orientation": "portrait",
- "owner": "bernard-ng",
- "plugins": [
- "expo-router",
- [
- "expo-splash-screen",
- {
- "backgroundColor": "#ffffff",
- "image": "./src/assets/images/logo.png",
- "imageWidth": 200,
- "resizeMode": "contain"
- }
- ],
- "expo-build-properties",
- "expo-localization",
- [
- "@sentry/react-native/expo",
- {
- "organization": "devscast-software",
- "project": "basango",
- "url": "https://glitchtip.devscast.tech/"
- }
- ]
- ],
- "scheme": "basango",
- "slug": "basango",
- "userInterfaceStyle": "automatic",
- "version": "1.0.0",
- "web": {
- "bundler": "metro",
- "favicon": "./src/assets/images/logo.png",
- "output": "static"
- }
- }
-}
diff --git a/apps/mobile-legacy/babel.config.js b/apps/mobile-legacy/babel.config.js
deleted file mode 100644
index 9ee4747..0000000
--- a/apps/mobile-legacy/babel.config.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = (api) => {
- api.cache(true);
- return {
- plugins: ["react-native-reanimated/plugin"],
- presets: [["babel-preset-expo", { jsxRuntime: "automatic" }]],
- };
-};
diff --git a/apps/mobile-legacy/commitlint.config.js b/apps/mobile-legacy/commitlint.config.js
deleted file mode 100644
index 3185047..0000000
--- a/apps/mobile-legacy/commitlint.config.js
+++ /dev/null
@@ -1,23 +0,0 @@
-module.exports = {
- extends: ["@commitlint/config-conventional"],
- rules: {
- "subject-case": [2, "never", ["sentence-case", "start-case", "pascal-case", "upper-case"]],
- "type-enum": [
- 2,
- "always",
- [
- "feat", // New feature
- "fix", // Bug fix
- "docs", // Documentation only changes
- "style", // Changes that do not affect the meaning of the code (white-space, formatting, etc)
- "refactor", // Code changes that neither fixes a bug nor adds a feature
- "perf", // Performance improvements
- "test", // Adding missing tests or correcting existing tests
- "build", // Changes that affect the build system or external dependencies
- "ci", // Changes to CI configuration files and scripts
- "chore", // Other changes that don't modify src or test files
- "revert", // Reverts a previous commit
- ],
- ],
- },
-};
diff --git a/apps/mobile-legacy/eas.json b/apps/mobile-legacy/eas.json
deleted file mode 100644
index b7967bb..0000000
--- a/apps/mobile-legacy/eas.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "build": {
- "development": {
- "developmentClient": true,
- "distribution": "internal"
- },
- "preview": {
- "distribution": "internal"
- },
- "production": {
- "autoIncrement": true
- }
- },
- "cli": {
- "appVersionSource": "remote",
- "version": ">= 16.3.1"
- },
- "submit": {
- "production": {}
- }
-}
diff --git a/apps/mobile-legacy/ios/.gitignore b/apps/mobile-legacy/ios/.gitignore
deleted file mode 100644
index 8beb344..0000000
--- a/apps/mobile-legacy/ios/.gitignore
+++ /dev/null
@@ -1,30 +0,0 @@
-# OSX
-#
-.DS_Store
-
-# Xcode
-#
-build/
-*.pbxuser
-!default.pbxuser
-*.mode1v3
-!default.mode1v3
-*.mode2v3
-!default.mode2v3
-*.perspectivev3
-!default.perspectivev3
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
-project.xcworkspace
-.xcode.env.local
-
-# Bundle artifacts
-*.jsbundle
-
-# CocoaPods
-/Pods/
diff --git a/apps/mobile-legacy/ios/.xcode.env b/apps/mobile-legacy/ios/.xcode.env
deleted file mode 100644
index 3d5782c..0000000
--- a/apps/mobile-legacy/ios/.xcode.env
+++ /dev/null
@@ -1,11 +0,0 @@
-# This `.xcode.env` file is versioned and is used to source the environment
-# used when running script phases inside Xcode.
-# To customize your local environment, you can create an `.xcode.env.local`
-# file that is not versioned.
-
-# NODE_BINARY variable contains the PATH to the node executable.
-#
-# Customize the NODE_BINARY variable here.
-# For example, to use nvm with brew, add the following line
-# . "$(brew --prefix nvm)/nvm.sh" --no-use
-export NODE_BINARY=$(command -v node)
diff --git a/apps/mobile-legacy/ios/Podfile b/apps/mobile-legacy/ios/Podfile
deleted file mode 100644
index bd73634..0000000
--- a/apps/mobile-legacy/ios/Podfile
+++ /dev/null
@@ -1,66 +0,0 @@
-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'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
-ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
-
-platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'
-install! 'cocoapods',
- :deterministic_uuids => false
-
-prepare_react_native_project!
-
-target 'basango' 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 = [
- 'node',
- '--no-warnings',
- '--eval',
- 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
- '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',
- )
-
- post_install do |installer|
- react_native_post_install(
- installer,
- config[:reactNativePath],
- :mac_catalyst_enabled => false,
- :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
- )
-
- # This is necessary for Xcode 14, because it signs resource bundles by default
- # when building for devices.
- installer.target_installation_results.pod_target_installation_results
- .each do |pod_name, target_installation_result|
- target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
- resource_bundle_target.build_configurations.each do |config|
- config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
- end
- end
- end
- end
-end
diff --git a/apps/mobile-legacy/ios/Podfile.lock b/apps/mobile-legacy/ios/Podfile.lock
deleted file mode 100644
index 943da44..0000000
--- a/apps/mobile-legacy/ios/Podfile.lock
+++ /dev/null
@@ -1,2573 +0,0 @@
-PODS:
- - boost (1.84.0)
- - DoubleConversion (1.1.6)
- - EXConstants (17.0.8):
- - ExpoModulesCore
- - EXJSONUtils (0.14.0)
- - EXManifests (0.15.8):
- - ExpoModulesCore
- - Expo (52.0.46):
- - ExpoModulesCore
- - expo-dev-client (5.0.20):
- - EXManifests
- - expo-dev-launcher
- - expo-dev-menu
- - expo-dev-menu-interface
- - EXUpdatesInterface
- - expo-dev-launcher (5.0.35):
- - DoubleConversion
- - EXManifests
- - expo-dev-launcher/Main (= 5.0.35)
- - expo-dev-menu
- - expo-dev-menu-interface
- - ExpoModulesCore
- - EXUpdatesInterface
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTAppDelegate
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-launcher/Main (5.0.35):
- - DoubleConversion
- - EXManifests
- - expo-dev-launcher/Unsafe
- - expo-dev-menu
- - expo-dev-menu-interface
- - ExpoModulesCore
- - EXUpdatesInterface
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTAppDelegate
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-launcher/Unsafe (5.0.35):
- - DoubleConversion
- - EXManifests
- - expo-dev-menu
- - expo-dev-menu-interface
- - ExpoModulesCore
- - EXUpdatesInterface
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTAppDelegate
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-menu (6.0.25):
- - DoubleConversion
- - expo-dev-menu/Main (= 6.0.25)
- - expo-dev-menu/ReactNativeCompatibles (= 6.0.25)
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-menu-interface (1.9.3)
- - expo-dev-menu/Main (6.0.25):
- - DoubleConversion
- - EXManifests
- - expo-dev-menu-interface
- - expo-dev-menu/Vendored
- - ExpoModulesCore
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-menu/ReactNativeCompatibles (6.0.25):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-menu/SafeAreaView (6.0.25):
- - DoubleConversion
- - ExpoModulesCore
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - expo-dev-menu/Vendored (6.0.25):
- - DoubleConversion
- - expo-dev-menu/SafeAreaView
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - ExpoAsset (11.0.5):
- - ExpoModulesCore
- - ExpoBlur (14.0.3):
- - ExpoModulesCore
- - ExpoFileSystem (18.0.12):
- - ExpoModulesCore
- - ExpoFont (13.0.4):
- - ExpoModulesCore
- - ExpoHaptics (14.0.1):
- - ExpoModulesCore
- - ExpoHead (4.0.21):
- - ExpoModulesCore
- - ExpoKeepAwake (14.0.3):
- - ExpoModulesCore
- - ExpoLinearGradient (14.0.2):
- - ExpoModulesCore
- - ExpoLinking (7.0.5):
- - ExpoModulesCore
- - ExpoLocalization (16.0.1):
- - ExpoModulesCore
- - ExpoModulesCore (2.2.3):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTAppDelegate
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - ExpoNetwork (7.0.5):
- - ExpoModulesCore
- - ExpoSecureStore (14.2.3):
- - ExpoModulesCore
- - ExpoSplashScreen (0.29.24):
- - ExpoModulesCore
- - ExpoSymbols (0.2.2):
- - ExpoModulesCore
- - ExpoSystemUI (4.0.9):
- - ExpoModulesCore
- - ExpoWebBrowser (14.0.2):
- - ExpoModulesCore
- - EXUpdatesInterface (1.0.0):
- - ExpoModulesCore
- - fast_float (6.1.4)
- - FBLazyVector (0.76.9)
- - fmt (11.0.2)
- - glog (0.3.5)
- - hermes-engine (0.76.9):
- - hermes-engine/Pre-built (= 0.76.9)
- - hermes-engine/Pre-built (0.76.9)
- - RCT-Folly (2024.10.14.00):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - RCT-Folly/Default (= 2024.10.14.00)
- - RCT-Folly/Default (2024.10.14.00):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - RCT-Folly/Fabric (2024.10.14.00):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - RCTDeprecation (0.76.9)
- - RCTRequired (0.76.9)
- - RCTTypeSafety (0.76.9):
- - FBLazyVector (= 0.76.9)
- - RCTRequired (= 0.76.9)
- - React-Core (= 0.76.9)
- - React (0.76.9):
- - React-Core (= 0.76.9)
- - React-Core/DevSupport (= 0.76.9)
- - React-Core/RCTWebSocket (= 0.76.9)
- - React-RCTActionSheet (= 0.76.9)
- - React-RCTAnimation (= 0.76.9)
- - React-RCTBlob (= 0.76.9)
- - React-RCTImage (= 0.76.9)
- - React-RCTLinking (= 0.76.9)
- - React-RCTNetwork (= 0.76.9)
- - React-RCTSettings (= 0.76.9)
- - React-RCTText (= 0.76.9)
- - React-RCTVibration (= 0.76.9)
- - React-callinvoker (0.76.9)
- - React-Core (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default (= 0.76.9)
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/CoreModulesHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/Default (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/DevSupport (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default (= 0.76.9)
- - React-Core/RCTWebSocket (= 0.76.9)
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTActionSheetHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTAnimationHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTBlobHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTImageHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTLinkingHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTNetworkHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTSettingsHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTTextHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTVibrationHeaders (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-Core/RCTWebSocket (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTDeprecation
- - React-Core/Default (= 0.76.9)
- - React-cxxreact
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimescheduler
- - React-utils
- - SocketRocket (= 0.7.1)
- - Yoga
- - React-CoreModules (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - RCT-Folly
- - RCTTypeSafety
- - React-Core/CoreModulesHeaders
- - React-jsi
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTBlob
- - React-RCTImage
- - ReactCodegen
- - ReactCommon
- - SocketRocket
- - React-cxxreact (0.76.9):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-callinvoker
- - React-debug
- - React-jsi
- - React-jsinspector
- - React-logger
- - React-perflogger
- - React-runtimeexecutor
- - React-timing
- - React-debug (0.76.9)
- - React-defaultsnativemodule (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-domnativemodule
- - React-Fabric
- - React-featureflags
- - React-featureflagsnativemodule
- - React-graphics
- - React-idlecallbacksnativemodule
- - React-ImageManager
- - React-microtasksnativemodule
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - React-domnativemodule (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-FabricComponents
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - React-Fabric (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric/animations (= 0.76.9)
- - React-Fabric/attributedstring (= 0.76.9)
- - React-Fabric/componentregistry (= 0.76.9)
- - React-Fabric/componentregistrynative (= 0.76.9)
- - React-Fabric/components (= 0.76.9)
- - React-Fabric/core (= 0.76.9)
- - React-Fabric/dom (= 0.76.9)
- - React-Fabric/imagemanager (= 0.76.9)
- - React-Fabric/leakchecker (= 0.76.9)
- - React-Fabric/mounting (= 0.76.9)
- - React-Fabric/observers (= 0.76.9)
- - React-Fabric/scheduler (= 0.76.9)
- - React-Fabric/telemetry (= 0.76.9)
- - React-Fabric/templateprocessor (= 0.76.9)
- - React-Fabric/uimanager (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/animations (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/attributedstring (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/componentregistry (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/componentregistrynative (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/components (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9)
- - React-Fabric/components/root (= 0.76.9)
- - React-Fabric/components/view (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/components/legacyviewmanagerinterop (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/components/root (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/components/view (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - Yoga
- - React-Fabric/core (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/dom (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/imagemanager (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/leakchecker (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/mounting (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/observers (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric/observers/events (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/observers/events (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/scheduler (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric/observers/events
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-performancetimeline
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/telemetry (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/templateprocessor (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/uimanager (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric/uimanager/consistency (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererconsistency
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-Fabric/uimanager/consistency (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererconsistency
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCommon/turbomodule/core
- - React-FabricComponents (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-FabricComponents/components (= 0.76.9)
- - React-FabricComponents/textlayoutmanager (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-FabricComponents/components/inputaccessory (= 0.76.9)
- - React-FabricComponents/components/iostextinput (= 0.76.9)
- - React-FabricComponents/components/modal (= 0.76.9)
- - React-FabricComponents/components/rncore (= 0.76.9)
- - React-FabricComponents/components/safeareaview (= 0.76.9)
- - React-FabricComponents/components/scrollview (= 0.76.9)
- - React-FabricComponents/components/text (= 0.76.9)
- - React-FabricComponents/components/textinput (= 0.76.9)
- - React-FabricComponents/components/unimplementedview (= 0.76.9)
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/inputaccessory (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/iostextinput (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/modal (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/rncore (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/safeareaview (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/scrollview (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/text (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/textinput (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/components/unimplementedview (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricComponents/textlayoutmanager (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-cxxreact
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - Yoga
- - React-FabricImage (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly/Fabric
- - RCTRequired
- - RCTTypeSafety
- - React-Fabric
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-jsiexecutor
- - React-logger
- - React-rendererdebug
- - React-utils
- - ReactCommon
- - Yoga
- - React-featureflags (0.76.9)
- - React-featureflagsnativemodule (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - React-graphics (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - RCT-Folly/Fabric
- - React-jsi
- - React-jsiexecutor
- - React-utils
- - React-hermes (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-cxxreact
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-perflogger
- - React-runtimeexecutor
- - React-idlecallbacksnativemodule (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - React-ImageManager (0.76.9):
- - glog
- - RCT-Folly/Fabric
- - React-Core/Default
- - React-debug
- - React-Fabric
- - React-graphics
- - React-rendererdebug
- - React-utils
- - React-jserrorhandler (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - React-cxxreact
- - React-debug
- - React-jsi
- - React-jsi (0.76.9):
- - boost
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-jsiexecutor (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-cxxreact
- - React-jsi
- - React-jsinspector
- - React-perflogger
- - React-jsinspector (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly
- - React-featureflags
- - React-jsi
- - React-perflogger
- - React-runtimeexecutor
- - React-jsitracing (0.76.9):
- - React-jsi
- - React-logger (0.76.9):
- - glog
- - React-Mapbuffer (0.76.9):
- - glog
- - React-debug
- - React-microtasksnativemodule (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - react-native-safe-area-context (5.4.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - react-native-safe-area-context/common (= 5.4.0)
- - react-native-safe-area-context/fabric (= 5.4.0)
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - react-native-safe-area-context/common (5.4.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - react-native-safe-area-context/fabric (5.4.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - react-native-safe-area-context/common
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - react-native-webview (13.12.5):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - React-nativeconfig (0.76.9)
- - React-NativeModulesApple (0.76.9):
- - glog
- - hermes-engine
- - React-callinvoker
- - React-Core
- - React-cxxreact
- - React-jsi
- - React-jsinspector
- - React-runtimeexecutor
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - React-perflogger (0.76.9):
- - DoubleConversion
- - RCT-Folly (= 2024.10.14.00)
- - React-performancetimeline (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - React-cxxreact
- - React-timing
- - React-RCTActionSheet (0.76.9):
- - React-Core/RCTActionSheetHeaders (= 0.76.9)
- - React-RCTAnimation (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - RCTTypeSafety
- - React-Core/RCTAnimationHeaders
- - React-jsi
- - React-NativeModulesApple
- - ReactCodegen
- - ReactCommon
- - React-RCTAppDelegate (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-CoreModules
- - React-debug
- - React-defaultsnativemodule
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-hermes
- - React-nativeconfig
- - React-NativeModulesApple
- - React-RCTFabric
- - React-RCTImage
- - React-RCTNetwork
- - React-rendererdebug
- - React-RuntimeApple
- - React-RuntimeCore
- - React-RuntimeHermes
- - React-runtimescheduler
- - React-utils
- - ReactCodegen
- - ReactCommon
- - React-RCTBlob (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - React-Core/RCTBlobHeaders
- - React-Core/RCTWebSocket
- - React-jsi
- - React-jsinspector
- - React-NativeModulesApple
- - React-RCTNetwork
- - ReactCodegen
- - ReactCommon
- - React-RCTFabric (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - React-Core
- - React-debug
- - React-Fabric
- - React-FabricComponents
- - React-FabricImage
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-jsinspector
- - React-nativeconfig
- - React-performancetimeline
- - React-RCTImage
- - React-RCTText
- - React-rendererconsistency
- - React-rendererdebug
- - React-runtimescheduler
- - React-utils
- - Yoga
- - React-RCTImage (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - RCTTypeSafety
- - React-Core/RCTImageHeaders
- - React-jsi
- - React-NativeModulesApple
- - React-RCTNetwork
- - ReactCodegen
- - ReactCommon
- - React-RCTLinking (0.76.9):
- - React-Core/RCTLinkingHeaders (= 0.76.9)
- - React-jsi (= 0.76.9)
- - React-NativeModulesApple
- - ReactCodegen
- - ReactCommon
- - ReactCommon/turbomodule/core (= 0.76.9)
- - React-RCTNetwork (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - RCTTypeSafety
- - React-Core/RCTNetworkHeaders
- - React-jsi
- - React-NativeModulesApple
- - ReactCodegen
- - ReactCommon
- - React-RCTSettings (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - RCTTypeSafety
- - React-Core/RCTSettingsHeaders
- - React-jsi
- - React-NativeModulesApple
- - ReactCodegen
- - ReactCommon
- - React-RCTText (0.76.9):
- - React-Core/RCTTextHeaders (= 0.76.9)
- - Yoga
- - React-RCTVibration (0.76.9):
- - RCT-Folly (= 2024.10.14.00)
- - React-Core/RCTVibrationHeaders
- - React-jsi
- - React-NativeModulesApple
- - ReactCodegen
- - ReactCommon
- - React-rendererconsistency (0.76.9)
- - React-rendererdebug (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - RCT-Folly
- - React-debug
- - React-rncore (0.76.9)
- - React-RuntimeApple (0.76.9):
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - React-callinvoker
- - React-Core/Default
- - React-CoreModules
- - React-cxxreact
- - React-jserrorhandler
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-Mapbuffer
- - React-NativeModulesApple
- - React-RCTFabric
- - React-RuntimeCore
- - React-runtimeexecutor
- - React-RuntimeHermes
- - React-runtimescheduler
- - React-utils
- - React-RuntimeCore (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - React-cxxreact
- - React-featureflags
- - React-jserrorhandler
- - React-jsi
- - React-jsiexecutor
- - React-jsinspector
- - React-performancetimeline
- - React-runtimeexecutor
- - React-runtimescheduler
- - React-utils
- - React-runtimeexecutor (0.76.9):
- - React-jsi (= 0.76.9)
- - React-RuntimeHermes (0.76.9):
- - hermes-engine
- - RCT-Folly/Fabric (= 2024.10.14.00)
- - React-featureflags
- - React-hermes
- - React-jsi
- - React-jsinspector
- - React-jsitracing
- - React-nativeconfig
- - React-RuntimeCore
- - React-utils
- - React-runtimescheduler (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - React-callinvoker
- - React-cxxreact
- - React-debug
- - React-featureflags
- - React-jsi
- - React-performancetimeline
- - React-rendererconsistency
- - React-rendererdebug
- - React-runtimeexecutor
- - React-timing
- - React-utils
- - React-timing (0.76.9)
- - React-utils (0.76.9):
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - React-debug
- - React-jsi (= 0.76.9)
- - ReactCodegen (0.76.9):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-FabricImage
- - React-featureflags
- - React-graphics
- - React-jsi
- - React-jsiexecutor
- - React-NativeModulesApple
- - React-rendererdebug
- - React-utils
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - ReactCommon (0.76.9):
- - ReactCommon/turbomodule (= 0.76.9)
- - ReactCommon/turbomodule (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-callinvoker
- - React-cxxreact
- - React-jsi
- - React-logger
- - React-perflogger
- - ReactCommon/turbomodule/bridging (= 0.76.9)
- - ReactCommon/turbomodule/core (= 0.76.9)
- - ReactCommon/turbomodule/bridging (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-callinvoker
- - React-cxxreact
- - React-jsi (= 0.76.9)
- - React-logger
- - React-perflogger
- - ReactCommon/turbomodule/core (0.76.9):
- - DoubleConversion
- - fast_float
- - fmt
- - glog
- - hermes-engine
- - RCT-Folly
- - React-callinvoker
- - React-cxxreact
- - React-debug (= 0.76.9)
- - React-featureflags (= 0.76.9)
- - React-jsi
- - React-logger
- - React-perflogger
- - React-utils (= 0.76.9)
- - RNFlashList (1.7.3):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - RNGestureHandler (2.20.2):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - RNReanimated (3.16.7):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - RNReanimated/reanimated (= 3.16.7)
- - RNReanimated/worklets (= 3.16.7)
- - Yoga
- - RNReanimated/reanimated (3.16.7):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - RNReanimated/reanimated/apple (= 3.16.7)
- - Yoga
- - RNReanimated/reanimated/apple (3.16.7):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - RNReanimated/worklets (3.16.7):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - RNScreens (4.4.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-RCTImage
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - RNScreens/common (= 4.4.0)
- - Yoga
- - RNScreens/common (4.4.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-RCTImage
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - RNSentry (6.15.1):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-hermes
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Sentry/HybridSDK (= 8.52.1)
- - Yoga
- - RNSVG (15.12.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - RNSVG/common (= 15.12.0)
- - Yoga
- - RNSVG/common (15.12.0):
- - DoubleConversion
- - glog
- - hermes-engine
- - RCT-Folly (= 2024.10.14.00)
- - RCTRequired
- - RCTTypeSafety
- - React-Core
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-NativeModulesApple
- - React-RCTFabric
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/bridging
- - ReactCommon/turbomodule/core
- - Yoga
- - Sentry/HybridSDK (8.52.1)
- - SocketRocket (0.7.1)
- - Yoga (0.0.0)
-
-DEPENDENCIES:
- - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
- - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- - EXConstants (from `../node_modules/expo-constants/ios`)
- - EXJSONUtils (from `../node_modules/expo-json-utils/ios`)
- - EXManifests (from `../node_modules/expo-manifests/ios`)
- - Expo (from `../node_modules/expo`)
- - expo-dev-client (from `../node_modules/expo-dev-client/ios`)
- - expo-dev-launcher (from `../node_modules/expo-dev-launcher`)
- - expo-dev-menu (from `../node_modules/expo-dev-menu`)
- - expo-dev-menu-interface (from `../node_modules/expo-dev-menu-interface/ios`)
- - ExpoAsset (from `../node_modules/expo-asset/ios`)
- - ExpoBlur (from `../node_modules/expo-blur/ios`)
- - ExpoFileSystem (from `../node_modules/expo-file-system/ios`)
- - ExpoFont (from `../node_modules/expo-font/ios`)
- - ExpoHaptics (from `../node_modules/expo-haptics/ios`)
- - ExpoHead (from `../node_modules/expo-router/ios`)
- - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- - ExpoLinearGradient (from `../node_modules/expo-linear-gradient/ios`)
- - ExpoLinking (from `../node_modules/expo-linking/ios`)
- - ExpoLocalization (from `../node_modules/expo-localization/ios`)
- - ExpoModulesCore (from `../node_modules/expo-modules-core`)
- - ExpoNetwork (from `../node_modules/expo-network/ios`)
- - ExpoSecureStore (from `../node_modules/expo-secure-store/ios`)
- - ExpoSplashScreen (from `../node_modules/expo-splash-screen/ios`)
- - ExpoSymbols (from `../node_modules/expo-symbols/ios`)
- - ExpoSystemUI (from `../node_modules/expo-system-ui/ios`)
- - ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
- - EXUpdatesInterface (from `../node_modules/expo-updates-interface/ios`)
- - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`)
- - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
- - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
- - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
- - 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`)
- - React (from `../node_modules/react-native/`)
- - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- - React-Core (from `../node_modules/react-native/`)
- - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
- - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
- - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
- - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
- - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`)
- - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`)
- - React-Fabric (from `../node_modules/react-native/ReactCommon`)
- - React-FabricComponents (from `../node_modules/react-native/ReactCommon`)
- - React-FabricImage (from `../node_modules/react-native/ReactCommon`)
- - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`)
- - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`)
- - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`)
- - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
- - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`)
- - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`)
- - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`)
- - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`)
- - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`)
- - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
- - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`)
- - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- - react-native-webview (from `../node_modules/react-native-webview`)
- - React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
- - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`)
- - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
- - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
- - React-RCTFabric (from `../node_modules/react-native/React`)
- - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
- - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
- - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
- - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`)
- - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`)
- - React-rncore (from `../node_modules/react-native/ReactCommon`)
- - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`)
- - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`)
- - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
- - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`)
- - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
- - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`)
- - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
- - ReactCodegen (from `build/generated/ios`)
- - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- - "RNFlashList (from `../node_modules/@shopify/flash-list`)"
- - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
- - RNReanimated (from `../node_modules/react-native-reanimated`)
- - RNScreens (from `../node_modules/react-native-screens`)
- - "RNSentry (from `../node_modules/@sentry/react-native`)"
- - RNSVG (from `../node_modules/react-native-svg`)
- - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
-
-SPEC REPOS:
- trunk:
- - Sentry
- - SocketRocket
-
-EXTERNAL SOURCES:
- boost:
- :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
- DoubleConversion:
- :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
- EXConstants:
- :path: "../node_modules/expo-constants/ios"
- EXJSONUtils:
- :path: "../node_modules/expo-json-utils/ios"
- EXManifests:
- :path: "../node_modules/expo-manifests/ios"
- Expo:
- :path: "../node_modules/expo"
- expo-dev-client:
- :path: "../node_modules/expo-dev-client/ios"
- expo-dev-launcher:
- :path: "../node_modules/expo-dev-launcher"
- expo-dev-menu:
- :path: "../node_modules/expo-dev-menu"
- expo-dev-menu-interface:
- :path: "../node_modules/expo-dev-menu-interface/ios"
- ExpoAsset:
- :path: "../node_modules/expo-asset/ios"
- ExpoBlur:
- :path: "../node_modules/expo-blur/ios"
- ExpoFileSystem:
- :path: "../node_modules/expo-file-system/ios"
- ExpoFont:
- :path: "../node_modules/expo-font/ios"
- ExpoHaptics:
- :path: "../node_modules/expo-haptics/ios"
- ExpoHead:
- :path: "../node_modules/expo-router/ios"
- ExpoKeepAwake:
- :path: "../node_modules/expo-keep-awake/ios"
- ExpoLinearGradient:
- :path: "../node_modules/expo-linear-gradient/ios"
- ExpoLinking:
- :path: "../node_modules/expo-linking/ios"
- ExpoLocalization:
- :path: "../node_modules/expo-localization/ios"
- ExpoModulesCore:
- :path: "../node_modules/expo-modules-core"
- ExpoNetwork:
- :path: "../node_modules/expo-network/ios"
- ExpoSecureStore:
- :path: "../node_modules/expo-secure-store/ios"
- ExpoSplashScreen:
- :path: "../node_modules/expo-splash-screen/ios"
- ExpoSymbols:
- :path: "../node_modules/expo-symbols/ios"
- ExpoSystemUI:
- :path: "../node_modules/expo-system-ui/ios"
- ExpoWebBrowser:
- :path: "../node_modules/expo-web-browser/ios"
- EXUpdatesInterface:
- :path: "../node_modules/expo-updates-interface/ios"
- fast_float:
- :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec"
- FBLazyVector:
- :path: "../node_modules/react-native/Libraries/FBLazyVector"
- fmt:
- :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec"
- glog:
- :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
- hermes-engine:
- :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
- :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64
- RCT-Folly:
- :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
- RCTDeprecation:
- :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation"
- RCTRequired:
- :path: "../node_modules/react-native/Libraries/Required"
- RCTTypeSafety:
- :path: "../node_modules/react-native/Libraries/TypeSafety"
- React:
- :path: "../node_modules/react-native/"
- React-callinvoker:
- :path: "../node_modules/react-native/ReactCommon/callinvoker"
- React-Core:
- :path: "../node_modules/react-native/"
- React-CoreModules:
- :path: "../node_modules/react-native/React/CoreModules"
- React-cxxreact:
- :path: "../node_modules/react-native/ReactCommon/cxxreact"
- React-debug:
- :path: "../node_modules/react-native/ReactCommon/react/debug"
- React-defaultsnativemodule:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults"
- React-domnativemodule:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom"
- React-Fabric:
- :path: "../node_modules/react-native/ReactCommon"
- React-FabricComponents:
- :path: "../node_modules/react-native/ReactCommon"
- React-FabricImage:
- :path: "../node_modules/react-native/ReactCommon"
- React-featureflags:
- :path: "../node_modules/react-native/ReactCommon/react/featureflags"
- React-featureflagsnativemodule:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags"
- React-graphics:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics"
- React-hermes:
- :path: "../node_modules/react-native/ReactCommon/hermes"
- React-idlecallbacksnativemodule:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks"
- React-ImageManager:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios"
- React-jserrorhandler:
- :path: "../node_modules/react-native/ReactCommon/jserrorhandler"
- React-jsi:
- :path: "../node_modules/react-native/ReactCommon/jsi"
- React-jsiexecutor:
- :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
- React-jsinspector:
- :path: "../node_modules/react-native/ReactCommon/jsinspector-modern"
- React-jsitracing:
- :path: "../node_modules/react-native/ReactCommon/hermes/executor/"
- React-logger:
- :path: "../node_modules/react-native/ReactCommon/logger"
- React-Mapbuffer:
- :path: "../node_modules/react-native/ReactCommon"
- React-microtasksnativemodule:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks"
- react-native-safe-area-context:
- :path: "../node_modules/react-native-safe-area-context"
- react-native-webview:
- :path: "../node_modules/react-native-webview"
- React-nativeconfig:
- :path: "../node_modules/react-native/ReactCommon"
- React-NativeModulesApple:
- :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
- React-perflogger:
- :path: "../node_modules/react-native/ReactCommon/reactperflogger"
- React-performancetimeline:
- :path: "../node_modules/react-native/ReactCommon/react/performance/timeline"
- React-RCTActionSheet:
- :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
- React-RCTAnimation:
- :path: "../node_modules/react-native/Libraries/NativeAnimation"
- React-RCTAppDelegate:
- :path: "../node_modules/react-native/Libraries/AppDelegate"
- React-RCTBlob:
- :path: "../node_modules/react-native/Libraries/Blob"
- React-RCTFabric:
- :path: "../node_modules/react-native/React"
- React-RCTImage:
- :path: "../node_modules/react-native/Libraries/Image"
- React-RCTLinking:
- :path: "../node_modules/react-native/Libraries/LinkingIOS"
- React-RCTNetwork:
- :path: "../node_modules/react-native/Libraries/Network"
- React-RCTSettings:
- :path: "../node_modules/react-native/Libraries/Settings"
- React-RCTText:
- :path: "../node_modules/react-native/Libraries/Text"
- React-RCTVibration:
- :path: "../node_modules/react-native/Libraries/Vibration"
- React-rendererconsistency:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency"
- React-rendererdebug:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/debug"
- React-rncore:
- :path: "../node_modules/react-native/ReactCommon"
- React-RuntimeApple:
- :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios"
- React-RuntimeCore:
- :path: "../node_modules/react-native/ReactCommon/react/runtime"
- React-runtimeexecutor:
- :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
- React-RuntimeHermes:
- :path: "../node_modules/react-native/ReactCommon/react/runtime"
- React-runtimescheduler:
- :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
- React-timing:
- :path: "../node_modules/react-native/ReactCommon/react/timing"
- React-utils:
- :path: "../node_modules/react-native/ReactCommon/react/utils"
- ReactCodegen:
- :path: build/generated/ios
- ReactCommon:
- :path: "../node_modules/react-native/ReactCommon"
- RNFlashList:
- :path: "../node_modules/@shopify/flash-list"
- RNGestureHandler:
- :path: "../node_modules/react-native-gesture-handler"
- RNReanimated:
- :path: "../node_modules/react-native-reanimated"
- RNScreens:
- :path: "../node_modules/react-native-screens"
- RNSentry:
- :path: "../node_modules/@sentry/react-native"
- RNSVG:
- :path: "../node_modules/react-native-svg"
- Yoga:
- :path: "../node_modules/react-native/ReactCommon/yoga"
-
-SPEC CHECKSUMS:
- boost: 1dca942403ed9342f98334bf4c3621f011aa7946
- DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
- EXConstants: fcfc75800824ac2d5c592b5bc74130bad17b146b
- EXJSONUtils: 01fc7492b66c234e395dcffdd5f53439c5c29c93
- EXManifests: a19d50504b8826546a4782770317bc83fffec87d
- Expo: a6ff273c618506b12129a0d06f2a08201bfbcf43
- expo-dev-client: db44302cdbe0ec55b0ef1849c9a23a76dec6dbac
- expo-dev-launcher: 792cd1c83fbec4a1a66fe91a0c283368dbad851c
- expo-dev-menu: dd3197d2b0107ee036ffd85f95e75a950ab52ada
- expo-dev-menu-interface: 00dc42302a72722fdecec3fa048de84a9133bcc4
- ExpoAsset: 48386d40d53a8c1738929b3ed509bcad595b5516
- ExpoBlur: 392c1207f71d0ecf22371621c1fbd44ba84d9742
- ExpoFileSystem: 42d363d3b96f9afab980dcef60d5657a4443c655
- ExpoFont: f354e926f8feae5e831ec8087f36652b44a0b188
- ExpoHaptics: 8d199b2f33245ea85289ff6c954c7ee7c00a5b5d
- ExpoHead: df924203fbf8e0913fc38b0f6aec71f9a9115482
- ExpoKeepAwake: b0171a73665bfcefcfcc311742a72a956e6aa680
- ExpoLinearGradient: 35ebd83b16f80b3add053a2fd68cc328ed927f60
- ExpoLinking: 8d12bee174ba0cdf31239706578e29e74a417402
- ExpoLocalization: 7776ea3bdb112125390745bbaf919b734b2ad1c7
- ExpoModulesCore: c25d77625038b1968ea1afefc719862c0d8dd993
- ExpoNetwork: 16083eb5ed34ce1c8e916fb6292fdb6e9daac0ca
- ExpoSecureStore: b367d9f62c9102d808afbeb1561636d4276e439d
- ExpoSplashScreen: 8261985ce9778f904abc7e31bed3538dce67ed4d
- ExpoSymbols: f3002db15156cd4e505c77b6ea1df5c984db9965
- ExpoSystemUI: b82a45cf0f6a4fa18d07c46deba8725dd27688b4
- ExpoWebBrowser: a212e6b480d8857d3e441fba51e0c968333803b3
- EXUpdatesInterface: 7c977640bdd8b85833c19e3959ba46145c5719db
- fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
- FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45
- fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6
- glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
- hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11
- RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17
- RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83
- RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716
- RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f
- React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d
- React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea
- React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245
- React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c
- React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab
- React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964
- React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e
- React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f
- React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b
- React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520
- React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576
- React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c
- React-featureflagsnativemodule: 742a8325b3c821d2a1ca13a6d2a0fc72d04555e0
- React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121
- React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf
- React-idlecallbacksnativemodule: d61d9c9816131bf70d3d80cd04889fc625ee523f
- React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020
- React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6
- React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d
- React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893
- React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086
- React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f
- React-logger: c4052eb941cca9a097ef01b59543a656dc088559
- React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de
- React-microtasksnativemodule: d80ff86c8902872d397d9622f1a97aadcc12cead
- react-native-safe-area-context: c68127652d8b9a26a28ac9597167a3ad90bcd713
- react-native-webview: 6b9fc65c1951203a3e958ff3cc0a858d4b6be901
- React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678
- React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e
- React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358
- React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc
- React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342
- React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585
- React-RCTAppDelegate: 345a6f1b82abc578437df0ce7e9c48740eca827c
- React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6
- React-RCTFabric: 007b1a98201cc49b5bc6e1417d7fe3f6fc6e2b78
- React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8
- React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa
- React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7
- React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223
- React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf
- React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78
- React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6
- React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec
- React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74
- React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd
- React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb
- React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899
- React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385
- React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d
- React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9
- React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f
- ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b
- ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9
- RNFlashList: 648e2273693600985aaa72a2ef4700e815500901
- RNGestureHandler: fffddeb8af59709c6d8de11b6461a6af63cad532
- RNReanimated: 2e5069649cbab2c946652d3b97589b2ae0526220
- RNScreens: 362f4c861dd155f898908d5035d97b07a3f1a9d1
- RNSentry: ac378c5d235ecca7b574e09d9b293bb54217702d
- RNSVG: 43aff28bae846abe9c45625fe8b4816b7ac73ffd
- Sentry: 2cbbe3592f30050c60e916c63c7f5a2fa584005e
- SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
- Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a
-
-PODFILE CHECKSUM: 7a7ccff6bc339e796d8f4af447bc877134e30656
-
-COCOAPODS: 1.16.2
diff --git a/apps/mobile-legacy/ios/Podfile.properties.json b/apps/mobile-legacy/ios/Podfile.properties.json
deleted file mode 100644
index 4f49b45..0000000
--- a/apps/mobile-legacy/ios/Podfile.properties.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "apple.ccacheEnabled": "false",
- "apple.extraPods": "[]",
- "apple.privacyManifestAggregationEnabled": "true",
- "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true",
- "expo.jsEngine": "hermes",
- "newArchEnabled": "true"
-}
diff --git a/apps/mobile-legacy/ios/basango.xcodeproj/project.pbxproj b/apps/mobile-legacy/ios/basango.xcodeproj/project.pbxproj
deleted file mode 100644
index 03f3d68..0000000
--- a/apps/mobile-legacy/ios/basango.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,565 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- 0D69ABF8EEB29427A043785F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9DE5E024F189A356EEB9F5D1 /* PrivacyInfo.xcprivacy */; };
- 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
- 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
- 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
- 96905EF65AED1B983A6B3ABC /* libPods-basango.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-basango.a */; };
- B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
- BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
- D6C1E8B6278B4781963A5DB0 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C4814CA95824883B35DE226 /* noop-file.swift */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
- 13B07F961A680F5B00A75B9A /* basango.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = basango.app; sourceTree = BUILT_PRODUCTS_DIR; };
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = basango/AppDelegate.h; sourceTree = ""; };
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = basango/AppDelegate.mm; sourceTree = ""; };
- 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = basango/Images.xcassets; sourceTree = ""; };
- 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = basango/Info.plist; sourceTree = ""; };
- 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = basango/main.m; sourceTree = ""; };
- 2264613BCB764C70A47FCD56 /* basango-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "basango-Bridging-Header.h"; path = "basango/basango-Bridging-Header.h"; sourceTree = ""; };
- 4C4814CA95824883B35DE226 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "basango/noop-file.swift"; sourceTree = ""; };
- 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-basango.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-basango.a"; sourceTree = BUILT_PRODUCTS_DIR; };
- 6C2E3173556A471DD304B334 /* Pods-basango.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-basango.debug.xcconfig"; path = "Target Support Files/Pods-basango/Pods-basango.debug.xcconfig"; sourceTree = ""; };
- 7A4D352CD337FB3A3BF06240 /* Pods-basango.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-basango.release.xcconfig"; path = "Target Support Files/Pods-basango/Pods-basango.release.xcconfig"; sourceTree = ""; };
- 9DE5E024F189A356EEB9F5D1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = basango/PrivacyInfo.xcprivacy; sourceTree = ""; };
- AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = basango/SplashScreen.storyboard; sourceTree = ""; };
- BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; };
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
- FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-basango/ExpoModulesProvider.swift"; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 96905EF65AED1B983A6B3ABC /* libPods-basango.a in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 13B07FAE1A68108700A75B9A /* basango */ = {
- isa = PBXGroup;
- children = (
- BB2F792B24A3F905000567C9 /* Supporting */,
- 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
- 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
- 13B07FB51A68108700A75B9A /* Images.xcassets */,
- 13B07FB61A68108700A75B9A /* Info.plist */,
- 13B07FB71A68108700A75B9A /* main.m */,
- AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
- 4C4814CA95824883B35DE226 /* noop-file.swift */,
- 2264613BCB764C70A47FCD56 /* basango-Bridging-Header.h */,
- 9DE5E024F189A356EEB9F5D1 /* PrivacyInfo.xcprivacy */,
- );
- name = basango;
- sourceTree = "";
- };
- 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
- 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-basango.a */,
- );
- name = Frameworks;
- sourceTree = "";
- };
- 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
- isa = PBXGroup;
- children = (
- );
- name = Libraries;
- sourceTree = "";
- };
- 83CBB9F61A601CBA00E9B192 = {
- isa = PBXGroup;
- children = (
- 13B07FAE1A68108700A75B9A /* basango */,
- 832341AE1AAA6A7D00B99B32 /* Libraries */,
- 83CBBA001A601CBA00E9B192 /* Products */,
- 2D16E6871FA4F8E400B85C8A /* Frameworks */,
- D65327D7A22EEC0BE12398D9 /* Pods */,
- D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */,
- );
- indentWidth = 2;
- sourceTree = "";
- tabWidth = 2;
- usesTabs = 0;
- };
- 83CBBA001A601CBA00E9B192 /* Products */ = {
- isa = PBXGroup;
- children = (
- 13B07F961A680F5B00A75B9A /* basango.app */,
- );
- name = Products;
- sourceTree = "";
- };
- 92DBD88DE9BF7D494EA9DA96 /* basango */ = {
- isa = PBXGroup;
- children = (
- FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
- );
- name = basango;
- sourceTree = "";
- };
- BB2F792B24A3F905000567C9 /* Supporting */ = {
- isa = PBXGroup;
- children = (
- BB2F792C24A3F905000567C9 /* Expo.plist */,
- );
- name = Supporting;
- path = basango/Supporting;
- sourceTree = "";
- };
- D65327D7A22EEC0BE12398D9 /* Pods */ = {
- isa = PBXGroup;
- children = (
- 6C2E3173556A471DD304B334 /* Pods-basango.debug.xcconfig */,
- 7A4D352CD337FB3A3BF06240 /* Pods-basango.release.xcconfig */,
- );
- path = Pods;
- sourceTree = "";
- };
- D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
- isa = PBXGroup;
- children = (
- 92DBD88DE9BF7D494EA9DA96 /* basango */,
- );
- name = ExpoModulesProviders;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- 13B07F861A680F5B00A75B9A /* basango */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "basango" */;
- buildPhases = (
- 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
- 0A61F537D76D10E28EF7006E /* [Expo] Configure project */,
- 13B07F871A680F5B00A75B9A /* Sources */,
- 13B07F8C1A680F5B00A75B9A /* Frameworks */,
- 13B07F8E1A680F5B00A75B9A /* Resources */,
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
- 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
- DE3CCC0BC1F2407AA25D401D /* Upload Debug Symbols to Sentry */,
- D5E940B01E8D732996FFACA7 /* [CP] Embed Pods Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = basango;
- productName = basango;
- productReference = 13B07F961A680F5B00A75B9A /* basango.app */;
- productType = "com.apple.product-type.application";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 83CBB9F71A601CBA00E9B192 /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 1130;
- TargetAttributes = {
- 13B07F861A680F5B00A75B9A = {
- LastSwiftMigration = 1250;
- };
- };
- };
- buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "basango" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = en;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = 83CBB9F61A601CBA00E9B192;
- productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 13B07F861A680F5B00A75B9A /* basango */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- 13B07F8E1A680F5B00A75B9A /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
- 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
- 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
- 0D69ABF8EEB29427A043785F /* PrivacyInfo.xcprivacy in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXShellScriptBuildPhase section */
- 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Bundle React Native code and images";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n/bin/sh `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode.sh'\"` `\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
- };
- 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-basango-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
- showEnvVarsInLog = 0;
- };
- 0A61F537D76D10E28EF7006E /* [Expo] Configure project */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- );
- name = "[Expo] Configure project";
- outputFileListPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-basango/expo-configure-project.sh\"\n";
- };
- 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-basango/Pods-basango-resources.sh",
- "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/ExpoLocalization/ExpoLocalization_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/ExpoSystemUI/ExpoSystemUI_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/Sentry/Sentry.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-launcher/EXDevLauncher.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/expo-dev-menu/EXDevMenu.bundle",
- "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle",
- );
- name = "[CP] Copy Pods Resources";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoLocalization_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoSystemUI_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Sentry.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevLauncher.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXDevMenu.bundle",
- "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-basango/Pods-basango-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- D5E940B01E8D732996FFACA7 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-basango/Pods-basango-frameworks.sh",
- "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-basango/Pods-basango-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
- DE3CCC0BC1F2407AA25D401D /* Upload Debug Symbols to Sentry */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Upload Debug Symbols to Sentry";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "/bin/sh `${NODE_BINARY:-node} --print \"require('path').dirname(require.resolve('@sentry/react-native/package.json')) + '/scripts/sentry-xcode-debug-files.sh'\"`";
- };
-/* End PBXShellScriptBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- 13B07F871A680F5B00A75B9A /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
- 13B07FC11A68108700A75B9A /* main.m in Sources */,
- B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */,
- D6C1E8B6278B4781963A5DB0 /* noop-file.swift in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
- 13B07F941A680F5B00A75B9A /* Debug */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-basango.debug.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = basango/basango.entitlements;
- CURRENT_PROJECT_VERSION = 1;
- ENABLE_BITCODE = NO;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "$(inherited)",
- "FB_SONARKIT_ENABLED=1",
- );
- INFOPLIST_FILE = basango/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 15.1;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
- PRODUCT_BUNDLE_IDENTIFIER = dev.ngandu.basango;
- PRODUCT_NAME = basango;
- SWIFT_OBJC_BRIDGING_HEADER = "basango/basango-Bridging-Header.h";
- SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Debug;
- };
- 13B07F951A680F5B00A75B9A /* Release */ = {
- isa = XCBuildConfiguration;
- baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-basango.release.xcconfig */;
- buildSettings = {
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_ENTITLEMENTS = basango/basango.entitlements;
- CURRENT_PROJECT_VERSION = 1;
- INFOPLIST_FILE = basango/Info.plist;
- IPHONEOS_DEPLOYMENT_TARGET = 15.1;
- LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 1.0;
- OTHER_LDFLAGS = (
- "$(inherited)",
- "-ObjC",
- "-lc++",
- );
- OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
- PRODUCT_BUNDLE_IDENTIFIER = dev.ngandu.basango;
- PRODUCT_NAME = basango;
- SWIFT_OBJC_BRIDGING_HEADER = "basango/basango-Bridging-Header.h";
- SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2";
- VERSIONING_SYSTEM = "apple-generic";
- };
- name = Release;
- };
- 83CBBA201A601CBA00E9B192 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++20";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- ENABLE_TESTABILITY = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 15.1;
- LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
- LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
- MTL_ENABLE_DEBUG_INFO = YES;
- ONLY_ACTIVE_ARCH = YES;
- OTHER_LDFLAGS = (
- "$(inherited)",
- " ",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
- USE_HERMES = true;
- };
- name = Debug;
- };
- 83CBBA211A601CBA00E9B192 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
- CLANG_CXX_LANGUAGE_STANDARD = "c++20";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_COMMA = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INFINITE_RECURSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
- CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
- CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
- CLANG_WARN_STRICT_PROTOTYPES = YES;
- CLANG_WARN_SUSPICIOUS_MOVE = YES;
- CLANG_WARN_UNREACHABLE_CODE = YES;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- ENABLE_STRICT_OBJC_MSGSEND = YES;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_NO_COMMON_BLOCKS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 15.1;
- LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
- LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
- MTL_ENABLE_DEBUG_INFO = NO;
- OTHER_LDFLAGS = (
- "$(inherited)",
- " ",
- );
- REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
- SDKROOT = iphoneos;
- USE_HERMES = true;
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "basango" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 13B07F941A680F5B00A75B9A /* Debug */,
- 13B07F951A680F5B00A75B9A /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "basango" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 83CBBA201A601CBA00E9B192 /* Debug */,
- 83CBBA211A601CBA00E9B192 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
-}
diff --git a/apps/mobile-legacy/ios/basango.xcodeproj/xcshareddata/xcschemes/basango.xcscheme b/apps/mobile-legacy/ios/basango.xcodeproj/xcshareddata/xcschemes/basango.xcscheme
deleted file mode 100644
index 5bc0c43..0000000
--- a/apps/mobile-legacy/ios/basango.xcodeproj/xcshareddata/xcschemes/basango.xcscheme
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/mobile-legacy/ios/basango.xcworkspace/contents.xcworkspacedata b/apps/mobile-legacy/ios/basango.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 47b0cbf..0000000
--- a/apps/mobile-legacy/ios/basango.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
diff --git a/apps/mobile-legacy/ios/basango/AppDelegate.h b/apps/mobile-legacy/ios/basango/AppDelegate.h
deleted file mode 100644
index 1658a43..0000000
--- a/apps/mobile-legacy/ios/basango/AppDelegate.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#import
-#import
-#import
-
-@interface AppDelegate : EXAppDelegateWrapper
-
-@end
diff --git a/apps/mobile-legacy/ios/basango/AppDelegate.mm b/apps/mobile-legacy/ios/basango/AppDelegate.mm
deleted file mode 100644
index b27f832..0000000
--- a/apps/mobile-legacy/ios/basango/AppDelegate.mm
+++ /dev/null
@@ -1,62 +0,0 @@
-#import "AppDelegate.h"
-
-#import
-#import
-
-@implementation AppDelegate
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
-{
- self.moduleName = @"main";
-
- // You can add your custom initial props in the dictionary below.
- // They will be passed down to the ViewController used by React Native.
- self.initialProps = @{};
-
- return [super application:application didFinishLaunchingWithOptions:launchOptions];
-}
-
-- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
-{
- return [self bundleURL];
-}
-
-- (NSURL *)bundleURL
-{
-#if DEBUG
- return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
-#else
- return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
-#endif
-}
-
-// Linking API
-- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
- return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
-}
-
-// Universal Links
-- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler {
- BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
- return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
-{
- return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
-{
- return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
-}
-
-// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
-- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
-{
- return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
-}
-
-@end
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png
deleted file mode 100644
index 6bbd117..0000000
Binary files a/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png and /dev/null differ
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 4da364a..0000000
--- a/apps/mobile-legacy/ios/basango/Images.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "images": [
- {
- "filename": "App-Icon-1024x1024@1x.png",
- "idiom": "universal",
- "platform": "ios",
- "size": "1024x1024"
- }
- ],
- "info": {
- "author": "expo",
- "version": 1
- }
-}
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/Contents.json b/apps/mobile-legacy/ios/basango/Images.xcassets/Contents.json
deleted file mode 100644
index 0b946fb..0000000
--- a/apps/mobile-legacy/ios/basango/Images.xcassets/Contents.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "info": {
- "author": "expo",
- "version": 1
- }
-}
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenBackground.colorset/Contents.json
deleted file mode 100644
index c640711..0000000
--- a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenBackground.colorset/Contents.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "colors": [
- {
- "color": {
- "color-space": "srgb",
- "components": {
- "alpha": "1.000",
- "blue": "1.00000000000000",
- "green": "1.00000000000000",
- "red": "1.00000000000000"
- }
- },
- "idiom": "universal"
- }
- ],
- "info": {
- "author": "expo",
- "version": 1
- }
-}
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/Contents.json
deleted file mode 100644
index f5ad720..0000000
--- a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "images": [
- {
- "filename": "image.png",
- "idiom": "universal",
- "scale": "1x"
- },
- {
- "filename": "image@2x.png",
- "idiom": "universal",
- "scale": "2x"
- },
- {
- "filename": "image@3x.png",
- "idiom": "universal",
- "scale": "3x"
- }
- ],
- "info": {
- "author": "expo",
- "version": 1
- }
-}
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image.png b/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image.png
deleted file mode 100644
index f65f73d..0000000
Binary files a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image.png and /dev/null differ
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@2x.png
deleted file mode 100644
index 5bf009f..0000000
Binary files a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@2x.png and /dev/null differ
diff --git a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@3x.png
deleted file mode 100644
index 470ce64..0000000
Binary files a/apps/mobile-legacy/ios/basango/Images.xcassets/SplashScreenLogo.imageset/image@3x.png and /dev/null differ
diff --git a/apps/mobile-legacy/ios/basango/Info.plist b/apps/mobile-legacy/ios/basango/Info.plist
deleted file mode 100644
index 91247bd..0000000
--- a/apps/mobile-legacy/ios/basango/Info.plist
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
- CADisableMinimumFrameDurationOnPhone
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- basango
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.0.0
- CFBundleSignature
- ????
- CFBundleURLTypes
-
-
- CFBundleURLSchemes
-
- basango
- dev.ngandu.basango
-
-
-
- CFBundleURLSchemes
-
- exp+basango
-
-
-
- CFBundleVersion
- 1
- LSMinimumSystemVersion
- 12.0
- LSRequiresIPhoneOS
-
- NSAppTransportSecurity
-
- NSAllowsArbitraryLoads
-
- NSAllowsLocalNetworking
-
-
- NSUserActivityTypes
-
- $(PRODUCT_BUNDLE_IDENTIFIER).expo.index_route
-
- UILaunchStoryboardName
- SplashScreen
- UIRequiredDeviceCapabilities
-
- arm64
-
- UIRequiresFullScreen
-
- UIStatusBarStyle
- UIStatusBarStyleDefault
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIUserInterfaceStyle
- Automatic
- UIViewControllerBasedStatusBarAppearance
-
-
-
\ No newline at end of file
diff --git a/apps/mobile-legacy/ios/basango/PrivacyInfo.xcprivacy b/apps/mobile-legacy/ios/basango/PrivacyInfo.xcprivacy
deleted file mode 100644
index 5bb83c5..0000000
--- a/apps/mobile-legacy/ios/basango/PrivacyInfo.xcprivacy
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
- NSPrivacyAccessedAPITypes
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryUserDefaults
- NSPrivacyAccessedAPITypeReasons
-
- CA92.1
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryFileTimestamp
- NSPrivacyAccessedAPITypeReasons
-
- 0A2A.1
- 3B52.1
- C617.1
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryDiskSpace
- NSPrivacyAccessedAPITypeReasons
-
- E174.1
- 85F4.1
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategorySystemBootTime
- NSPrivacyAccessedAPITypeReasons
-
- 35F9.1
-
-
-
- NSPrivacyCollectedDataTypes
-
- NSPrivacyTracking
-
-
-
diff --git a/apps/mobile-legacy/ios/basango/SplashScreen.storyboard b/apps/mobile-legacy/ios/basango/SplashScreen.storyboard
deleted file mode 100644
index 158767f..0000000
--- a/apps/mobile-legacy/ios/basango/SplashScreen.storyboard
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apps/mobile-legacy/ios/basango/Supporting/Expo.plist b/apps/mobile-legacy/ios/basango/Supporting/Expo.plist
deleted file mode 100644
index 750be02..0000000
--- a/apps/mobile-legacy/ios/basango/Supporting/Expo.plist
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- EXUpdatesCheckOnLaunch
- ALWAYS
- EXUpdatesEnabled
-
- EXUpdatesLaunchWaitMs
- 0
-
-
\ No newline at end of file
diff --git a/apps/mobile-legacy/ios/basango/basango-Bridging-Header.h b/apps/mobile-legacy/ios/basango/basango-Bridging-Header.h
deleted file mode 100644
index e11d920..0000000
--- a/apps/mobile-legacy/ios/basango/basango-Bridging-Header.h
+++ /dev/null
@@ -1,3 +0,0 @@
-//
-// Use this file to import your target's public headers that you would like to expose to Swift.
-//
diff --git a/apps/mobile-legacy/ios/basango/basango.entitlements b/apps/mobile-legacy/ios/basango/basango.entitlements
deleted file mode 100644
index f683276..0000000
--- a/apps/mobile-legacy/ios/basango/basango.entitlements
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/apps/mobile-legacy/ios/basango/main.m b/apps/mobile-legacy/ios/basango/main.m
deleted file mode 100644
index 25181b6..0000000
--- a/apps/mobile-legacy/ios/basango/main.m
+++ /dev/null
@@ -1,10 +0,0 @@
-#import
-
-#import "AppDelegate.h"
-
-int main(int argc, char * argv[]) {
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
-
diff --git a/apps/mobile-legacy/ios/basango/noop-file.swift b/apps/mobile-legacy/ios/basango/noop-file.swift
deleted file mode 100644
index b2ffafb..0000000
--- a/apps/mobile-legacy/ios/basango/noop-file.swift
+++ /dev/null
@@ -1,4 +0,0 @@
-//
-// @generated
-// A blank Swift file must be created for native modules with Swift files to work correctly.
-//
diff --git a/apps/mobile-legacy/ios/sentry.properties b/apps/mobile-legacy/ios/sentry.properties
deleted file mode 100644
index de32d60..0000000
--- a/apps/mobile-legacy/ios/sentry.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-defaults.url=https://glitchtip.devscast.tech/
-defaults.org=devscast-software
-defaults.project=basango
-# Using SENTRY_AUTH_TOKEN environment variable
\ No newline at end of file
diff --git a/apps/mobile-legacy/metro.config.js b/apps/mobile-legacy/metro.config.js
deleted file mode 100644
index 15d922a..0000000
--- a/apps/mobile-legacy/metro.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-const { getSentryExpoConfig } = require("@sentry/react-native/metro");
-
-/** @type {import('expo/metro-config').MetroConfig} */
-const config = getSentryExpoConfig(__dirname);
-
-module.exports = config;
diff --git a/apps/mobile-legacy/src/api/client.ts b/apps/mobile-legacy/src/api/client.ts
deleted file mode 100644
index 508173d..0000000
--- a/apps/mobile-legacy/src/api/client.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-import axios, { AxiosInstance } from "axios";
-
-import { RefreshTokenPayload, RefreshTokenResponse } from "@/api/schema/identity-and-access/login";
-import { clearTokens, getAccessToken, getRefreshToken, setTokens } from "@/store/auth";
-
-const endpoint = process.env.EXPO_PUBLIC_API_URL!;
-const client: AxiosInstance = axios.create({
- baseURL: endpoint,
- headers: {
- Accept: "application/json",
- "Content-Type": "application/json",
- },
-});
-
-let isAuthTokenRefreshing = false;
-let failedRequestsQueue: ((token: string) => void)[] = [];
-
-const processFailedRequestsQueue = (token: string) => {
- failedRequestsQueue.forEach((callback) => callback(token));
- failedRequestsQueue = [];
-};
-
-// Wait for 120 seconds before timing out
-axios.interceptors.request.use((config) => {
- config.timeout = 120_000;
- return config;
-});
-
-// Add the Authorization header to all requests
-client.interceptors.request.use(async (config) => {
- const token = await getAccessToken();
- if (token) {
- config.headers.Authorization = `Bearer ${token}`;
- }
-
- return config;
-});
-
-// Handle 401 errors and refresh the token
-client.interceptors.response.use(
- (response) => response,
- async (error) => {
- const originalRequest = error.config;
- const status = error.response?.status;
-
- if (status === 401 && !originalRequest._retry) {
- originalRequest._retry = true;
-
- if (isAuthTokenRefreshing) {
- return new Promise((resolve) => {
- failedRequestsQueue.push((token: string) => {
- originalRequest.headers.Authorization = `Bearer ${token}`;
- resolve(client(originalRequest));
- });
- });
- }
-
- isAuthTokenRefreshing = true;
-
- try {
- const refreshToken = await getRefreshToken();
- if (!refreshToken) {
- await clearTokens();
- return Promise.reject(error);
- }
-
- const response = await axios.post(`${endpoint}/token/refresh`, {
- refresh_token: refreshToken,
- } as RefreshTokenPayload);
-
- const updatedToken = response.data.token;
- await setTokens(updatedToken, refreshToken);
- processFailedRequestsQueue(updatedToken);
-
- originalRequest.headers.Authorization = `Bearer ${updatedToken}`;
- return client(originalRequest);
- } catch (error) {
- await clearTokens();
- return Promise.reject(error);
- } finally {
- isAuthTokenRefreshing = false;
- }
- }
-
- return Promise.reject(error);
- },
-);
-
-if (__DEV__) {
- // Log HTTP requests and responses
- client.interceptors.request.use(
- async (config) => {
- console.log("HTTP REQUEST", {
- baseURL: config.baseURL,
- data: config.data,
- url: config.url,
- });
-
- return config;
- },
- (error) => console.log(JSON.stringify(error)),
- );
-
- client.interceptors.response.use(
- (response) => {
- console.log("HTTP RESPONSE", {
- data: response.data,
- stats: response.status,
- });
-
- return response;
- },
- (error) => console.log(JSON.stringify(error)),
- );
-}
-
-export default client;
diff --git a/apps/mobile-legacy/src/api/endpoint.ts b/apps/mobile-legacy/src/api/endpoint.ts
deleted file mode 100644
index b467d09..0000000
--- a/apps/mobile-legacy/src/api/endpoint.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-export const endpoint = {
- feedManagement: {
- addArticleToBookmark: (bookmarkId: string, articleId: string) =>
- `feed/bookmarks/${bookmarkId}/articles/${articleId}`,
- addCommentToArticle: (articleId: string) => `/feed/articles/${articleId}/comments`,
- createBookmark: `/feed/bookmarks`,
- deleteBookmark: (bookmarkId: string) => `/feed/bookmarks/${bookmarkId}`,
- followSource: (sourceId: string) => `/feed/sources/${sourceId}/follow`,
- getArticleCommentList: (articleId: string) => `/feed/articles/${articleId}/comments`,
- getArticleDetails: (articleId: string) => `/feed/articles/${articleId}`,
- getArticleOverviewList: `/feed/articles`,
- getBookmarkedArticlesList: (bookmarkId: string) => `/feed/bookmarks/${bookmarkId}/articles`,
- getBookmarkList: `/feed/bookmarks`,
- getSourceArticleOverviewList: (sourceId: string) => `/feed/sources/${sourceId}/articles`,
- getSourceDetails: (sourceId: string) => `/feed/sources/${sourceId}`,
- getSourceOverviewList: `/feed/sources`,
- removeArticleFromBookmark: (bookmarkId: string, articleId: string) =>
- `/feed/bookmarks/${bookmarkId}/articles/${articleId}`,
- unfollowSource: (sourceId: string) => `/feed/sources/${sourceId}/unfollow`,
- updateBookmark: (bookmarkId: string) => `/feed/bookmarks/${bookmarkId}`,
- },
- identityAndAccess: {
- confirmAccount: (token: string) => `/account/confirm/${token}`,
- getUserProfile: "/me",
- login: "/login_check",
- logout: "/token/invalidate",
- register: "/register",
- requestPassword: "/password/request",
- resetPassword: (token: string) => `/password/reset/${token}`,
- unlockAccount: (token: string) => `/account/unlock/${token}`,
- updatePassword: "/password/update",
- },
-};
diff --git a/apps/mobile-legacy/src/api/request/feed-management/article.ts b/apps/mobile-legacy/src/api/request/feed-management/article.ts
deleted file mode 100644
index 5b2c545..0000000
--- a/apps/mobile-legacy/src/api/request/feed-management/article.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import { Article, ArticleOverview, TrendingArticle } from "@/api/schema/feed-management/article";
-import {
- ArticleFilters,
- useGetQuery,
- usePaginatedInfiniteQuery,
- usePaginatedQuery,
-} from "@/api/shared";
-
-export const useArticleTrendingList = (filters: ArticleFilters = {}) => {
- return usePaginatedQuery("/feed/trending", filters);
-};
-
-export const useArticleDetails = (articleId: string) => {
- return useGetQuery(endpoint.feedManagement.getArticleDetails(articleId));
-};
-
-export const useArticleOverviewList = (filters: ArticleFilters = {}) => {
- return usePaginatedQuery(
- endpoint.feedManagement.getArticleOverviewList,
- filters,
- );
-};
-
-export const useInfiniteArticleOverviewList = (filters: ArticleFilters = {}) => {
- return usePaginatedInfiniteQuery(
- endpoint.feedManagement.getArticleOverviewList,
- filters,
- );
-};
diff --git a/apps/mobile-legacy/src/api/request/feed-management/bookmark.ts b/apps/mobile-legacy/src/api/request/feed-management/bookmark.ts
deleted file mode 100644
index 168d3da..0000000
--- a/apps/mobile-legacy/src/api/request/feed-management/bookmark.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import {
- Bookmark,
- BookmarkPayload,
- BookmarkedArticle,
-} from "@/api/schema/feed-management/bookmark";
-import {
- ArticleFilters,
- useDeleteQuery,
- usePaginatedInfiniteQuery,
- usePostQuery,
- usePutQuery,
-} from "@/api/shared";
-
-export const useCreateBookmark = () => {
- return usePostQuery(endpoint.feedManagement.createBookmark);
-};
-
-export const useUpdateBookmark = (bookmarkId: string) => {
- return usePutQuery(endpoint.feedManagement.updateBookmark(bookmarkId));
-};
-
-export const useDeleteBookmark = (bookmarkId: string) => {
- return useDeleteQuery(endpoint.feedManagement.deleteBookmark(bookmarkId));
-};
-
-export const useAddArticleToBookmark = (bookmarkId: string, articleId: string) => {
- return usePostQuery(endpoint.feedManagement.addArticleToBookmark(bookmarkId, articleId));
-};
-
-export const useRemoveArticleFromBookmark = (bookmarkId: string, articleId: string) => {
- return useDeleteQuery(endpoint.feedManagement.removeArticleFromBookmark(bookmarkId, articleId));
-};
-
-export const useBookmarkList = (filters: ArticleFilters = {}) => {
- return usePaginatedInfiniteQuery(endpoint.feedManagement.getBookmarkList, filters);
-};
-
-export const useBookmarkedArticlesList = (bookmarkId: string, filters: ArticleFilters = {}) => {
- return usePaginatedInfiniteQuery(
- endpoint.feedManagement.getBookmarkedArticlesList(bookmarkId),
- filters,
- );
-};
diff --git a/apps/mobile-legacy/src/api/request/feed-management/comment.ts b/apps/mobile-legacy/src/api/request/feed-management/comment.ts
deleted file mode 100644
index 724d7ff..0000000
--- a/apps/mobile-legacy/src/api/request/feed-management/comment.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import { Comment, CommentPayload } from "@/api/schema/feed-management/comment";
-import { useDeleteQuery, usePaginatedInfiniteQuery, usePostQuery } from "@/api/shared";
-
-export const useArticleCommentList = (articleId: string) => {
- return usePaginatedInfiniteQuery(
- endpoint.feedManagement.getArticleCommentList(articleId),
- );
-};
-
-export const useAddCommentToArticle = (articleId: string) => {
- return usePostQuery(endpoint.feedManagement.addCommentToArticle(articleId));
-};
-
-export const useRemoveCommentFromArticle = (articleId: string, commentId: string) => {
- return useDeleteQuery(endpoint.feedManagement.removeArticleFromBookmark(articleId, commentId));
-};
diff --git a/apps/mobile-legacy/src/api/request/feed-management/source.ts b/apps/mobile-legacy/src/api/request/feed-management/source.ts
deleted file mode 100644
index 2fa8af7..0000000
--- a/apps/mobile-legacy/src/api/request/feed-management/source.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { SourceDetails, SourceOverview } from "@/api/schema/feed-management/source";
-import {
- ArticleFilters,
- useDeleteQuery,
- useGetQuery,
- usePaginatedInfiniteQuery,
- usePostQuery,
-} from "@/api/shared";
-
-export const useSourceDetails = (sourceId: string) => {
- return useGetQuery(endpoint.feedManagement.getSourceDetails(sourceId));
-};
-
-export const useSourceOverviewList = (filters: ArticleFilters = {}) => {
- return usePaginatedInfiniteQuery(
- endpoint.feedManagement.getSourceOverviewList,
- filters,
- );
-};
-
-export const useSourceArticleOverviewList = (sourceId: string, filters: ArticleFilters = {}) => {
- return usePaginatedInfiniteQuery(
- endpoint.feedManagement.getSourceArticleOverviewList(sourceId),
- filters,
- );
-};
-
-export const useFollowSource = (sourceId: string) => {
- return usePostQuery(endpoint.feedManagement.followSource(sourceId));
-};
-
-export const useUnfollowSource = (sourceId: string) => {
- return useDeleteQuery(endpoint.feedManagement.unfollowSource(sourceId));
-};
diff --git a/apps/mobile-legacy/src/api/request/identity-and-access/login.ts b/apps/mobile-legacy/src/api/request/identity-and-access/login.ts
deleted file mode 100644
index 802cf3f..0000000
--- a/apps/mobile-legacy/src/api/request/identity-and-access/login.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import { LoginPayload, LoginResponse } from "@/api/schema/identity-and-access/login";
-import { useGetQuery, usePostQuery } from "@/api/shared";
-
-export const useLogin = () => {
- return usePostQuery(endpoint.identityAndAccess.login);
-};
-
-export const useLogout = () => {
- return usePostQuery(endpoint.identityAndAccess.logout);
-};
-
-export const useUnlockAccount = (token: string) => {
- return useGetQuery(endpoint.identityAndAccess.unlockAccount(token));
-};
diff --git a/apps/mobile-legacy/src/api/request/identity-and-access/password.ts b/apps/mobile-legacy/src/api/request/identity-and-access/password.ts
deleted file mode 100644
index 6f33b48..0000000
--- a/apps/mobile-legacy/src/api/request/identity-and-access/password.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import {
- RequestPasswordPayload,
- ResetPasswordPayload,
- UpdatePasswordPayload,
-} from "@/api/schema/identity-and-access/password";
-import { usePostQuery, usePutQuery } from "@/api/shared";
-
-export const usePasswordForgotten = () => {
- return usePostQuery(endpoint.identityAndAccess.requestPassword);
-};
-
-export const usePasswordReset = (token: string) => {
- return usePostQuery(endpoint.identityAndAccess.resetPassword(token));
-};
-
-export const usePasswordUpdate = () => {
- return usePutQuery(endpoint.identityAndAccess.updatePassword);
-};
diff --git a/apps/mobile-legacy/src/api/request/identity-and-access/register.ts b/apps/mobile-legacy/src/api/request/identity-and-access/register.ts
deleted file mode 100644
index 528e371..0000000
--- a/apps/mobile-legacy/src/api/request/identity-and-access/register.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { endpoint } from "@/api/endpoint";
-import { RegisterPayload } from "@/api/schema/identity-and-access/register";
-import { useGetQuery, usePostQuery } from "@/api/shared";
-
-export const useRegister = () => {
- return usePostQuery(endpoint.identityAndAccess.register);
-};
-
-export const useConfirmAccount = (token: string) => {
- return useGetQuery(endpoint.identityAndAccess.confirmAccount(token));
-};
diff --git a/apps/mobile-legacy/src/api/schema/feed-management/article.ts b/apps/mobile-legacy/src/api/schema/feed-management/article.ts
deleted file mode 100644
index e890afb..0000000
--- a/apps/mobile-legacy/src/api/schema/feed-management/article.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { SourceReference } from "@/api/schema/feed-management/source";
-
-export type ArticleOverview = {
- id: string;
- title: string;
- link: string;
- categories: string[];
- excerpt: string;
- source: SourceReference;
- publishedAt: string;
- image?: string;
- readingTime: number;
- bookmarked: boolean;
-};
-
-export type Article = {
- id: string;
- title: string;
- link: string;
- categories: string[];
- body: string;
- source: SourceReference;
- hash: string;
- credibility: {
- bias: "neutral" | "slightly" | "partisan" | "extreme";
- reliability: "trusted" | "reliable" | "average" | "unreliable" | "low_trust";
- transparency: "low" | "medium" | "high";
- };
- sentiment: "negative" | "positive" | "neutral";
- metadata?: {
- title?: string;
- description?: string;
- image?: string;
- video?: string;
- audio?: string;
- locale?: string;
- };
- readingTime: number;
- publishedAt: string;
- crawledAt: string;
- updatedAt: string;
- bookmarked: boolean;
-};
-
-export type TrendingArticle = ArticleOverview;
diff --git a/apps/mobile-legacy/src/api/schema/feed-management/bookmark.ts b/apps/mobile-legacy/src/api/schema/feed-management/bookmark.ts
deleted file mode 100644
index 9689796..0000000
--- a/apps/mobile-legacy/src/api/schema/feed-management/bookmark.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import Joi from "joi";
-
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-
-export type BookmarkPayload = {
- name: string;
- description?: string;
- isPublic: boolean;
-};
-
-export type Bookmark = {
- id: string;
- name: string;
- createdAt: string;
- description?: string;
- articlesCount: number;
- isPublic: boolean;
- updatedAt?: string;
-};
-
-export type BookmarkedArticle = ArticleOverview;
-
-export const BookmarkPayloadSchema = Joi.object({
- description: Joi.string().optional(),
- isPublic: Joi.boolean().optional(),
- name: Joi.string().required().messages({
- "any.required": "Le nom est requis",
- "string.empty": "Le nom est requis",
- }),
-});
diff --git a/apps/mobile-legacy/src/api/schema/feed-management/comment.ts b/apps/mobile-legacy/src/api/schema/feed-management/comment.ts
deleted file mode 100644
index e30ee8a..0000000
--- a/apps/mobile-legacy/src/api/schema/feed-management/comment.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export type Comment = {
- id: string;
- content: string;
- user: {
- id: string;
- name: string;
- };
- sentiment: "positive" | "neutral" | "negative";
- createdAt: string;
-};
-
-export type CommentPayload = {
- content: string;
-};
diff --git a/apps/mobile-legacy/src/api/schema/feed-management/source.ts b/apps/mobile-legacy/src/api/schema/feed-management/source.ts
deleted file mode 100644
index 1c02d57..0000000
--- a/apps/mobile-legacy/src/api/schema/feed-management/source.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-export type SourceReference = {
- id: string;
- name: string;
- displayName?: string;
- image: string;
- url: string;
-};
-
-export type SourceOverview = {
- id: string;
- name: string;
- displayName?: string;
- image: string;
- url: string;
- followed: boolean;
-};
-
-export type CategoryShare = {
- name: string;
- count: number;
- percentage: number;
-};
-
-export type PublicationEntry = {
- date: string;
- count: number;
-};
-
-export type SourceDetails = {
- id: string;
- name: string;
- url: string;
- credibility: {
- bias: "neutral" | "slightly" | "partisan" | "extreme";
- reliability: "trusted" | "reliable" | "average" | "unreliable" | "low_trust";
- transparency: "low" | "medium" | "high";
- };
- publicationGraph: {
- items: PublicationEntry[];
- total: number;
- };
- categoryShares: {
- items: CategoryShare[];
- total: number;
- };
- articlesCount: number;
- crawledAt: string;
- displayName?: string;
- description?: string;
- updatedAt?: string;
- metadataAvailable: number;
- followed: boolean;
- image: string;
-};
diff --git a/apps/mobile-legacy/src/api/schema/identity-and-access/login.ts b/apps/mobile-legacy/src/api/schema/identity-and-access/login.ts
deleted file mode 100644
index 8348558..0000000
--- a/apps/mobile-legacy/src/api/schema/identity-and-access/login.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import Joi from "joi";
-
-export type LoginPayload = {
- username: string;
- password: string;
-};
-
-export type LoginResponse = {
- token: string;
- refresh_token: string;
-};
-
-export type RefreshTokenPayload = {
- refresh_token: string;
-};
-
-export type RefreshTokenResponse = {
- token: string;
-};
-
-export const LoginPayloadSchema = Joi.object({
- password: Joi.string().min(4).required().messages({
- "any.required": "Le mot de passe est requis",
- "string.empty": "Le mot de passe est requis",
- "string.min": "Le mot de passe doit comporter au moins 4 caractères",
- }),
- username: Joi.string().required().messages({
- "any.required": "L'email est requis",
- "string.empty": "L'email est requis",
- }),
-});
diff --git a/apps/mobile-legacy/src/api/schema/identity-and-access/password.ts b/apps/mobile-legacy/src/api/schema/identity-and-access/password.ts
deleted file mode 100644
index ead279e..0000000
--- a/apps/mobile-legacy/src/api/schema/identity-and-access/password.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import Joi from "joi";
-
-export type RequestPasswordPayload = {
- email: string;
-};
-
-export type ResetPasswordPayload = {
- password: string;
- confirm: string;
-};
-
-export type UpdatePasswordPayload = {
- current: string;
- password: string;
- confirm: string;
-};
-
-export const RequestPasswordPayloadSchema = Joi.object({
- email: Joi.string().required().messages({
- "any.required": "L'email est requis",
- "string.empty": "L'email est requis",
- }),
-});
-
-export const ResetPasswordPayloadSchema = Joi.object({
- confirm: Joi.string().valid(Joi.ref("password")).required().messages({
- "any.only": "Les mots de passe ne correspondent pas",
- "any.required": "La confirmation du mot de passe est requise",
- "string.empty": "La confirmation du mot de passe est requise",
- }),
- password: Joi.string().min(6).required().messages({
- "any.required": "Le mot de passe est requis",
- "string.empty": "Le mot de passe est requis",
- "string.min": "Le mot de passe doit comporter au moins 6 caractères",
- }),
-});
-
-export const UpdatePasswordPayloadSchema = Joi.object({
- confirm: Joi.string().valid(Joi.ref("password")).required().messages({
- "any.only": "Les mots de passe ne correspondent pas",
- "any.required": "La confirmation du nouveau mot de passe est requise",
- "string.empty": "La confirmation du nouveau mot de passe est requise",
- }),
- current: Joi.string().required().messages({
- "any.required": "Le mot de passe actuel est requis",
- "string.empty": "Le mot de passe actuel est requis",
- }),
- password: Joi.string().min(6).required().messages({
- "any.required": "Le nouveau mot de passe est requis",
- "string.empty": "Le nouveau mot de passe est requis",
- "string.min": "Le nouveau mot de passe doit comporter au moins 6 caractères",
- }),
-});
diff --git a/apps/mobile-legacy/src/api/schema/identity-and-access/register.ts b/apps/mobile-legacy/src/api/schema/identity-and-access/register.ts
deleted file mode 100644
index d3268cf..0000000
--- a/apps/mobile-legacy/src/api/schema/identity-and-access/register.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import Joi from "joi";
-
-export type RegisterPayload = {
- name: string;
- email: string;
- password: string;
-};
-
-export const RegisterPayloadSchema = Joi.object({
- email: Joi.string().required().messages({
- "any.required": "L'email est requis",
- "string.empty": "L'email est requis",
- }),
- name: Joi.string().required().messages({
- "any.required": "Le nom est requis",
- "string.empty": "Le nom est requis",
- }),
- password: Joi.string().min(6).required().messages({
- "any.required": "Le mot de passe est requis",
- "string.empty": "Le mot de passe est requis",
- "string.min": "Le mot de passe doit comporter au moins 4 caractères",
- }),
-});
diff --git a/apps/mobile-legacy/src/api/shared.ts b/apps/mobile-legacy/src/api/shared.ts
deleted file mode 100644
index d7cdad5..0000000
--- a/apps/mobile-legacy/src/api/shared.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import {
- skipToken,
- useInfiniteQuery,
- useMutation,
- useQuery,
- useQueryClient,
-} from "@tanstack/react-query";
-import { AxiosError } from "axios";
-import qs from "qs";
-
-import client from "@/api/client";
-
-export type PaginationFilters = {
- page?: number;
- limit?: number;
- lastId?: string;
-};
-
-export type ArticleFilters = PaginationFilters & {
- dateRange?: {
- start: number;
- end: number;
- };
- search?: string;
- sortDirection?: "asc" | "desc";
-};
-
-export type PaginationInfo = {
- current: number;
- limit: number;
- lastId?: string;
- offset: number;
-};
-
-export type ClientDetailErrorResponse = {
- type: string;
- title: string;
- detail: string;
- status: number;
-};
-
-export type ClientErrorResponse = {
- code: string;
- message: string;
-};
-
-export type ErrorResponse = AxiosError;
-
-export type PaginatedResponse = {
- items: TItem[];
- pagination: PaginationInfo;
-};
-
-export const safeMessage = (
- error: AxiosError | Error,
-): string => {
- if (error instanceof AxiosError && error.response) {
- const response = error.response.data;
-
- if ("message" in response) {
- return response.message;
- } else if ("detail" in response) {
- return response.detail;
- }
- }
-
- return "Une erreur est survenue";
-};
-
-export const usePaginatedInfiniteQuery = (
- endpoint: string,
- filters: PaginationFilters = {},
-) => {
- return useInfiniteQuery, ErrorResponse>({
- getNextPageParam: (lastPage: PaginatedResponse) => {
- const { lastId } = lastPage.pagination;
- return lastId ? lastId : null;
- },
- initialData: undefined,
- initialPageParam: null,
- queryFn: async ({ pageParam = null }) => {
- const query = qs.stringify({ ...filters, lastId: pageParam }, { skipNulls: true });
- const url = `${endpoint}?${query}`;
- const response = await client.get>(url);
- return response.data;
- },
- queryKey: [endpoint, filters],
- staleTime: 1_000 * 60 * 10,
- });
-};
-
-export const usePaginatedQuery = (endpoint: string, filters: PaginationFilters = {}) => {
- return useQuery, ErrorResponse>({
- queryFn: async (): Promise> => {
- const query = qs.stringify({ ...filters, lastId: null }, { skipNulls: true });
- const url = `${endpoint}?${query}`;
- const response = await client.get>(url);
- return response.data;
- },
- queryKey: [endpoint, filters],
- staleTime: 1_000 * 60 * 10,
- });
-};
-
-export const useGetQuery = (endpoint: string, enabled: boolean = true) => {
- return useQuery({
- queryFn: enabled
- ? async (): Promise => {
- const response = await client.get(endpoint);
- return response.data;
- }
- : skipToken,
- queryKey: [endpoint],
- staleTime: 1_000 * 60 * 10,
- });
-};
-
-export const usePostQuery = (
- endpoint: string,
- keys: string[] = [],
-) => {
- const queryClient = useQueryClient();
- return useMutation({
- mutationFn: async (data: TPayload): Promise => {
- const response = await client.post(endpoint, data);
- return response.data;
- },
- onSuccess: async () => {
- for (const key of keys) {
- await queryClient.invalidateQueries({ queryKey: [key] });
- }
- },
- });
-};
-
-export const usePutQuery = (
- endpoint: string,
- keys: string[] = [],
-) => {
- const queryClient = useQueryClient();
- return useMutation({
- mutationFn: async (data: TPayload): Promise => {
- const response = await client.put(endpoint, data);
- return response.data;
- },
- onSuccess: async () => {
- for (const key of keys) {
- await queryClient.invalidateQueries({ queryKey: [key] });
- }
- },
- });
-};
-
-export const useDeleteQuery = (endpoint: string, keys: string[] = []) => {
- const queryClient = useQueryClient();
- return useMutation({
- mutationFn: async (): Promise => {
- const response = await client.delete(endpoint);
- return response.data;
- },
- onSuccess: async () => {
- for (const key of keys) {
- await queryClient.invalidateQueries({ queryKey: [key] });
- }
- },
- });
-};
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/_layout.tsx
deleted file mode 100644
index 1878fc2..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/_layout.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import { BookMarked, Globe, Home, User } from "@tamagui/lucide-icons";
-import { Tabs } from "expo-router";
-import { useColorScheme } from "react-native";
-import { Paragraph } from "tamagui";
-
-export default function TabLayout() {
- const colorScheme = useColorScheme();
-
- return (
-
- ,
- tabBarLabel: ({ color }) => (
-
- Actualités
-
- ),
- }}
- />
- ,
- tabBarLabel: ({ color }) => (
-
- Sources
-
- ),
- }}
- />
- ,
- tabBarLabel: ({ color }) => (
-
- Signets
-
- ),
- }}
- />
- ,
- tabBarLabel: ({ color }) => (
-
- Profil
-
- ),
- }}
- />
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/account/_layout.tsx
deleted file mode 100644
index ef76f39..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/_layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Stack } from "expo-router";
-
-export default function Layout() {
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/index.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/account/index.tsx
deleted file mode 100644
index 82816fc..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/index.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { ChevronRight, Settings } from "@tamagui/lucide-icons";
-import { useRouter } from "expo-router";
-import { Label, ListItem, ScrollView, Separator, YGroup } from "tamagui";
-
-import { ScreenView } from "@/ui/components/layout";
-
-export default function Index() {
- const router = useRouter();
-
- return (
-
-
-
-
- Settings
-
-
- router.push("/account/settings")}
- title="Settings"
- />
-
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/settings/index.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/account/settings/index.tsx
deleted file mode 100644
index e96e781..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/account/settings/index.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { ActivityIndicator } from "react-native";
-import { Button, YStack } from "tamagui";
-
-import { useLogout } from "@/api/request/identity-and-access/login";
-import { useAuth } from "@/providers/auth-provider";
-import { ScreenView } from "@/ui/components/layout";
-
-export default function Index() {
- const authState = useAuth();
- const { mutate, isPending } = useLogout();
-
- const handleLogout = async () => {
- mutate(undefined, {
- onError: () => authState.logout(),
- onSuccess: () => authState.logout(),
- });
- };
-
- return (
-
-
-
-
-
- {isPending ? : "Déconnexion"}
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/[id].tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/[id].tsx
deleted file mode 100644
index 0172919..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/[id].tsx
+++ /dev/null
@@ -1,95 +0,0 @@
-import { Bookmark, MoreVertical, Share } from "@tamagui/lucide-icons";
-import { useLocalSearchParams, useRouter } from "expo-router";
-import * as WebBrowser from "expo-web-browser";
-import Toast from "react-native-toast-message";
-import { Button, H5, ScrollView, Separator, XStack, YStack } from "tamagui";
-
-import { useArticleDetails } from "@/api/request/feed-management/article";
-import { Article } from "@/api/schema/feed-management/article";
-import { safeMessage } from "@/api/shared";
-import { useRelativeTime } from "@/hooks/use-relative-time";
-import { ArticleCategoryPill, ArticleCoverImage } from "@/ui/components/content/article";
-import { SourceReferencePill } from "@/ui/components/content/source";
-import { BackButton } from "@/ui/components/controls/BackButton";
-import { IconButton } from "@/ui/components/controls/IconButton";
-import { LoadingView } from "@/ui/components/LoadingView";
-import { ScreenView } from "@/ui/components/layout";
-import { Caption, Text } from "@/ui/components/typography";
-
-export default function ArticleDetails() {
- const router = useRouter();
- const { id } = useLocalSearchParams();
- const { data, isLoading, error } = useArticleDetails(id as string);
- const article: Article | undefined = data ?? undefined;
- const relativeTime = useRelativeTime(article?.publishedAt);
-
- const handleReadIntegrality = async () => {
- await WebBrowser.openBrowserAsync(article!.link);
- };
-
- if (error) {
- Toast.show({
- text1: "Erreur",
- text2: safeMessage(error),
- type: "error",
- });
- router.replace("/(authed)/(tabs)/articles");
- }
-
- if (isLoading || article === undefined) {
- return ;
- }
-
- return (
-
- router.dismissTo("/(authed)/(tabs)/articles")} />}
- trailingActions={
- <>
- } onPress={() => {}} />
- } onPress={() => {}} />
- } onPress={() => {}} />
- >
- }
- />
-
-
- {article.metadata?.image && (
-
- )}
-
-
-
- {article.categories.map((category, index) => (
-
- ))}
-
-
- {article.title}
-
-
-
-
-
- {relativeTime}
-
- {article.readingTime} minutes de lecture
-
-
-
-
- {article.body.trim()}
-
-
-
- Consulter l'article
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/_layout.tsx
deleted file mode 100644
index ef76f39..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/_layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Stack } from "expo-router";
-
-export default function Layout() {
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/index.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/index.tsx
deleted file mode 100644
index fb5c8ff..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/index.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { ScrollView, YStack } from "tamagui";
-
-import { useArticleOverviewList } from "@/api/request/feed-management/article";
-import { useSourceOverviewList } from "@/api/request/feed-management/source";
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { SourceOverview } from "@/api/schema/feed-management/source";
-import { useFlattenedItems } from "@/hooks/use-flattened-items";
-import { ArticleList, ArticleSkeletonList } from "@/ui/components/content/article";
-import { SourceList, SourceSkeletonList } from "@/ui/components/content/source";
-import { ScreenView } from "@/ui/components/layout";
-import { Heading } from "@/ui/components/typography";
-
-export default function Index() {
- const { data: articles, isLoading: articlesLoading } = useArticleOverviewList({ limit: 10 });
- const { data: sources, isLoading: sourcesLoading } = useSourceOverviewList();
- const articleOverviews: ArticleOverview[] = useFlattenedItems(articles);
- const sourcesOverviews: SourceOverview[] = useFlattenedItems(sources);
-
- return (
-
- Actualités
-
-
-
-
-
- {articlesLoading && }
- {!articlesLoading && (
-
- )}
-
-
-
-
- {sourcesLoading && }
- {!sourcesLoading && (
-
- )}
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/trending.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/trending.tsx
deleted file mode 100644
index fd84583..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/articles/trending.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import { useRouter } from "expo-router";
-
-import { useInfiniteArticleOverviewList } from "@/api/request/feed-management/article";
-import { TrendingArticle } from "@/api/schema/feed-management/article";
-import { useFlattenedItems } from "@/hooks/use-flattened-items";
-import { ArticleList, ArticleSkeletonList } from "@/ui/components/content/article";
-import { BackButton } from "@/ui/components/controls/BackButton";
-import { ScreenView } from "@/ui/components/layout";
-
-export default function Trending() {
- const router = useRouter();
- const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, refetch } =
- useInfiniteArticleOverviewList({ limit: 20 });
- const articles: TrendingArticle[] = useFlattenedItems(data);
-
- return (
-
- router.dismissTo("/(authed)/(tabs)/articles")} />}
- title="Actualités"
- />
-
- {isLoading && }
- {!isLoading && (
-
- )}
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/[id].tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/[id].tsx
deleted file mode 100644
index 25cef7a..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/[id].tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { useLocalSearchParams } from "expo-router";
-import { Paragraph } from "tamagui";
-
-import { ScreenView } from "@/ui/components/layout";
-import { Heading } from "@/ui/components/typography";
-
-export default function Details() {
- const { id } = useLocalSearchParams();
- // const { data, isLoading } = useBookmarkedArticlesList(id as string);
- // const articles: BookmarkedArticle[] = useFlattenedItems(data);
-
- return (
-
- Bookmark Infos
- {id}
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/_layout.tsx
deleted file mode 100644
index ef76f39..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/_layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Stack } from "expo-router";
-
-export default function Layout() {
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/index.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/index.tsx
deleted file mode 100644
index 981318b..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/bookmarks/index.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Plus, Search } from "@tamagui/lucide-icons";
-import { YStack } from "tamagui";
-
-import { useBookmarkList } from "@/api/request/feed-management/bookmark";
-import { Bookmark } from "@/api/schema/feed-management/bookmark";
-import { useFlattenedItems } from "@/hooks/use-flattened-items";
-import { BookmarkList } from "@/ui/components/content/bookmark";
-import { IconButton } from "@/ui/components/controls/IconButton";
-import { LoadingView } from "@/ui/components/LoadingView";
-import { ScreenView } from "@/ui/components/layout";
-
-export default function Index() {
- const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading, refetch } =
- useBookmarkList();
- const bookmarks: Bookmark[] = useFlattenedItems(data);
-
- return (
-
- } onPress={() => {}} />}
- title="Bookmarks"
- trailingActions={ } onPress={() => {}} />}
- />
-
-
- {isLoading && }
- {!isLoading && (
-
- )}
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/[name].tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/[name].tsx
deleted file mode 100644
index da3c2d1..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/[name].tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { useLocalSearchParams } from "expo-router";
-
-import { ScreenView } from "@/ui/components/layout";
-import { Heading, Text } from "@/ui/components/typography";
-
-export default function SourceDetails() {
- const { name } = useLocalSearchParams();
-
- return (
-
- Source Details
- {name}
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/_layout.tsx
deleted file mode 100644
index ef76f39..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/_layout.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import { Stack } from "expo-router";
-
-export default function Layout() {
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/index.tsx b/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/index.tsx
deleted file mode 100644
index 1f5ebe3..0000000
--- a/apps/mobile-legacy/src/app/(authed)/(tabs)/sources/index.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { useSourceOverviewList } from "@/api/request/feed-management/source";
-import { SourceOverview } from "@/api/schema/feed-management/source";
-import { useFlattenedItems } from "@/hooks/use-flattened-items";
-import { SourceList, SourceSkeletonList } from "@/ui/components/content/source";
-import { ScreenView } from "@/ui/components/layout";
-
-export default function Sources() {
- const { data, isLoading } = useSourceOverviewList();
- const sources: SourceOverview[] = useFlattenedItems(data);
-
- return (
-
-
-
- {isLoading && }
- {!isLoading && }
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(authed)/_layout.tsx b/apps/mobile-legacy/src/app/(authed)/_layout.tsx
deleted file mode 100644
index 21df812..0000000
--- a/apps/mobile-legacy/src/app/(authed)/_layout.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Redirect, Stack } from "expo-router";
-
-import { useAuth } from "@/providers/auth-provider";
-
-export default function AuthedLayout() {
- const auth = useAuth();
-
- if (!auth.isReady) {
- return null;
- }
-
- if (!auth.isLoggedIn) {
- return ;
- }
-
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(unauthed)/_layout.tsx b/apps/mobile-legacy/src/app/(unauthed)/_layout.tsx
deleted file mode 100644
index b12aa2d..0000000
--- a/apps/mobile-legacy/src/app/(unauthed)/_layout.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Redirect, Stack } from "expo-router";
-
-import { useAuth } from "@/providers/auth-provider";
-
-export default function AuthedLayout() {
- const auth = useAuth();
-
- if (!auth.isReady) {
- return null;
- }
-
- if (auth.isLoggedIn) {
- return ;
- }
-
- return ;
-}
diff --git a/apps/mobile-legacy/src/app/(unauthed)/password-request.tsx b/apps/mobile-legacy/src/app/(unauthed)/password-request.tsx
deleted file mode 100644
index fb7cf32..0000000
--- a/apps/mobile-legacy/src/app/(unauthed)/password-request.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { joiResolver } from "@hookform/resolvers/joi";
-import { Link, useRouter } from "expo-router";
-import { useForm } from "react-hook-form";
-import Toast from "react-native-toast-message";
-import { YStack } from "tamagui";
-
-import { usePasswordForgotten } from "@/api/request/identity-and-access/password";
-import {
- RequestPasswordPayload,
- RequestPasswordPayloadSchema,
-} from "@/api/schema/identity-and-access/password";
-import { ErrorResponse, safeMessage } from "@/api/shared";
-import { FormEmailInput } from "@/ui/components/controls/forms";
-import { SubmitButton } from "@/ui/components/controls/SubmitButton";
-import { ScreenView } from "@/ui/components/layout";
-import { Heading, Text } from "@/ui/components/typography";
-
-export default function PasswordRequest() {
- const { mutate, isPending } = usePasswordForgotten();
- const router = useRouter();
-
- const { control, handleSubmit, formState } = useForm({
- resolver: joiResolver(RequestPasswordPayloadSchema),
- });
-
- const onSubmit = (data: RequestPasswordPayload) => {
- mutate(data, {
- onError: (error: ErrorResponse) => {
- Toast.show({
- text1: "Erreur de connexion",
- text2: safeMessage(error),
- type: "error",
- });
- },
- onSuccess: () => {
- Toast.show({
- text1: "Succès",
- text2: "Un mail avec les instructions vous a été envoyé",
- type: "success",
- });
- router.push("/(unauthed)/signin");
- },
- });
- };
-
- return (
-
-
-
- Mot de passe oublié ?
-
- Veuillez entrer votre adresse e-mail pour recevoir un lien de réinitialisation de mot de
- passe.
-
-
-
-
-
-
- Vous avez pas de compte ? Se connecter
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(unauthed)/signin.tsx b/apps/mobile-legacy/src/app/(unauthed)/signin.tsx
deleted file mode 100644
index a137a74..0000000
--- a/apps/mobile-legacy/src/app/(unauthed)/signin.tsx
+++ /dev/null
@@ -1,83 +0,0 @@
-import { joiResolver } from "@hookform/resolvers/joi";
-import { Link, useRouter } from "expo-router";
-import { useForm } from "react-hook-form";
-import Toast from "react-native-toast-message";
-import { YStack } from "tamagui";
-
-import { useLogin } from "@/api/request/identity-and-access/login";
-import {
- LoginPayload,
- LoginPayloadSchema,
- LoginResponse,
-} from "@/api/schema/identity-and-access/login";
-import { ErrorResponse, safeMessage } from "@/api/shared";
-import { useAuth } from "@/providers/auth-provider";
-import { FormEmailInput, FormPasswordInput } from "@/ui/components/controls/forms";
-import { SubmitButton } from "@/ui/components/controls/SubmitButton";
-import { ScreenView } from "@/ui/components/layout";
-import { Caption, Heading, Text } from "@/ui/components/typography";
-
-export default function SignIn() {
- const { mutate, isPending } = useLogin();
- const auth = useAuth();
- const router = useRouter();
-
- if (auth.isLoggedIn) {
- router.replace("/(authed)/(tabs)/articles");
- }
-
- const { control, handleSubmit, formState } = useForm({
- resolver: joiResolver(LoginPayloadSchema),
- });
-
- const onSubmit = (data: LoginPayload) => {
- mutate(data, {
- onError: (error: ErrorResponse) => {
- Toast.show({
- text1: "Erreur de connexion",
- text2: safeMessage(error),
- type: "error",
- });
- },
- onSuccess: async (data: LoginResponse) => {
- auth.login(data.token, data.refresh_token);
- Toast.show({ text1: "Connexion réussie", type: "success" });
- },
- });
- };
-
- return (
-
-
-
- Connexion
- Bienvenue sur Basango, la plateforme d'actualités intelligente
-
-
-
-
-
-
-
- Mot de passe oublié ?
-
-
-
-
-
- En continuant, vous acceptez les conditions d'utilisation de Basango et reconnaissez
- avoir lu notre politique de confidentialité.
-
-
- Vous n'avez pas de compte ? Créer un compte
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(unauthed)/signup.tsx b/apps/mobile-legacy/src/app/(unauthed)/signup.tsx
deleted file mode 100644
index 18aeb52..0000000
--- a/apps/mobile-legacy/src/app/(unauthed)/signup.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import { joiResolver } from "@hookform/resolvers/joi";
-import { User } from "@tamagui/lucide-icons";
-import { Link, useRouter } from "expo-router";
-import { useForm } from "react-hook-form";
-import Toast from "react-native-toast-message";
-import { YStack } from "tamagui";
-
-import { useRegister } from "@/api/request/identity-and-access/register";
-import { RegisterPayload, RegisterPayloadSchema } from "@/api/schema/identity-and-access/register";
-import { ErrorResponse, safeMessage } from "@/api/shared";
-import { FormEmailInput, FormPasswordInput, FormTextInput } from "@/ui/components/controls/forms";
-import { SubmitButton } from "@/ui/components/controls/SubmitButton";
-import { ScreenView } from "@/ui/components/layout";
-import { Caption, Heading, Text } from "@/ui/components/typography";
-
-export default function SingUp() {
- const router = useRouter();
- const { mutate, isPending } = useRegister();
-
- const { control, handleSubmit, formState } = useForm({
- resolver: joiResolver(RegisterPayloadSchema),
- });
-
- const onSubmit = (data: RegisterPayload) => {
- mutate(data, {
- onError: (error: ErrorResponse) => {
- Toast.show({
- text1: "Erreur",
- text2: safeMessage(error),
- type: "error",
- });
- },
- onSuccess: () => {
- Toast.show({
- text1: "Félicitations !",
- text2: "les détails de votre compte vous ont été envoyés par e-mail.",
- type: "success",
- });
- router.replace("/(unauthed)/signin");
- },
- });
- };
-
- return (
-
-
-
- Inscription
- Rejoignez la communauté Basango et restez informé des dernières actualités
-
-
-
-
-
-
-
-
- En continuant, vous acceptez les conditions d'utilisation de Basango et reconnaissez
- avoir lu notre politique de confidentialité.
-
-
- Vous avez un compte ? Connectez-vous
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/(unauthed)/welcome.tsx b/apps/mobile-legacy/src/app/(unauthed)/welcome.tsx
deleted file mode 100644
index 2b9a34e..0000000
--- a/apps/mobile-legacy/src/app/(unauthed)/welcome.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Link, useRouter } from "expo-router";
-import { Button, YStack } from "tamagui";
-
-import { AppIcon } from "@/ui/components/AppIcon";
-import { ScreenView } from "@/ui/components/layout";
-import { Caption, Display, Text } from "@/ui/components/typography";
-
-export default function Welcome() {
- const router = useRouter();
-
- return (
-
-
-
-
- Bienvenue sur Basango
-
- La première plateforme d'actualités intelligente qui vous aide à rester informé sur
- congolaise et internationale.
-
-
-
-
- router.push("/signin")} theme="accent">
- Se connecter
-
-
- Ouvrir un compte
-
-
-
-
- En continuant, vous acceptez les conditions d'utilisation de Basango et reconnaissez
- avoir lu notre politique de confidentialité.
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/+not-found.tsx b/apps/mobile-legacy/src/app/+not-found.tsx
deleted file mode 100644
index bff11e6..0000000
--- a/apps/mobile-legacy/src/app/+not-found.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Link, Stack } from "expo-router";
-import { View, YStack } from "tamagui";
-
-import { AppIcon } from "@/ui/components/AppIcon";
-import { ScreenView } from "@/ui/components/layout";
-import { Heading, Text } from "@/ui/components/typography";
-
-export default function NotFoundScreen() {
- return (
-
-
-
-
-
-
-
-
- Une erreur s'est produite
-
-
- Nous avons une difficulté à charger la page que vous recherchez.
-
-
-
-
- Recommencer
-
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/app/_layout.tsx b/apps/mobile-legacy/src/app/_layout.tsx
deleted file mode 100644
index 2dd39c3..0000000
--- a/apps/mobile-legacy/src/app/_layout.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as Sentry from "@sentry/react-native";
-import { Stack } from "expo-router";
-import React from "react";
-import { useColorScheme } from "react-native";
-import { useSafeAreaInsets } from "react-native-safe-area-context";
-import Toast from "react-native-toast-message";
-import { Theme } from "tamagui";
-
-import { RootProviders } from "@/providers/root-providers";
-
-export { ErrorBoundary } from "expo-router";
-
-Sentry.init({
- debug: __DEV__,
- dsn: process.env.EXPO_PUBLIC_SENTRY_DSN,
- sendDefaultPii: true,
- spotlight: __DEV__,
- tracePropagationTargets: [/.*?/],
- tracesSampleRate: 1.0,
-});
-
-function RootLayout() {
- const colorScheme = useColorScheme();
- const insets = useSafeAreaInsets();
-
- return (
-
-
-
-
-
-
-
-
- );
-}
-
-export default Sentry.wrap(RootLayout);
diff --git a/apps/mobile-legacy/src/app/index.tsx b/apps/mobile-legacy/src/app/index.tsx
deleted file mode 100644
index ff00fb1..0000000
--- a/apps/mobile-legacy/src/app/index.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { Redirect } from "expo-router";
-
-import { useAuth } from "@/providers/auth-provider";
-
-export default function Index() {
- const auth = useAuth();
-
- if (!auth.isReady) {
- return null;
- }
-
- return auth.isLoggedIn ? (
-
- ) : (
-
- );
-}
diff --git a/apps/mobile-legacy/src/assets/fonts/SpaceMono-Regular.ttf b/apps/mobile-legacy/src/assets/fonts/SpaceMono-Regular.ttf
deleted file mode 100644
index 28d7ff7..0000000
Binary files a/apps/mobile-legacy/src/assets/fonts/SpaceMono-Regular.ttf and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/illustrations/BookmarkIllustration.tsx b/apps/mobile-legacy/src/assets/illustrations/BookmarkIllustration.tsx
deleted file mode 100644
index 34a86ea..0000000
--- a/apps/mobile-legacy/src/assets/illustrations/BookmarkIllustration.tsx
+++ /dev/null
@@ -1,319 +0,0 @@
-import Svg, { Circle, G, Path, Rect, SvgProps } from "react-native-svg";
-
-/**
- * @see https://storyset.com/illustration/bookmarks/pana
- * @param props
- * @constructor
- */
-export default function BookmarkIllustration(props: SvgProps) {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/assets/images/adaptive-icon.png b/apps/mobile-legacy/src/assets/images/adaptive-icon.png
deleted file mode 100644
index 8e37f86..0000000
Binary files a/apps/mobile-legacy/src/assets/images/adaptive-icon.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/images/favicon.png b/apps/mobile-legacy/src/assets/images/favicon.png
deleted file mode 100644
index 8e37f86..0000000
Binary files a/apps/mobile-legacy/src/assets/images/favicon.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/images/icon.png b/apps/mobile-legacy/src/assets/images/icon.png
deleted file mode 100644
index 8e37f86..0000000
Binary files a/apps/mobile-legacy/src/assets/images/icon.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/images/logo.png b/apps/mobile-legacy/src/assets/images/logo.png
deleted file mode 100644
index d333443..0000000
Binary files a/apps/mobile-legacy/src/assets/images/logo.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/images/splash-icon.png b/apps/mobile-legacy/src/assets/images/splash-icon.png
deleted file mode 100644
index 8e37f86..0000000
Binary files a/apps/mobile-legacy/src/assets/images/splash-icon.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/screenshots/1.png b/apps/mobile-legacy/src/assets/screenshots/1.png
deleted file mode 100644
index 81deb10..0000000
Binary files a/apps/mobile-legacy/src/assets/screenshots/1.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/screenshots/2.png b/apps/mobile-legacy/src/assets/screenshots/2.png
deleted file mode 100644
index 99e89b5..0000000
Binary files a/apps/mobile-legacy/src/assets/screenshots/2.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/assets/screenshots/3.png b/apps/mobile-legacy/src/assets/screenshots/3.png
deleted file mode 100644
index af7f4c0..0000000
Binary files a/apps/mobile-legacy/src/assets/screenshots/3.png and /dev/null differ
diff --git a/apps/mobile-legacy/src/hooks/use-flattened-items.ts b/apps/mobile-legacy/src/hooks/use-flattened-items.ts
deleted file mode 100644
index 4b9e5ce..0000000
--- a/apps/mobile-legacy/src/hooks/use-flattened-items.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { useMemo } from "react";
-
-interface Page {
- items: T[];
-}
-
-interface PaginatedResult {
- pages?: Page[];
- items?: T[];
-}
-
-export const useFlattenedItems = (data: PaginatedResult | undefined | null): T[] => {
- return useMemo((): T[] => {
- if (!data) {
- return [];
- }
-
- if (data.pages && Array.isArray(data.pages) && data.pages.length > 0) {
- return data.pages.flatMap((page) => page.items || []);
- } else if (data.items && Array.isArray(data.items)) {
- return data.items;
- } else {
- return [];
- }
- }, [data]);
-};
diff --git a/apps/mobile-legacy/src/hooks/use-relative-time.ts b/apps/mobile-legacy/src/hooks/use-relative-time.ts
deleted file mode 100644
index 77700ac..0000000
--- a/apps/mobile-legacy/src/hooks/use-relative-time.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Locale, formatDistanceToNowStrict } from "date-fns";
-import { fr } from "date-fns/locale";
-import { useEffect, useState } from "react";
-
-export const useRelativeTime = (
- dateInput: string | Date | number | null | undefined,
- options?: {
- addSuffix?: boolean;
- unit?: "second" | "minute" | "hour" | "day" | "month" | "year";
- locale?: Locale;
- roundingMethod?: "floor" | "ceil" | "round";
- includeSeconds?: boolean;
- },
- updateInterval: number = 60000,
-): string => {
- const [relativeTime, setRelativeTime] = useState("");
-
- useEffect(() => {
- if (dateInput === null || dateInput === undefined) {
- setRelativeTime("");
- return;
- }
-
- const date = new Date(dateInput);
-
- // Check if the date is valid
- if (Number.isNaN(date.getTime())) {
- setRelativeTime("Invalid Date");
- return;
- }
-
- const updateTime = () => {
- // Default options if none provided, ensures suffix is added
- const effectiveOptions = {
- addSuffix: true,
- locale: fr,
- ...options,
- };
-
- try {
- const formattedTime = formatDistanceToNowStrict(date, effectiveOptions);
- setRelativeTime(formattedTime);
- } catch (error) {
- console.error("Error formatting relative time:", error);
- setRelativeTime(dateInput.toString()); // Handle potential errors during formatting
- }
- };
-
- // Initial update
- updateTime();
-
- // Set up interval for periodic updates
- const intervalId = setInterval(updateTime, updateInterval);
-
- // Clean up the interval when the component unmounts or dateInput changes
- return () => clearInterval(intervalId);
- }, [dateInput, options, updateInterval]);
-
- return relativeTime;
-};
diff --git a/apps/mobile-legacy/src/providers/auth-provider.tsx b/apps/mobile-legacy/src/providers/auth-provider.tsx
deleted file mode 100644
index 5aa7d82..0000000
--- a/apps/mobile-legacy/src/providers/auth-provider.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { SplashScreen, useRouter } from "expo-router";
-import React, { createContext, useContext, useEffect, useState } from "react";
-
-import { clearTokens, getAccessToken, getRefreshToken, setTokens } from "@/store/auth";
-
-SplashScreen.preventAutoHideAsync();
-
-type AuthState = {
- isReady: boolean;
- isLoggedIn: boolean;
- login: (accessToken: string, refreshToken: string) => void;
- logout: () => void;
- accessToken: string | null;
- refreshToken: string | null;
-};
-
-const AuthContext = createContext({
- accessToken: null,
- isLoggedIn: false,
- isReady: false,
- login: () => {},
- logout: () => {},
- refreshToken: null,
-});
-
-export function useAuth() {
- return useContext(AuthContext);
-}
-
-export function AuthProvider({ children }: React.PropsWithChildren) {
- const [isReady, setIsReady] = useState(false);
- const [accessToken, setAccessToken] = useState(null);
- const [refreshToken, setRefreshToken] = useState(null);
- const router = useRouter();
-
- const isLoggedIn = !!(accessToken && refreshToken);
-
- const login = (access: string, refresh: string) => {
- setAccessToken(access);
- setRefreshToken(refresh);
- setTokens(access, refresh);
- router.replace("/(authed)/(tabs)/articles");
- };
-
- const logout = () => {
- setAccessToken(null);
- setRefreshToken(null);
- clearTokens();
- router.replace("/signin");
- };
-
- useEffect(() => {
- const loadTokens = async () => {
- try {
- const [storedAccess, storedRefresh] = await Promise.all([
- getAccessToken(),
- getRefreshToken(),
- ]);
-
- if (storedAccess && storedRefresh) {
- setAccessToken(storedAccess);
- setRefreshToken(storedRefresh);
- }
- } catch (error) {
- console.error("Unable to retrieve auth tokens", error);
- } finally {
- setIsReady(true);
- await SplashScreen.hideAsync();
- }
- };
- loadTokens();
- }, []);
-
- return (
-
- {children}
-
- );
-}
diff --git a/apps/mobile-legacy/src/providers/fonts-loader-provider.tsx b/apps/mobile-legacy/src/providers/fonts-loader-provider.tsx
deleted file mode 100644
index 3ca164c..0000000
--- a/apps/mobile-legacy/src/providers/fonts-loader-provider.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import {
- Inter_100Thin,
- Inter_200ExtraLight,
- Inter_300Light,
- Inter_400Regular,
- Inter_500Medium,
- Inter_600SemiBold,
- Inter_700Bold,
- Inter_800ExtraBold,
- Inter_900Black,
- useFonts,
-} from "@expo-google-fonts/inter";
-import { SplashScreen } from "expo-router";
-import type React from "react";
-import { useEffect } from "react";
-
-SplashScreen.preventAutoHideAsync();
-
-export const FontsLoaderProvider = ({ children }: React.PropsWithChildren) => {
- const [fontsLoaded, fontError] = useFonts({
- Inter_100Thin,
- Inter_200ExtraLight,
- Inter_300Light,
- Inter_400Regular,
- Inter_500Medium,
- Inter_600SemiBold,
- Inter_700Bold,
- Inter_800ExtraBold,
- Inter_900Black,
- });
-
- useEffect(() => {
- if (fontsLoaded || fontError) {
- SplashScreen.hideAsync();
- }
- }, [fontsLoaded, fontError]);
-
- if (!fontsLoaded && !fontError) {
- return null;
- }
-
- return <>{children}>;
-};
diff --git a/apps/mobile-legacy/src/providers/network-provider.tsx b/apps/mobile-legacy/src/providers/network-provider.tsx
deleted file mode 100644
index cc8199a..0000000
--- a/apps/mobile-legacy/src/providers/network-provider.tsx
+++ /dev/null
@@ -1,41 +0,0 @@
-import * as Network from "expo-network";
-import { NetworkStateEvent } from "expo-network";
-import React, { createContext, useContext, useEffect, useState } from "react";
-
-type NetworkState = {
- isConnected: boolean;
-};
-
-const NetworkContext = createContext({
- isConnected: true,
-});
-
-export const useNetwork = () => useContext(NetworkContext);
-
-export const NetworkProvider = ({ children }: React.PropsWithChildren) => {
- const [isConnected, setIsConnected] = useState(true);
-
- useEffect(() => {
- let subscription: { remove: () => any };
-
- const subscribeToNetworkChanges = async () => {
- const state = await Network.getNetworkStateAsync();
- updateConnection(state);
-
- subscription = Network.addNetworkStateListener(updateConnection);
- };
-
- const updateConnection = (state: NetworkStateEvent) => {
- const connected = state.isConnected && state.isInternetReachable === true;
- setIsConnected(connected === undefined ? false : connected);
- };
-
- subscribeToNetworkChanges();
-
- return () => {
- subscription?.remove();
- };
- }, []);
-
- return {children} ;
-};
diff --git a/apps/mobile-legacy/src/providers/root-providers.tsx b/apps/mobile-legacy/src/providers/root-providers.tsx
deleted file mode 100644
index 4bb3e2e..0000000
--- a/apps/mobile-legacy/src/providers/root-providers.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import type React from "react";
-import { GestureHandlerRootView } from "react-native-gesture-handler";
-import { SafeAreaProvider } from "react-native-safe-area-context";
-
-import { AuthProvider } from "@/providers/auth-provider";
-import { FontsLoaderProvider } from "@/providers/fonts-loader-provider";
-import { NetworkProvider } from "@/providers/network-provider";
-import { TamaguiConfigProvider } from "@/providers/tamagui-config-provider";
-import { TanstackQueryProvider } from "@/providers/tanstack-query-provider";
-
-export const RootProviders = ({ children }: React.PropsWithChildren) => (
-
-
-
-
-
-
- {children}
-
-
-
-
-
-
-);
diff --git a/apps/mobile-legacy/src/providers/tamagui-config-provider.tsx b/apps/mobile-legacy/src/providers/tamagui-config-provider.tsx
deleted file mode 100644
index d90c20f..0000000
--- a/apps/mobile-legacy/src/providers/tamagui-config-provider.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import type React from "react";
-import { TamaguiProvider } from "tamagui";
-
-import { config } from "~/tamagui.config";
-
-export const TamaguiConfigProvider = ({ children }: React.PropsWithChildren) => (
- {children}
-);
diff --git a/apps/mobile-legacy/src/providers/tanstack-query-provider.tsx b/apps/mobile-legacy/src/providers/tanstack-query-provider.tsx
deleted file mode 100644
index 7a10949..0000000
--- a/apps/mobile-legacy/src/providers/tanstack-query-provider.tsx
+++ /dev/null
@@ -1,8 +0,0 @@
-import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
-import type React from "react";
-
-export const queryClient = new QueryClient();
-
-export const TanstackQueryProvider = ({ children }: React.PropsWithChildren) => (
- {children}
-);
diff --git a/apps/mobile-legacy/src/store/auth.ts b/apps/mobile-legacy/src/store/auth.ts
deleted file mode 100644
index 9febd98..0000000
--- a/apps/mobile-legacy/src/store/auth.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import * as SecureStore from "expo-secure-store";
-
-export const getAccessToken = () => SecureStore.getItemAsync("user_access_token");
-export const getRefreshToken = () => SecureStore.getItemAsync("user_refresh_token");
-
-export const setTokens = async (access: string, refresh: string) => {
- try {
- await Promise.all([
- SecureStore.setItemAsync("user_access_token", access),
- SecureStore.setItemAsync("user_refresh_token", refresh),
- ]);
- } catch (error) {
- console.log(access, refresh);
- console.error("Unable to save auth tokens", error);
- }
-};
-
-export const clearTokens = async () => {
- try {
- await Promise.all([
- SecureStore.deleteItemAsync("user_access_token"),
- SecureStore.deleteItemAsync("user_refresh_token"),
- ]);
- } catch (error) {
- console.error("Unable to clear auth tokens", error);
- }
-};
diff --git a/apps/mobile-legacy/src/ui/components/AppIcon.tsx b/apps/mobile-legacy/src/ui/components/AppIcon.tsx
deleted file mode 100644
index 9326652..0000000
--- a/apps/mobile-legacy/src/ui/components/AppIcon.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Image } from "tamagui";
-
-type AppLogoProps = {
- width?: number;
- height?: number;
-};
-
-export const AppIcon = (props: AppLogoProps) => {
- const { width = 80, height = 80 } = props;
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/LoadingView.tsx b/apps/mobile-legacy/src/ui/components/LoadingView.tsx
deleted file mode 100644
index 7bfb953..0000000
--- a/apps/mobile-legacy/src/ui/components/LoadingView.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import { ActivityIndicator } from "react-native";
-import { View } from "tamagui";
-
-import { Caption } from "@/ui/components/typography";
-
-export const LoadingView = () => (
-
-
- Chargement...
-
-);
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleCategoryPill.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleCategoryPill.tsx
deleted file mode 100644
index f00f648..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleCategoryPill.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Caption } from "@/ui/components/typography";
-
-type ArticleCategoryPillProps = {
- category: string;
-};
-
-export const ArticleCategoryPill = (props: ArticleCategoryPillProps) => {
- const { category } = props;
-
- return {category} ;
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleCoverImage.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleCoverImage.tsx
deleted file mode 100644
index ce38a0d..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleCoverImage.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import { GetProps, Image, styled } from "tamagui";
-
-const StyledImage = styled(Image, {
- backgroundColor: "$gray3",
- borderRadius: "$4",
- objectFit: "cover",
-});
-
-type ArticleCoverImageProps = GetProps & {
- uri: string;
- width: string | number;
- height: number;
-};
-
-export const ArticleCoverImage = (props: ArticleCoverImageProps) => {
- const { width, height, uri, ...rest } = props;
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleList.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleList.tsx
deleted file mode 100644
index 2030516..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleList.tsx
+++ /dev/null
@@ -1,114 +0,0 @@
-import React, { useCallback } from "react";
-import { ActivityIndicator, Dimensions, FlatList, FlatListProps } from "react-native";
-import { View, XStack, YStack } from "tamagui";
-
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { ArticleMagazineCard } from "@/ui/components/content/article/ArticleMagazineCard";
-import { ArticleOverviewCard } from "@/ui/components/content/article/ArticleOverviewCard";
-import { ArticleTextOnlyCard } from "@/ui/components/content/article/ArticleTextOnlyCard";
-import { Text } from "@/ui/components/typography";
-
-const { width: screenWidth } = Dimensions.get("window");
-
-const HorizontalSeparator = () => ;
-const VerticalSeparator = () => ;
-
-const LoadingIndicator = () => (
- <>
-
-
-
- >
-);
-
-export type ArticleListDisplayMode = "card" | "magazine" | "text-only";
-
-type ArticleListProps = Omit, "renderItem"> & {
- data: ArticleOverview[];
- horizontal?: boolean;
- infiniteScroll?: boolean;
- displayMode?: ArticleListDisplayMode;
- hasNextPage?: boolean;
- isFetchingNextPage?: boolean;
- fetchNextPage?: () => void;
-};
-
-type ArticleListComponent = React.FC & {
- HorizontalSeparator: typeof HorizontalSeparator;
- VerticalSeparator: typeof VerticalSeparator;
- LoadingIndicator: typeof LoadingIndicator;
-};
-
-const keyExtractor = (item: ArticleOverview) => item.id;
-
-const selectDisplayComponent = (mode: ArticleListDisplayMode) => {
- switch (mode) {
- case "card":
- return ArticleOverviewCard;
- case "magazine":
- return ArticleMagazineCard;
- case "text-only":
- return ArticleTextOnlyCard;
- default:
- throw new Error(`Unknown display mode: ${mode}`);
- }
-};
-
-const ArticleList: ArticleListComponent = (props: ArticleListProps) => {
- const {
- data,
- displayMode = "magazine",
- horizontal = false,
- infiniteScroll = false,
- hasNextPage,
- isFetchingNextPage,
- fetchNextPage,
- refreshing,
- ...rest
- } = props;
-
- const renderItem = useCallback(
- ({ item }: { item: ArticleOverview }) => {
- const itemWidth = horizontal ? screenWidth * 0.7 : undefined;
- const DisplayComponent = selectDisplayComponent(displayMode);
-
- return (
-
-
-
- );
- },
- [horizontal, displayMode],
- );
-
- const handleOnEndReached = useCallback(async () => {
- if (infiniteScroll && hasNextPage && !isFetchingNextPage && fetchNextPage) {
- fetchNextPage();
- }
- }, [hasNextPage, isFetchingNextPage, fetchNextPage, infiniteScroll]);
-
- return (
- Pas d’articles disponibles pour le moment. }
- ListFooterComponent={infiniteScroll ? LoadingIndicator : undefined}
- onEndReached={handleOnEndReached}
- onEndReachedThreshold={0.5}
- refreshing={refreshing}
- removeClippedSubviews={true}
- renderItem={renderItem}
- showsHorizontalScrollIndicator={false}
- />
- );
-};
-
-ArticleList.HorizontalSeparator = HorizontalSeparator;
-ArticleList.VerticalSeparator = VerticalSeparator;
-ArticleList.LoadingIndicator = LoadingIndicator;
-
-export { ArticleList };
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleMagazineCard.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleMagazineCard.tsx
deleted file mode 100644
index 34f4d78..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleMagazineCard.tsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Link } from "expo-router";
-import { Card, XStack, YStack } from "tamagui";
-
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { useRelativeTime } from "@/hooks/use-relative-time";
-import { ArticleCoverImage } from "@/ui/components/content/article/ArticleCoverImage";
-import { SourceReferencePill } from "@/ui/components/content/source/SourceReferencePill";
-import { Caption, Text } from "@/ui/components/typography";
-
-type ArticleMagazineCardProps = {
- data: ArticleOverview;
-};
-
-export const ArticleMagazineCard = (props: ArticleMagazineCardProps) => {
- const { data } = props;
- const relativeTime = useRelativeTime(data.publishedAt);
-
- return (
-
-
-
-
-
- {data.title}
-
-
- {data.excerpt}
-
-
-
- {data.image && }
-
-
-
-
-
-
- {relativeTime}
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleOverviewCard.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleOverviewCard.tsx
deleted file mode 100644
index 4d84a22..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleOverviewCard.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Link } from "expo-router";
-import { Card, XStack, YStack } from "tamagui";
-
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { useRelativeTime } from "@/hooks/use-relative-time";
-import { ArticleCoverImage } from "@/ui/components/content/article/ArticleCoverImage";
-import { SourceReferencePill } from "@/ui/components/content/source/SourceReferencePill";
-import { Caption, Text } from "@/ui/components/typography";
-
-type ArticleOverviewCardProps = {
- data: ArticleOverview;
-};
-
-export const ArticleOverviewCard = (props: ArticleOverviewCardProps) => {
- const { data } = props;
- const relativeTime = useRelativeTime(data.publishedAt);
-
- return (
-
-
- {data.image && }
-
-
- {data.title}
-
-
- {data.excerpt}
-
-
-
-
-
-
-
- {relativeTime}
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleSkeleton.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleSkeleton.tsx
deleted file mode 100644
index 85da530..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleSkeleton.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import { useCallback } from "react";
-import ContentLoader, { Circle, Rect } from "react-content-loader/native";
-import { Dimensions, FlatList } from "react-native";
-import { View } from "tamagui";
-
-import { ArticleList, ArticleListDisplayMode } from "@/ui/components/content/article/ArticleList";
-
-const { width: screenWidth } = Dimensions.get("window");
-const data: number[] = new Array(5).fill(0);
-
-type ArticleSkeletonListProps = {
- horizontal?: boolean;
- displayMode?: ArticleListDisplayMode;
-};
-
-const OverviewCardSkeleton = (props: any) => (
-
-
-
-
-
-
-
-
-
-
-
-
-);
-
-const MagazineCardSkeleton = (props: any) => (
-
-
-
-
-
-
-
-
-
-
-
-
-
-);
-
-const TextOnlyCardSkeleton = (props: any) => (
-
-
-
-
-
-
-
-
-
-
-
-);
-
-const keyExtractor = (_: number, index: number) => index.toString();
-
-const selectSkeletonComponent = (displayMode: ArticleListDisplayMode) => {
- switch (displayMode) {
- case "magazine":
- return MagazineCardSkeleton;
- case "text-only":
- return TextOnlyCardSkeleton;
- default:
- return OverviewCardSkeleton;
- }
-};
-
-export const ArticleSkeletonList = (props: ArticleSkeletonListProps) => {
- const { horizontal = false, displayMode = "magazine" } = props;
-
- const ItemSeparator = horizontal
- ? ArticleList.HorizontalSeparator
- : ArticleList.VerticalSeparator;
-
- const renderItem = useCallback(() => {
- const itemWidth = horizontal ? screenWidth * 0.7 : screenWidth;
- const SkeletonComponent = selectSkeletonComponent(displayMode);
-
- return (
-
-
-
- );
- }, [horizontal, displayMode]);
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/ArticleTextOnlyCard.tsx b/apps/mobile-legacy/src/ui/components/content/article/ArticleTextOnlyCard.tsx
deleted file mode 100644
index 57db9fc..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/ArticleTextOnlyCard.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { Link } from "expo-router";
-import { Card, XStack, YStack } from "tamagui";
-
-import { ArticleOverview } from "@/api/schema/feed-management/article";
-import { useRelativeTime } from "@/hooks/use-relative-time";
-import { SourceReferencePill } from "@/ui/components/content/source/SourceReferencePill";
-import { Caption, Text } from "@/ui/components/typography";
-
-type ArticleTextOnlyCardProps = {
- data: ArticleOverview;
-};
-
-export const ArticleTextOnlyCard = (props: ArticleTextOnlyCardProps) => {
- const { data } = props;
- const relativeTime = useRelativeTime(data.publishedAt);
-
- return (
-
-
-
-
-
- {data.title}
-
-
- {data.excerpt}
-
-
-
-
-
-
-
-
- {relativeTime}
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/article/index.tsx b/apps/mobile-legacy/src/ui/components/content/article/index.tsx
deleted file mode 100644
index a3a93ec..0000000
--- a/apps/mobile-legacy/src/ui/components/content/article/index.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-export { ArticleCategoryPill } from "@/ui/components/content/article/ArticleCategoryPill";
-export { ArticleCoverImage } from "@/ui/components/content/article/ArticleCoverImage";
-export { ArticleList } from "@/ui/components/content/article/ArticleList";
-export { ArticleMagazineCard } from "@/ui/components/content/article/ArticleMagazineCard";
-export { ArticleOverviewCard } from "@/ui/components/content/article/ArticleOverviewCard";
-export { ArticleSkeletonList } from "@/ui/components/content/article/ArticleSkeleton";
-export { ArticleTextOnlyCard } from "@/ui/components/content/article/ArticleTextOnlyCard";
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkCard.tsx b/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkCard.tsx
deleted file mode 100644
index 7c7a74a..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkCard.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { Link } from "expo-router";
-import { Card, XStack, YStack } from "tamagui";
-
-import { Bookmark } from "@/api/schema/feed-management/bookmark";
-import { useRelativeTime } from "@/hooks/use-relative-time";
-import { Caption, Text } from "@/ui/components/typography";
-
-type BookmarkCardProps = {
- data: Bookmark;
-};
-
-export const BookmarkCard = (props: BookmarkCardProps) => {
- const { data } = props;
- const relativeTime = useRelativeTime(data.createdAt);
-
- return (
-
-
-
-
-
-
-
- {data.name}
-
- {data.description && (
-
- {data.description}
-
- )}
-
-
-
-
-
-
- {data.isPublic}
- {data.articlesCount} articles
- {relativeTime}
-
-
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkEmptyState.tsx b/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkEmptyState.tsx
deleted file mode 100644
index 49e9466..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkEmptyState.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { YStack } from "tamagui";
-
-import BookmarkIllustration from "@/assets/illustrations/BookmarkIllustration";
-import { CreateBookmarkSheet } from "@/ui/components/content/bookmark/CreateBookmarkSheet";
-import { Heading, Text } from "@/ui/components/typography";
-
-export const BookmarkEmptyState = () => {
- return (
-
-
- Empty Bookmarks
-
- Create a bookmark to save your favorite articles and access them later.
-
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkList.tsx b/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkList.tsx
deleted file mode 100644
index 9691fab..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/BookmarkList.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import React, { useCallback } from "react";
-import { ActivityIndicator, FlatList, FlatListProps } from "react-native";
-import { YStack } from "tamagui";
-
-import { Bookmark } from "@/api/schema/feed-management/bookmark";
-import { BookmarkCard } from "@/ui/components/content/bookmark/BookmarkCard";
-import { BookmarkEmptyState } from "@/ui/components/content/bookmark/BookmarkEmptyState";
-
-const VerticalSeparator = () => ;
-
-const LoadingIndicator = () => (
- <>
-
-
-
- >
-);
-
-type BookmarkListProps = Omit, "renderItem"> & {
- data: Bookmark[];
- infiniteScroll?: boolean;
- hasNextPage?: boolean;
- isFetchingNextPage?: boolean;
- fetchNextPage?: () => void;
-};
-
-type BookmarkListComponent = React.FC & {
- VerticalSeparator: typeof VerticalSeparator;
- LoadingIndicator: typeof LoadingIndicator;
-};
-
-const keyExtractor = (item: Bookmark) => item.id;
-
-const renderItem = ({ item }: { item: Bookmark }) => {
- return ;
-};
-
-const BookmarkList: BookmarkListComponent = (props: BookmarkListProps) => {
- const {
- data,
- infiniteScroll = false,
- hasNextPage,
- isFetchingNextPage,
- fetchNextPage,
- refreshing,
- ...rest
- } = props;
-
- const handleOnEndReached = useCallback(async () => {
- if (infiniteScroll && hasNextPage && !isFetchingNextPage && fetchNextPage) {
- fetchNextPage();
- }
- }, [hasNextPage, isFetchingNextPage, fetchNextPage, infiniteScroll]);
-
- return (
- }
- ListFooterComponent={infiniteScroll && refreshing ? LoadingIndicator : undefined}
- onEndReached={handleOnEndReached}
- onEndReachedThreshold={0.5}
- refreshing={refreshing}
- removeClippedSubviews={true}
- renderItem={renderItem}
- showsHorizontalScrollIndicator={false}
- />
- );
-};
-
-BookmarkList.VerticalSeparator = VerticalSeparator;
-BookmarkList.LoadingIndicator = LoadingIndicator;
-
-export { BookmarkList };
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/CreateBookmarkSheet.tsx b/apps/mobile-legacy/src/ui/components/content/bookmark/CreateBookmarkSheet.tsx
deleted file mode 100644
index 6137d7f..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/CreateBookmarkSheet.tsx
+++ /dev/null
@@ -1,103 +0,0 @@
-import { joiResolver } from "@hookform/resolvers/joi";
-import { Sheet } from "@tamagui/sheet";
-import { useState } from "react";
-import { useForm } from "react-hook-form";
-import Toast from "react-native-toast-message";
-import { Button, YStack } from "tamagui";
-
-import { useCreateBookmark } from "@/api/request/feed-management/bookmark";
-import { BookmarkPayload, BookmarkPayloadSchema } from "@/api/schema/feed-management/bookmark";
-import { ErrorResponse, safeMessage } from "@/api/shared";
-import { FormSwitch, FormTextArea, FormTextInput } from "@/ui/components/controls/forms";
-import { SubmitButton } from "@/ui/components/controls/SubmitButton";
-
-export const CreateBookmarkSheet = () => {
- const { mutate, isPending } = useCreateBookmark();
- const [open, setOpen] = useState(false);
-
- const { control, handleSubmit, formState } = useForm({
- resolver: joiResolver(BookmarkPayloadSchema),
- });
-
- const onSubmit = (data: BookmarkPayload) => {
- mutate(data, {
- onError: (error: ErrorResponse) => {
- Toast.show({
- text1: "Erreur",
- text2: safeMessage(error),
- type: "error",
- });
- },
- onSuccess: () => {
- Toast.show({
- text1: "Félicitations !",
- text2: "Votre signet a été créé avec succès.",
- type: "success",
- });
- setOpen(false);
- },
- });
- };
-
- return (
-
- setOpen(true)}>Ajouter un signet
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/UpdateBookmarkSheet.tsx b/apps/mobile-legacy/src/ui/components/content/bookmark/UpdateBookmarkSheet.tsx
deleted file mode 100644
index 7b3bafe..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/UpdateBookmarkSheet.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-import { joiResolver } from "@hookform/resolvers/joi";
-import { Sheet } from "@tamagui/sheet";
-import { useEffect, useState } from "react";
-import { useForm } from "react-hook-form";
-import Toast from "react-native-toast-message";
-import { Button, YStack } from "tamagui";
-
-import { useUpdateBookmark } from "@/api/request/feed-management/bookmark";
-import {
- Bookmark,
- BookmarkPayload,
- BookmarkPayloadSchema,
-} from "@/api/schema/feed-management/bookmark";
-import { ErrorResponse, safeMessage } from "@/api/shared";
-import { FormSwitch } from "@/ui/components/controls/forms/Switch";
-import { FormTextArea } from "@/ui/components/controls/forms/TextArea";
-import { FormTextInput } from "@/ui/components/controls/forms/TextInput";
-import { SubmitButton } from "@/ui/components/controls/SubmitButton";
-
-type UpdateBookmarkSheetProps = {
- data: Bookmark;
-};
-
-export const UpdateBookmarkSheet = (props: UpdateBookmarkSheetProps) => {
- const { data } = props;
- const { mutate, isPending } = useUpdateBookmark(data.id);
- const [open, setOpen] = useState(false);
-
- const { control, handleSubmit, formState, reset } = useForm({
- resolver: joiResolver(BookmarkPayloadSchema),
- });
-
- useEffect(() => {
- reset({ ...data });
- }, [data, reset]);
-
- const onSubmit = (data: BookmarkPayload) => {
- mutate(data, {
- onError: (error: ErrorResponse) => {
- Toast.show({
- text1: "Erreur",
- text2: safeMessage(error),
- type: "error",
- });
- },
- onSuccess: () => {
- Toast.show({
- text1: "Félicitations !",
- text2: "Votre signet a été modifié avec succès.",
- type: "success",
- });
- setOpen(false);
- },
- });
- };
-
- return (
-
- setOpen(true)}>Modifier
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/bookmark/index.ts b/apps/mobile-legacy/src/ui/components/content/bookmark/index.ts
deleted file mode 100644
index 21225e3..0000000
--- a/apps/mobile-legacy/src/ui/components/content/bookmark/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export { BookmarkCard } from "@/ui/components/content/bookmark/BookmarkCard";
-export { BookmarkEmptyState } from "@/ui/components/content/bookmark/BookmarkEmptyState";
-export { BookmarkList } from "@/ui/components/content/bookmark/BookmarkList";
-export { CreateBookmarkSheet } from "@/ui/components/content/bookmark/CreateBookmarkSheet";
-export { UpdateBookmarkSheet } from "@/ui/components/content/bookmark/UpdateBookmarkSheet";
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceFollowButton.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceFollowButton.tsx
deleted file mode 100644
index b65a758..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceFollowButton.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useCallback, useState } from "react";
-import { ActivityIndicator, Alert } from "react-native";
-import { Button, GetProps } from "tamagui";
-
-import { useFollowSource, useUnfollowSource } from "@/api/request/feed-management/source";
-
-type SourceFollowButtonProps = GetProps & {
- id: string;
- name: string;
- followed: boolean;
-};
-
-export const SourceFollowButton = (props: SourceFollowButtonProps) => {
- const { id, followed, name, ...rest } = props;
- const [isFollowed, setIsFollowed] = useState(followed);
- const { mutate: follow, isPending: following } = useFollowSource(id);
- const { mutate: unfollow, isPending: unfollowing } = useUnfollowSource(id);
- const loading = following || unfollowing;
-
- const handlePress = useCallback(() => {
- if (isFollowed) {
- Alert.alert(
- "Confirmation",
- `Êtes-vous sûr de vouloir ne plus suivre ${name} ?`,
- [
- {
- style: "cancel",
- text: "Annuler",
- },
- {
- onPress: () => {
- unfollow();
- setIsFollowed((prev) => !prev);
- },
- style: "destructive",
- text: "Ne plus suivre",
- },
- ],
- { cancelable: false },
- );
- } else {
- follow();
- setIsFollowed((prev) => !prev);
- }
- }, [isFollowed, name, unfollow, follow]);
-
- return (
-
- {loading ? : isFollowed ? "Suivi" : "Suivre"}
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceList.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceList.tsx
deleted file mode 100644
index 6ab067e..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceList.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React, { useCallback } from "react";
-import { FlatList, FlatListProps } from "react-native";
-import { Paragraph, XStack, YStack } from "tamagui";
-
-import { SourceOverview } from "@/api/schema/feed-management/source";
-import { SourceOverviewCard } from "@/ui/components/content/source/SourceOverviewCard";
-
-const HorizontalSeparator = () => ;
-const VerticalSeparator = () => ;
-
-type SourceOverviewListProps = Omit, "renderItem"> & {
- data: SourceOverview[];
- horizontal?: boolean;
- infiniteScroll?: boolean;
-};
-
-type SourceOverviewListComponent = React.FC & {
- HorizontalSeparator: typeof HorizontalSeparator;
- VerticalSeparator: typeof VerticalSeparator;
-};
-
-const keyExtractor = (item: SourceOverview) => item.name;
-
-const SourceList: SourceOverviewListComponent = (props: SourceOverviewListProps) => {
- const { data, horizontal = false, ...rest } = props;
-
- const renderItem = useCallback(
- ({ item }: { item: SourceOverview }) => {
- return ;
- },
- [horizontal],
- );
-
- return (
- Pas de sources disponibles pour le moment. }
- onEndReachedThreshold={0.5}
- removeClippedSubviews={true}
- renderItem={renderItem}
- showsHorizontalScrollIndicator={false}
- />
- );
-};
-
-SourceList.HorizontalSeparator = HorizontalSeparator;
-SourceList.VerticalSeparator = VerticalSeparator;
-
-export { SourceList };
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceOverviewCard.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceOverviewCard.tsx
deleted file mode 100644
index be0c03a..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceOverviewCard.tsx
+++ /dev/null
@@ -1,80 +0,0 @@
-import { Link } from "expo-router";
-import { GetProps, XStack, YStack, styled } from "tamagui";
-
-import { SourceOverview } from "@/api/schema/feed-management/source";
-import { SourceFollowButton } from "@/ui/components/content/source/SourceFollowButton";
-import { SourceProfileImage } from "@/ui/components/content/source/SourceProfileImage";
-import { Text } from "@/ui/components/typography";
-
-const SourceCardFrame = styled(YStack, {
- alignItems: "center",
- borderRadius: "$4",
- gap: "$2",
-
- variants: {
- horizontal: {
- false: {
- flexDirection: "row",
- gap: "$4",
- justifyContent: "space-between",
- paddingVertical: "$2",
- width: "100%",
- },
- true: {
- flexShrink: 0,
- maxWidth: 100,
- },
- },
- },
-} as const);
-
-type SourceCardProps = GetProps & {
- data: SourceOverview;
- horizontal?: boolean;
-};
-
-export const SourceOverviewCard = (props: SourceCardProps) => {
- const { data, horizontal = true, ...rest } = props;
-
- const nameFontSize = horizontal ? "$3" : "$4";
-
- return (
-
-
-
-
-
-
- {horizontal ? (
-
- {data.displayName ?? data.name}
-
- ) : (
-
-
-
- {data.displayName ?? data.name}
-
-
-
-
- {data.url}
-
-
- )}
-
-
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceProfileImage.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceProfileImage.tsx
deleted file mode 100644
index 5014123..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceProfileImage.tsx
+++ /dev/null
@@ -1,30 +0,0 @@
-import { GetProps, Image, styled } from "tamagui";
-
-const StyledImage = styled(Image, {
- backgroundColor: "white",
- borderRadius: "$12",
-});
-
-type SourceAvatarProps = GetProps & {
- image: string;
- name: string;
- size?: number;
-};
-
-export const SourceProfileImage = (props: SourceAvatarProps) => {
- const { image, name, size = 50, ...rest } = props;
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceReferencePill.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceReferencePill.tsx
deleted file mode 100644
index e082a0b..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceReferencePill.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { Link } from "expo-router";
-import { Avatar, GetProps, XStack } from "tamagui";
-
-import { SourceReference } from "@/api/schema/feed-management/source";
-import { Text } from "@/ui/components/typography";
-
-type SourceReferencePillProps = GetProps & {
- data: SourceReference;
-};
-
-export function SourceReferencePill(props: SourceReferencePillProps) {
- const { data, ...rest } = props;
-
- return (
-
-
-
-
-
-
-
- {data.displayName ?? data.name}
-
-
-
- );
-}
diff --git a/apps/mobile-legacy/src/ui/components/content/source/SourceSkeleton.tsx b/apps/mobile-legacy/src/ui/components/content/source/SourceSkeleton.tsx
deleted file mode 100644
index 04d60db..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/SourceSkeleton.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import { useCallback } from "react";
-import ContentLoader, { Circle, Rect } from "react-content-loader/native";
-import { FlatList } from "react-native";
-import { YStack } from "tamagui";
-
-import { SourceList } from "@/ui/components/content/source/SourceList";
-
-const data: number[] = new Array(5).fill(0);
-
-type SourceSkeletonListProps = {
- horizontal?: boolean;
-};
-
-const VerticalSkeleton = (props: any) => (
-
-
-
-
-
-
-);
-
-const HorizontalSkeleton = (props: any) => (
-
-
-
-
-
-);
-
-const keyExtractor = (_: number, index: number) => index.toString();
-
-const selectSkeletonComponent = (horizontal: boolean) => {
- return horizontal ? (
-
- ) : (
-
-
-
- );
-};
-
-export const SourceSkeletonList = (props: SourceSkeletonListProps) => {
- const { horizontal = false } = props;
-
- const ItemSeparator = horizontal ? SourceList.HorizontalSeparator : SourceList.VerticalSeparator;
-
- const renderItem = useCallback(() => {
- return selectSkeletonComponent(horizontal);
- }, [horizontal]);
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/content/source/index.ts b/apps/mobile-legacy/src/ui/components/content/source/index.ts
deleted file mode 100644
index 4128321..0000000
--- a/apps/mobile-legacy/src/ui/components/content/source/index.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export { SourceFollowButton } from "@/ui/components/content/source/SourceFollowButton";
-export { SourceList } from "@/ui/components/content/source/SourceList";
-export { SourceOverviewCard } from "@/ui/components/content/source/SourceOverviewCard";
-export { SourceProfileImage } from "@/ui/components/content/source/SourceProfileImage";
-export { SourceReferencePill } from "@/ui/components/content/source/SourceReferencePill";
-export { SourceSkeletonList } from "@/ui/components/content/source/SourceSkeleton";
diff --git a/apps/mobile-legacy/src/ui/components/controls/BackButton.tsx b/apps/mobile-legacy/src/ui/components/controls/BackButton.tsx
deleted file mode 100644
index 809d3ea..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/BackButton.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { ArrowLeft } from "@tamagui/lucide-icons";
-import { Button, ButtonProps } from "tamagui";
-
-type BackButtonProps = {
- onPress: () => void;
-};
-
-export const BackButton = (props: BackButtonProps & ButtonProps) => {
- const { onPress, ...rest } = props;
-
- return (
- }
- onPress={onPress}
- // backgroundColor="$gray6"
- size="$4"
- width="$4"
- {...rest}
- />
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/controls/IconButton.tsx b/apps/mobile-legacy/src/ui/components/controls/IconButton.tsx
deleted file mode 100644
index f2aa4e6..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/IconButton.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Button, ButtonProps } from "tamagui";
-
-type IconButtonProps = {
- onPress: () => void;
-};
-
-export const IconButton = (props: IconButtonProps & ButtonProps) => {
- const { onPress, ...rest } = props;
-
- return (
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/controls/SubmitButton.tsx b/apps/mobile-legacy/src/ui/components/controls/SubmitButton.tsx
deleted file mode 100644
index 07e125a..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/SubmitButton.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { ActivityIndicator } from "react-native";
-import { Button, GetProps, styled } from "tamagui";
-
-const StyledButton = styled(Button, {
- fontWeight: "bold",
- width: "100%",
-});
-
-type SubmitButtonProps = GetProps & {
- label: string;
- isValid: boolean;
- isPending: boolean;
-};
-
-export const SubmitButton = (props: SubmitButtonProps) => {
- const { isValid, isPending, label, ...rest } = props;
-
- return (
-
- {isPending ? : label}
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/EmailInput.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/EmailInput.tsx
deleted file mode 100644
index df3e082..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/EmailInput.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Mail } from "@tamagui/lucide-icons";
-
-import { Input, InputProps } from "@/ui/components/controls/forms/Input";
-import { withController } from "@/ui/components/controls/forms/withController";
-
-export const EmailInput = (props: InputProps) => {
- const { label = "Email", caption, error, onChangeText, ...rest } = props;
-
- return (
-
- );
-};
-
-export const FormEmailInput = withController(EmailInput);
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/Input.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/Input.tsx
deleted file mode 100644
index 35b751d..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/Input.tsx
+++ /dev/null
@@ -1,82 +0,0 @@
-import { IconProps } from "@tamagui/helpers-icon";
-import React, { useMemo } from "react";
-import {
- ColorTokens,
- GetProps,
- Label,
- SizeTokens,
- Input as TamaguiInput,
- XStack,
- YStack,
- styled,
-} from "tamagui";
-
-import { Caption } from "@/ui/components/typography";
-
-const StyledInput = styled(TamaguiInput, {
- backgroundColor: "transparent",
- borderWidth: 0,
- flex: 1,
- placeholderTextColor: "$gray8",
- size: "$large",
-});
-
-export type InputProps = GetProps & {
- label?: string;
- caption?: string;
- error?: string;
- leadingAdornment?: React.ComponentType;
- trailingAdornment?: React.ReactNode;
- onChangeText?: (text: string) => void;
- id?: string;
-};
-
-export const Input = (props: InputProps) => {
- const { label, caption, error, leadingAdornment, trailingAdornment, onChangeText, id, ...rest } =
- props;
-
- const isInvalid = !!error;
- const leadingAdornmentComponent = useMemo(() => {
- return leadingAdornment ? (
-
- {React.createElement(leadingAdornment, {
- color: "$gray9",
- size: "$1",
- })}
-
- ) : undefined;
- }, [leadingAdornment]);
-
- return (
-
-
- {label && (
-
- {label}
-
- )}
-
-
- {leadingAdornmentComponent}
-
- {trailingAdornment}
-
-
-
- {caption && !isInvalid && {caption} }
- {isInvalid && error && {error} }
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/PasswordInput.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/PasswordInput.tsx
deleted file mode 100644
index 0bc5b99..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/PasswordInput.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import { Eye, EyeOff, Lock } from "@tamagui/lucide-icons";
-import { useState } from "react";
-import { XStack } from "tamagui";
-
-import { Input, InputProps } from "@/ui/components/controls/forms/Input";
-import { withController } from "@/ui/components/controls/forms/withController";
-
-export const PasswordInput = (props: InputProps) => {
- const { label = "Mot de passe", onChangeText, caption, error, ...rest } = props;
- const [showPassword, setShowPassword] = useState(false);
-
- return (
- setShowPassword(!showPassword)}
- paddingRight="$3"
- >
- {showPassword ? : }
-
- }
- {...rest}
- />
- );
-};
-
-export const FormPasswordInput = withController(PasswordInput);
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/Switch.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/Switch.tsx
deleted file mode 100644
index 5c7fa3f..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/Switch.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { GetProps, Label, Switch as TamaguiSwitch, XStack, YStack } from "tamagui";
-
-import { withController } from "@/ui/components/controls/forms/withController";
-import { Caption } from "@/ui/components/typography";
-
-type SwitchProps = GetProps & {
- label: string;
- description?: string;
- isChecked: boolean;
- onCheckedChange: (checked: boolean) => void;
- id?: string;
-};
-
-export const Switch = (props: SwitchProps) => {
- const { label, description, isChecked, onCheckedChange, id, ...rest } = props;
-
- return (
-
-
-
- {label}
-
- {description && {description} }
-
-
-
-
-
- );
-};
-
-export const FormSwitch = withController(Switch);
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/TextArea.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/TextArea.tsx
deleted file mode 100644
index 2f03691..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/TextArea.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { GetProps, Label, TextArea as TamaguiTextArea, XStack, YStack, styled } from "tamagui";
-
-import { withController } from "@/ui/components/controls/forms/withController";
-import { Caption } from "@/ui/components/typography";
-
-const StyledTextArea = styled(TamaguiTextArea, {
- backgroundColor: "transparent",
- borderWidth: 0,
- flex: 1,
- minHeight: 100,
- placeholderTextColor: "$gray8",
- size: "$4",
-});
-
-type TextAreaProps = GetProps & {
- label?: string;
- caption?: string;
- error?: string;
- onChangeText?: (text: string) => void;
- id?: string;
-};
-
-export const TextArea = (props: TextAreaProps) => {
- const { label, caption, error, onChangeText, id, ...rest } = props;
-
- const isInvalid = !!error;
-
- return (
-
- {label && (
-
- {label}
-
- )}
-
-
-
-
-
- {caption && !isInvalid && {caption} }
- {isInvalid && error && {error} }
-
- );
-};
-
-export const FormTextArea = withController(TextArea);
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/TextInput.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/TextInput.tsx
deleted file mode 100644
index eaea1c4..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/TextInput.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { Input, InputProps } from "@/ui/components/controls/forms/Input";
-import { withController } from "@/ui/components/controls/forms/withController";
-
-export const TextInput = (props: InputProps) => {
- const { label, caption, error, leadingAdornment, onChangeText, ...rest } = props;
-
- return (
-
- );
-};
-
-export const FormTextInput = withController(TextInput);
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/index.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/index.tsx
deleted file mode 100644
index 9ab15b5..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/index.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export { EmailInput, FormEmailInput } from "@/ui/components/controls/forms/EmailInput";
-export { FormPasswordInput, PasswordInput } from "@/ui/components/controls/forms/PasswordInput";
-export { FormSwitch, Switch } from "@/ui/components/controls/forms/Switch";
-export { FormTextArea, TextArea } from "@/ui/components/controls/forms/TextArea";
-export { FormTextInput, TextInput } from "@/ui/components/controls/forms/TextInput";
diff --git a/apps/mobile-legacy/src/ui/components/controls/forms/withController.tsx b/apps/mobile-legacy/src/ui/components/controls/forms/withController.tsx
deleted file mode 100644
index 7580224..0000000
--- a/apps/mobile-legacy/src/ui/components/controls/forms/withController.tsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from "react";
-import { Controller, ControllerProps } from "react-hook-form";
-
-type WithControllerProps = {
- value?: any;
- onChangeText?: (val: any) => void;
- isChecked?: boolean;
- onCheckedChange?: (val: boolean) => void;
- error?: string;
-};
-
-type ControllerWrapperProps = {
- name: string;
- control: ControllerProps["control"];
-} & Omit;
-
-export const withController = (
- Component: React.ComponentType,
-) => {
- const ControllerWrapper = (props: ControllerWrapperProps) => {
- const { name, control, ...rest } = props;
-
- return (
- {
- const hasSwitchProps = "isChecked" in rest || "onCheckedChange" in rest;
-
- const controllerProps: WithControllerProps = {
- error: error?.message,
- };
-
- if (hasSwitchProps) {
- controllerProps.isChecked = value;
- controllerProps.onCheckedChange = onChange;
- } else {
- controllerProps.value = value;
- controllerProps.onChangeText = onChange;
- }
-
- return ;
- }}
- />
- );
- };
-
- ControllerWrapper.displayName = `withController(${Component.displayName || Component.name || "Component"})`;
-
- return ControllerWrapper;
-};
diff --git a/apps/mobile-legacy/src/ui/components/layout/ScreenHeading.tsx b/apps/mobile-legacy/src/ui/components/layout/ScreenHeading.tsx
deleted file mode 100644
index 87d9974..0000000
--- a/apps/mobile-legacy/src/ui/components/layout/ScreenHeading.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import React from "react";
-import { View, XStack, styled } from "tamagui";
-
-import { Text } from "@/ui/components/typography";
-
-const ActionContainer = styled(XStack, {
- alignItems: "center",
- gap: "$1",
- minWidth: "$5",
-});
-
-interface ScreenHeadingProps {
- leadingAction?: React.ReactNode;
- title?: string;
- trailingActions?: React.ReactNode | React.ReactNode[];
- paddingHorizontal?: number | string;
- marginBottom?: number | string;
-}
-
-export const ScreenHeading = (props: ScreenHeadingProps) => {
- const {
- leadingAction,
- title,
- trailingActions,
- paddingHorizontal = "$4",
- marginBottom = "$2",
- } = props;
- const trailingActionsArray = Array.isArray(trailingActions)
- ? trailingActions
- : trailingActions
- ? [trailingActions]
- : [];
-
- return (
-
- {leadingAction}
-
- {title ? (
-
- {title}
-
- ) : (
-
- )}
-
-
- {trailingActionsArray.map((action, index) => (
- {action}
- ))}
-
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/layout/ScreenSection.tsx b/apps/mobile-legacy/src/ui/components/layout/ScreenSection.tsx
deleted file mode 100644
index 5a054d5..0000000
--- a/apps/mobile-legacy/src/ui/components/layout/ScreenSection.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { ArrowRight } from "@tamagui/lucide-icons";
-import { Href, Link } from "expo-router";
-import { GetProps, Paragraph, XStack, styled } from "tamagui";
-
-import { Text } from "@/ui/components/typography";
-
-const SectionContainer = styled(XStack, {
- alignItems: "center",
- justifyContent: "space-between",
- paddingVertical: "$2",
- width: "100%",
-});
-
-type ScreenSectionProps = GetProps & {
- title: string;
- forwardLink?: Href;
-};
-
-type ScreenSectionLinkProps = {
- href: Href;
-};
-
-const ScreenSectionLink = ({ href }: ScreenSectionLinkProps) => (
-
-
-
- Voir tout
-
-
-
-
-);
-
-export const ScreenSection = (props: ScreenSectionProps) => {
- const { title, forwardLink, ...rest } = props;
-
- return (
-
-
- {title}
-
- {forwardLink && }
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/layout/ScreenView.tsx b/apps/mobile-legacy/src/ui/components/layout/ScreenView.tsx
deleted file mode 100644
index 6014e93..0000000
--- a/apps/mobile-legacy/src/ui/components/layout/ScreenView.tsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import { StatusBar } from "expo-status-bar";
-import React from "react";
-import { useSafeAreaInsets } from "react-native-safe-area-context";
-import { YStack, styled } from "tamagui";
-
-import { ScreenHeading } from "@/ui/components/layout/ScreenHeading";
-import { ScreenSection } from "@/ui/components/layout/ScreenSection";
-
-type ScreenViewProps = React.ComponentProps & {
- showStatusBar?: boolean;
- statusBarStyle?: "auto" | "inverted" | "light" | "dark";
- statusBarBackgroundColor?: string;
- children?: React.ReactNode;
-};
-
-type ScreenViewComponent = React.FC> & {
- Heading: typeof ScreenHeading;
- Section: typeof ScreenSection;
-};
-
-const ScreenContent = styled(YStack, {
- alignItems: "center",
- gap: "$4",
- paddingHorizontal: "$4",
-});
-
-const ScreenView: ScreenViewComponent = (props: React.PropsWithChildren) => {
- const {
- showStatusBar = true,
- statusBarStyle = "auto",
- statusBarBackgroundColor = "transparent",
- padding,
- children,
- ...rest
- } = props;
- const insets = useSafeAreaInsets();
-
- let headingElement: React.ReactNode | null = null;
- const otherChildren: React.ReactNode[] = [];
-
- // Iterate through children to find the Heading and separate others
- React.Children.forEach(children, (child) => {
- if (React.isValidElement(child)) {
- if (child.type === ScreenView.Heading) {
- headingElement = child;
- } else {
- otherChildren.push(child);
- }
- } else {
- otherChildren.push(child);
- }
- });
-
- return (
- <>
- {showStatusBar ? (
-
- ) : null}
-
-
- {headingElement}
-
-
- {otherChildren}
-
-
- >
- );
-};
-
-ScreenView.Heading = ScreenHeading;
-ScreenView.Section = ScreenSection;
-
-export { ScreenView };
diff --git a/apps/mobile-legacy/src/ui/components/layout/index.ts b/apps/mobile-legacy/src/ui/components/layout/index.ts
deleted file mode 100644
index cfe67e5..0000000
--- a/apps/mobile-legacy/src/ui/components/layout/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { ScreenView } from "@/ui/components/layout/ScreenView";
diff --git a/apps/mobile-legacy/src/ui/components/typography/Caption.tsx b/apps/mobile-legacy/src/ui/components/typography/Caption.tsx
deleted file mode 100644
index 3065dba..0000000
--- a/apps/mobile-legacy/src/ui/components/typography/Caption.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import type React from "react";
-import { Paragraph, ParagraphProps } from "tamagui";
-
-export const Caption = (props: React.PropsWithChildren) => {
- const { children, ...rest } = props;
-
- return (
-
- {children}
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/typography/Display.tsx b/apps/mobile-legacy/src/ui/components/typography/Display.tsx
deleted file mode 100644
index d18c72c..0000000
--- a/apps/mobile-legacy/src/ui/components/typography/Display.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import type React from "react";
-import { H2, ParagraphProps } from "tamagui";
-
-export const Display = (props: React.PropsWithChildren) => {
- const { children, ...rest } = props;
-
- return (
-
- {children}
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/typography/Heading.tsx b/apps/mobile-legacy/src/ui/components/typography/Heading.tsx
deleted file mode 100644
index 4caa428..0000000
--- a/apps/mobile-legacy/src/ui/components/typography/Heading.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import type React from "react";
-import { H4, ParagraphProps } from "tamagui";
-
-export const Heading = (props: React.PropsWithChildren) => {
- const { children, ...rest } = props;
-
- return (
-
- {children}
-
- );
-};
diff --git a/apps/mobile-legacy/src/ui/components/typography/Text.tsx b/apps/mobile-legacy/src/ui/components/typography/Text.tsx
deleted file mode 100644
index eda6e18..0000000
--- a/apps/mobile-legacy/src/ui/components/typography/Text.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import type React from "react";
-import { Paragraph, ParagraphProps } from "tamagui";
-
-export const Text = (props: React.PropsWithChildren) => {
- const { children, ...rest } = props;
- return {children} ;
-};
diff --git a/apps/mobile-legacy/src/ui/components/typography/index.ts b/apps/mobile-legacy/src/ui/components/typography/index.ts
deleted file mode 100644
index ac20692..0000000
--- a/apps/mobile-legacy/src/ui/components/typography/index.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export { Caption } from "@/ui/components/typography/Caption";
-export { Display } from "@/ui/components/typography/Display";
-export { Heading } from "@/ui/components/typography/Heading";
-export { Text } from "@/ui/components/typography/Text";
diff --git a/apps/mobile-legacy/tamagui.config.ts b/apps/mobile-legacy/tamagui.config.ts
deleted file mode 100644
index 55073fa..0000000
--- a/apps/mobile-legacy/tamagui.config.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { defaultConfig } from "@tamagui/config/v4";
-import { createTamagui } from "tamagui";
-
-import { themes } from "./themes";
-
-export const config = createTamagui({
- ...defaultConfig,
- themes,
-});
diff --git a/apps/mobile-legacy/themes.ts b/apps/mobile-legacy/themes.ts
deleted file mode 100644
index 5ec35cd..0000000
--- a/apps/mobile-legacy/themes.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-import * as Colors from "@tamagui/colors";
-import { createThemes, defaultComponentThemes } from "@tamagui/theme-builder";
-
-const primaryPalette = [
- "hsl(174, 66%, 97%)",
- "hsl(174, 66%, 93%)",
- "hsl(174, 66%, 87%)",
- "hsl(174, 66%, 78%)",
- "hsl(174, 66%, 68%)",
- "hsl(174, 66%, 60%)",
- "hsl(174, 66%, 53%)",
- "hsl(174, 66%, 48%)",
- "hsl(174, 66%, 40%)",
- "hsl(174, 66%, 33%)",
- "hsl(174, 66%, 21%)",
- "hsl(174, 66%, 12%)",
-];
-
-const lightPalette = [
- "hsl(174, 6.6%, 98%)",
- "hsl(174, 6.6%, 96%)",
- "hsl(174, 6.6%, 90%)",
- "hsl(174, 6.6%, 84%)",
- "hsl(174, 6.6%, 65%)",
- "hsl(174, 6.6%, 46%)",
- "hsl(174, 6.6%, 34%)",
- "hsl(174, 6.6%, 26%)",
- "hsl(174, 6.6%, 16%)",
- "hsl(174, 6.6%, 10%)",
- "hsl(174, 6.6%, 8%)",
- "hsl(174, 6.6%, 4%)",
-];
-
-const darkPalette = [...lightPalette].reverse();
-
-const lightShadows = {
- shadow1: "rgba(0,0,0,0.04)",
- shadow2: "rgba(0,0,0,0.08)",
- shadow3: "rgba(0,0,0,0.16)",
- shadow4: "rgba(0,0,0,0.24)",
- shadow5: "rgba(0,0,0,0.32)",
- shadow6: "rgba(0,0,0,0.4)",
-};
-
-const darkShadows = {
- shadow1: "rgba(0,0,0,0.2)",
- shadow2: "rgba(0,0,0,0.3)",
- shadow3: "rgba(0,0,0,0.4)",
- shadow4: "rgba(0,0,0,0.5)",
- shadow5: "rgba(0,0,0,0.6)",
- shadow6: "rgba(0,0,0,0.7)",
-};
-
-const builtThemes = createThemes({
- accent: {
- palette: {
- dark: [...primaryPalette].reverse(),
- light: [...primaryPalette].reverse(),
- },
- },
- base: {
- extra: {
- dark: {
- ...Colors.greenDark,
- ...Colors.redDark,
- ...Colors.yellowDark,
- ...Colors.grayDark,
- ...darkShadows,
- shadowColor: darkShadows.shadow1,
- },
- light: {
- ...Colors.green,
- ...Colors.red,
- ...Colors.yellow,
- ...Colors.gray,
- ...lightShadows,
- shadowColor: lightShadows.shadow1,
- },
- },
- palette: {
- dark: darkPalette,
- light: lightPalette,
- },
- },
- childrenThemes: {
- error: {
- palette: {
- dark: Object.values(Colors.redDark),
- light: Object.values(Colors.red),
- },
- },
- gray: {
- palette: {
- dark: darkPalette,
- light: lightPalette,
- },
- },
- primary: {
- palette: {
- dark: [...primaryPalette].reverse(),
- light: [...primaryPalette].reverse(),
- },
- },
- success: {
- palette: {
- dark: Object.values(Colors.greenDark),
- light: Object.values(Colors.green),
- },
- },
- warning: {
- palette: {
- dark: Object.values(Colors.yellowDark),
- light: Object.values(Colors.yellow),
- },
- },
- },
- componentThemes: defaultComponentThemes,
-});
-
-export type Themes = typeof builtThemes;
-
-// the process.env conditional here is optional but saves web client-side bundle
-// size by leaving out themes JS. tamagui automatically hydrates themes from CSS
-// back into JS for you, and the bundler plugins set TAMAGUI_ENVIRONMENT. so
-// long as you are using the Vite, Next, Webpack plugins this should just work,
-// but if not you can just export builtThemes directly as themes:
-export const themes: Themes =
- process.env.TAMAGUI_ENVIRONMENT === "client" && process.env.NODE_ENV === "production"
- ? ({} as any)
- : (builtThemes as any);
diff --git a/apps/mobile-legacy/tsconfig.json b/apps/mobile-legacy/tsconfig.json
deleted file mode 100644
index 508b8f5..0000000
--- a/apps/mobile-legacy/tsconfig.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "compilerOptions": {
- "paths": {
- "@/*": ["./src/*"],
- "~/*": ["./*"]
- },
- "strict": true
- },
- "exclude": ["__tests__/**/*-test.ts"],
- "extends": "expo/tsconfig.base",
- "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"]
-}
diff --git a/apps/mobile/app.json b/apps/mobile/app.json
index 662cf00..964e41e 100644
--- a/apps/mobile/app.json
+++ b/apps/mobile/app.json
@@ -18,7 +18,7 @@
"ios": {
"supportsTablet": true
},
- "name": "mobile",
+ "name": "basango",
"newArchEnabled": true,
"orientation": "portrait",
"plugins": [
@@ -36,8 +36,8 @@
}
]
],
- "scheme": "mobile",
- "slug": "mobile",
+ "scheme": "basango",
+ "slug": "basango",
"userInterfaceStyle": "automatic",
"version": "1.0.0",
"web": {
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index 0f6b069..ea11b99 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -37,7 +37,6 @@
"android": "expo start --android",
"ios": "expo start --ios",
"lint": "expo lint",
- "reset-project": "node ./scripts/reset-project.js",
"start": "expo start",
"web": "expo start --web"
},
diff --git a/apps/mobile/tsconfig.json b/apps/mobile/tsconfig.json
index 89098e8..28fa6a1 100644
--- a/apps/mobile/tsconfig.json
+++ b/apps/mobile/tsconfig.json
@@ -1,7 +1,7 @@
{
"compilerOptions": {
"paths": {
- "@/*": ["./*"]
+ "#mobile/*": ["./*"]
},
"strict": true
},
diff --git a/bun.lock b/bun.lock
index 1521cf0..a5e2eed 100644
--- a/bun.lock
+++ b/bun.lock
@@ -34,7 +34,6 @@
"ai": "^5.0.89",
"camelcase-keys": "^10.0.1",
"date-fns": "catalog:",
- "hono": "^4.10.4",
"hono-rate-limiter": "^0.4.2",
"jose": "^6.1.0",
"zod": "catalog:",
@@ -50,7 +49,6 @@
"date-fns": "catalog:",
"ioredis": "^5.8.2",
"node-html-parser": "^7.0.1",
- "tiktoken": "^1.0.22",
"turndown": "^7.2.2",
"zod": "catalog:",
},
@@ -66,10 +64,13 @@
"@basango/ui": "workspace:*",
"@date-fns/tz": "^1.4.1",
"@hookform/resolvers": "^5.2.2",
- "@tanstack/react-query": "^5.90.7",
+ "@tanstack/react-query": "^5.90.8",
"@tanstack/react-table": "^8.21.3",
"@trpc/client": "^11.7.1",
+ "@trpc/react-query": "^11.7.1",
+ "@trpc/server": "^11.7.1",
"@trpc/tanstack-react-query": "^11.7.1",
+ "client-only": "^0.0.1",
"date-fns": "^4.1.0",
"lucide-react": "^0.553.0",
"next": "catalog:",
@@ -80,6 +81,7 @@
"react-dom": "catalog:",
"react-hook-form": "^7.66.0",
"recharts": "^3.4.1",
+ "server-only": "^0.0.1",
"superjson": "^2.2.5",
"zod": "^4.1.12",
"zustand": "^5.0.8",
@@ -995,9 +997,9 @@
"@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.17", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.17", "@tailwindcss/oxide": "4.1.17", "postcss": "^8.4.41", "tailwindcss": "4.1.17" } }, "sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw=="],
- "@tanstack/query-core": ["@tanstack/query-core@5.90.7", "", {}, "sha512-6PN65csiuTNfBMXqQUxQhCNdtm1rV+9kC9YwWAIKcaxAauq3Wu7p18j3gQY3YIBJU70jT/wzCCZ2uqto/vQgiQ=="],
+ "@tanstack/query-core": ["@tanstack/query-core@5.90.8", "", {}, "sha512-4E0RP/0GJCxSNiRF2kAqE/LQkTJVlL/QNU7gIJSptaseV9HP6kOuA+N11y4bZKZxa3QopK3ZuewwutHx6DqDXQ=="],
- "@tanstack/react-query": ["@tanstack/react-query@5.90.7", "", { "dependencies": { "@tanstack/query-core": "5.90.7" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-wAHc/cgKzW7LZNFloThyHnV/AX9gTg3w5yAv0gvQHPZoCnepwqCMtzbuPbb2UvfvO32XZ46e8bPOYbfZhzVnnQ=="],
+ "@tanstack/react-query": ["@tanstack/react-query@5.90.8", "", { "dependencies": { "@tanstack/query-core": "5.90.8" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-/3b9QGzkf4rE5/miL6tyhldQRlLXzMHcySOm/2Tm2OLEFE9P1ImkH0+OviDBSvyAvtAOJocar5xhd7vxdLi3aQ=="],
"@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="],
@@ -1007,6 +1009,8 @@
"@trpc/client": ["@trpc/client@11.7.1", "", { "peerDependencies": { "@trpc/server": "11.7.1", "typescript": ">=5.7.2" } }, "sha512-uOnAjElKI892/U6aQMcBHYs3x7mme3Cvv1F87ytBL56rBvs7+DyK7r43zgaXKf13+GtPEI6ex5xjVUfyDW8XcQ=="],
+ "@trpc/react-query": ["@trpc/react-query@11.7.1", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.7.1", "@trpc/server": "11.7.1", "react": ">=18.2.0", "react-dom": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-dEHDjIqSTzO8nLlCbtiFBMBwhbSkK1QP7aYVo3nP3sYBna0b+iCtrPXdxVPCSopr9/aIqDTEh+dMRZa7yBgjfQ=="],
+
"@trpc/server": ["@trpc/server@11.7.1", "", { "peerDependencies": { "typescript": ">=5.7.2" } }, "sha512-N3U8LNLIP4g9C7LJ/sLkjuPHwqlvE3bnspzC4DEFVdvx2+usbn70P80E3wj5cjOTLhmhRiwJCSXhlB+MHfGeCw=="],
"@trpc/tanstack-react-query": ["@trpc/tanstack-react-query@11.7.1", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.7.1", "@trpc/server": "11.7.1", "react": ">=18.2.0", "react-dom": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-qc7kz4NY7CCvCxLy5HGptfKd3e3yJnWmTd6/Gkr4IY8B73PNFmcHKvLWE4kzU7r+R72MfT57TXrCEJ7ErLSMtw=="],
@@ -1663,7 +1667,7 @@
"homedir-polyfill": ["homedir-polyfill@1.0.3", "", { "dependencies": { "parse-passwd": "^1.0.0" } }, "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA=="],
- "hono": ["hono@4.10.4", "", {}, "sha512-YG/fo7zlU3KwrBL5vDpWKisLYiM+nVstBQqfr7gCPbSYURnNEP9BDxEMz8KfsDR9JX0lJWDRNc6nXX31v7ZEyg=="],
+ "hono": ["hono@4.10.5", "", {}, "sha512-h/MXuTkoAK8NG1EfDp0jI1YLf6yGdDnfkebRO2pwEh5+hE3RAJFXkCsnD0vamSiARK4ZrB6MY+o3E/hCnOyHrQ=="],
"hono-rate-limiter": ["hono-rate-limiter@0.4.2", "", { "peerDependencies": { "hono": "^4.1.1" } }, "sha512-AAtFqgADyrmbDijcRTT/HJfwqfvhalya2Zo+MgfdrMPas3zSMD8SU03cv+ZsYwRU1swv7zgVt0shwN059yzhjw=="],
diff --git a/packages/db/package.json b/packages/db/package.json
index 58d7bc5..da73c5e 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -17,9 +17,8 @@
"drizzle-kit": "^0.31.6"
},
"exports": {
- ".": "./src/index.ts",
"./client": "./src/client.ts",
- "./importer": "./src/importer/index.ts",
+ "./errors": "./src/errors.ts",
"./queries": "./src/queries/index.ts",
"./schema": "./src/schema.ts",
"./utils": "./src/utils/index.ts"
diff --git a/packages/db/src/client.ts b/packages/db/src/client.ts
index 75a0776..dc42ac1 100644
--- a/packages/db/src/client.ts
+++ b/packages/db/src/client.ts
@@ -1,8 +1,8 @@
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
-import { env } from "@/config";
-import * as schema from "@/schema";
+import { env } from "#db/config";
+import * as schema from "#db/schema";
const isDevelopment = process.env.NODE_ENV === "development";
diff --git a/packages/db/src/index.ts b/packages/db/src/index.ts
deleted file mode 100644
index 2c38372..0000000
--- a/packages/db/src/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export * from "./client";
-export * from "./constants";
-export * from "./queries";
-export * from "./schema";
-export * from "./utils";
diff --git a/packages/db/src/queries/articles.ts b/packages/db/src/queries/articles.ts
index a7648ee..b7fa76e 100644
--- a/packages/db/src/queries/articles.ts
+++ b/packages/db/src/queries/articles.ts
@@ -1,12 +1,11 @@
import { md5 } from "@basango/encryption";
-import { eq } from "drizzle-orm";
+import { count, eq } from "drizzle-orm";
import { v7 as uuidV7 } from "uuid";
-import { Database } from "@/client";
-import { ArticleMetadata, Sentiment, TokenStatistics, article } from "@/schema";
-import { computeReadingTime, computeTokenStatistics } from "@/utils/computed";
-
-import { getSourceIdByName } from "./sources";
+import { Database } from "#db/client";
+import { getSourceIdByName } from "#db/queries/sources";
+import { ArticleMetadata, Sentiment, TokenStatistics, articles } from "#db/schema";
+import { computeReadingTime, computeTokenStatistics } from "#db/utils/computed";
export type CreateArticleParams = {
title: string;
@@ -44,11 +43,11 @@ export async function createArticle(db: Database, params: CreateArticleParams) {
}
const [result] = await db
- .insert(article)
+ .insert(articles)
.values({ id: uuidV7(), ...data })
.returning({
- id: article.id,
- sourceId: article.sourceId,
+ id: articles.id,
+ sourceId: articles.sourceId,
});
if (result === undefined) {
@@ -59,7 +58,17 @@ export async function createArticle(db: Database, params: CreateArticleParams) {
}
export async function getArticleByHash(db: Database, hash: string) {
- return db.query.article.findFirst({
- where: eq(article.hash, hash),
+ return await db.query.articles.findFirst({
+ where: eq(articles.hash, hash),
});
}
+
+export async function countArticlesBySourceId(db: Database, sourceId: string) {
+ const result = await db
+ .select({ count: count(articles.id) })
+ .from(articles)
+ .where(eq(articles.sourceId, sourceId))
+ .then((res) => res[0]);
+
+ return result?.count ?? 0;
+}
diff --git a/packages/db/src/queries/sources.ts b/packages/db/src/queries/sources.ts
index 5f4eb0e..d0a7d42 100644
--- a/packages/db/src/queries/sources.ts
+++ b/packages/db/src/queries/sources.ts
@@ -2,23 +2,23 @@ import { endOfDay, startOfDay, subDays } from "date-fns";
import { eq, sql } from "drizzle-orm";
import { v7 as uuidV7 } from "uuid";
-import { Database } from "@/client";
-import { CATEGORY_SHARES_LIMIT, PUBLICATION_GRAPH_DAYS, TIMEZONE } from "@/constants";
-import { NotFoundError } from "@/errors";
-import { Credibility, article, source } from "@/schema";
+import { Database } from "#db/client";
+import { CATEGORY_SHARES_LIMIT, PUBLICATION_GRAPH_DAYS, TIMEZONE } from "#db/constants";
+import { NotFoundError } from "#db/errors";
+import { Credibility, articles, sources } from "#db/schema";
+
+import { countArticlesBySourceId } from "./articles";
export async function getSources(db: Database) {
- const rows = await db.query.source.findMany();
+ const rows = await db.query.sources.findMany();
- const data = await Promise.all(
- rows.map(async (it) => ({
- ...it,
- categoryShares: await getCategoryShares(db, it.id),
- publicationGraph: await getPublicationGraph(db, it.id),
+ return await Promise.all(
+ rows.map(async (row) => ({
+ ...row,
+ articles: await countArticlesBySourceId(db, row.id),
+ publicationGraph: await getSourcePublicationGraph(db, row.id),
})),
);
-
- return data;
}
export type CreateSourceParams = {
@@ -31,7 +31,7 @@ export type CreateSourceParams = {
export async function createSource(db: Database, params: CreateSourceParams) {
const [result] = await db
- .insert(source)
+ .insert(sources)
.values({ id: uuidV7(), ...params })
.returning();
@@ -48,14 +48,14 @@ export type UpdateSourceParams = {
export async function updateSource(db: Database, params: UpdateSourceParams) {
const [result] = await db
- .update(source)
+ .update(sources)
.set({
credibility: params.credibility,
description: params.description,
displayName: params.displayName,
name: params.name,
})
- .where(eq(source.id, params.id))
+ .where(eq(sources.id, params.id))
.returning();
if (result === undefined) {
@@ -70,39 +70,35 @@ export type DeleteSourceParams = {
};
export async function deleteSource(db: Database, params: DeleteSourceParams) {
- const [result] = await db.delete(source).where(eq(source.id, params.id)).returning();
+ const [result] = await db.delete(sources).where(eq(sources.id, params.id)).returning();
return result;
}
export async function getSourceByName(db: Database, name: string) {
- return db.query.source.findFirst({
- where: eq(source.name, name),
+ return await db.query.sources.findFirst({
+ where: eq(sources.name, name),
});
}
export async function getSourceById(db: Database, id: string) {
- const item = db.query.source.findFirst({
- where: eq(source.id, id),
+ const item = await db.query.sources.findFirst({
+ where: eq(sources.id, id),
});
if (item === undefined) {
throw new NotFoundError("Source not found");
}
- return {
- ...item,
- categoryShares: await getCategoryShares(db, id),
- publicationGraph: await getPublicationGraph(db, id),
- };
+ return item;
}
export async function getSourceIdByName(db: Database, name: string): Promise {
- const result = await db.query.source.findFirst({
+ const result = await db.query.sources.findFirst({
columns: {
id: true,
},
- where: eq(source.name, name),
+ where: eq(sources.name, name),
});
if (!result) {
@@ -137,7 +133,7 @@ export type CategoryShares = {
total: number;
};
-export async function getPublicationGraph(
+export async function getSourcePublicationGraph(
db: Database,
id: string,
days: number = PUBLICATION_GRAPH_DAYS,
@@ -145,7 +141,7 @@ export async function getPublicationGraph(
const endDate = endOfDay(new Date());
const startDate = startOfDay(subDays(endDate, days - 1));
- const data = await db.execute<{ date: string; count: number }>(sql`
+ const data = await db.execute(sql`
WITH bounds AS (
SELECT
${startDate}::timestamptz AS start_ts,
@@ -181,7 +177,7 @@ export async function getPublicationGraph(
return { items: data.rows, total: data.rows.length };
}
-async function getCategoryShares(db: Database, id: string): Promise {
+export async function getSourceCategoryShares(db: Database, id: string): Promise {
const data = await db.execute(sql`
SELECT
cat AS category,
@@ -189,9 +185,9 @@ async function getCategoryShares(db: Database, id: string): Promise(),
@@ -161,7 +161,7 @@ export const source = pgTable(
],
);
-export const article = pgTable(
+export const articles = pgTable(
"article",
{
body: text().notNull(),
@@ -205,7 +205,7 @@ export const article = pgTable(
uniqueIndex("unq_article_hash").using("btree", table.hash.asc().nullsLast()),
foreignKey({
columns: [table.sourceId],
- foreignColumns: [source.id],
+ foreignColumns: [sources.id],
name: "fk_article_source_id",
}).onDelete("cascade"),
check("chk_article_reading_time", sql`(reading_time >= 0)`),
@@ -220,7 +220,7 @@ export const article = pgTable(
],
);
-export const bookmark = pgTable(
+export const bookmarks = pgTable(
"bookmark",
{
createdAt: timestamp("created_at").defaultNow().notNull(),
@@ -244,13 +244,13 @@ export const bookmark = pgTable(
),
foreignKey({
columns: [table.userId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_bookmark_user_id",
}).onDelete("cascade"),
],
);
-export const bookmarkArticle = pgTable(
+export const bookmarkArticles = pgTable(
"bookmark_article",
{
articleId: uuid("article_id").notNull(),
@@ -261,18 +261,18 @@ export const bookmarkArticle = pgTable(
index("idx_bookmark_article_bookmark_id").using("btree", table.bookmarkId.asc().nullsLast()),
foreignKey({
columns: [table.bookmarkId],
- foreignColumns: [bookmark.id],
+ foreignColumns: [bookmarks.id],
name: "fk_bookmark_article_bookmark_id",
}).onDelete("cascade"),
foreignKey({
columns: [table.articleId],
- foreignColumns: [article.id],
+ foreignColumns: [articles.id],
name: "fk_bookmark_article_article_id",
}).onDelete("cascade"),
],
);
-export const loginAttempt = pgTable(
+export const loginAttempts = pgTable(
"login_attempt",
{
createdAt: timestamp("created_at").defaultNow().notNull(),
@@ -287,7 +287,7 @@ export const loginAttempt = pgTable(
),
foreignKey({
columns: [table.userId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_login_attempt_user_id",
}).onDelete("cascade"),
],
@@ -312,13 +312,13 @@ export const loginHistory = pgTable(
index("idx_login_history_ip_address").using("btree", table.ipAddress.asc().nullsLast()),
foreignKey({
columns: [table.userId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_login_history_user_id",
}).onDelete("cascade"),
],
);
-export const verificationToken = pgTable(
+export const verificationTokens = pgTable(
"verification_token",
{
createdAt: timestamp("created_at").defaultNow().notNull(),
@@ -337,13 +337,13 @@ export const verificationToken = pgTable(
.where(sql`${table.token} IS NOT NULL`),
foreignKey({
columns: [table.userId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_verification_token_user_id",
}).onDelete("cascade"),
],
);
-export const followedSource = pgTable(
+export const followedSources = pgTable(
"followed_source",
{
createdAt: timestamp("created_at").defaultNow().notNull(),
@@ -366,18 +366,18 @@ export const followedSource = pgTable(
),
foreignKey({
columns: [table.followerId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_followed_source_follower_id",
}).onDelete("cascade"),
foreignKey({
columns: [table.sourceId],
- foreignColumns: [source.id],
+ foreignColumns: [sources.id],
name: "fk_followed_source_source_id",
}).onDelete("cascade"),
],
);
-export const comment = pgTable(
+export const comments = pgTable(
"comment",
{
articleId: uuid("article_id").notNull(),
@@ -398,18 +398,18 @@ export const comment = pgTable(
),
foreignKey({
columns: [table.userId],
- foreignColumns: [user.id],
+ foreignColumns: [users.id],
name: "fk_comment_user_id",
}).onDelete("cascade"),
foreignKey({
columns: [table.articleId],
- foreignColumns: [article.id],
+ foreignColumns: [articles.id],
name: "fk_comment_article_id",
}).onDelete("cascade"),
],
);
-export const refreshToken = pgTable(
+export const refreshTokens = pgTable(
"refresh_token",
{
id: uuid().primaryKey().notNull(),
@@ -428,87 +428,87 @@ export const refreshToken = pgTable(
/* Relations */
/* -------------------------------------------------------------------------- */
-export const bookmarkRelations = relations(bookmark, ({ one, many }) => ({
- bookmarkArticles: many(bookmarkArticle),
- user: one(user, {
- fields: [bookmark.userId],
- references: [user.id],
+export const bookmarkRelations = relations(bookmarks, ({ one, many }) => ({
+ bookmarkArticles: many(bookmarkArticles),
+ user: one(users, {
+ fields: [bookmarks.userId],
+ references: [users.id],
}),
}));
-export const userRelations = relations(user, ({ many }) => ({
- bookmarks: many(bookmark),
- comments: many(comment),
- followedSources: many(followedSource),
- loginAttempts: many(loginAttempt),
+export const userRelations = relations(users, ({ many }) => ({
+ bookmarks: many(bookmarks),
+ comments: many(comments),
+ followedSources: many(followedSources),
+ loginAttempts: many(loginAttempts),
loginHistories: many(loginHistory),
- verificationTokens: many(verificationToken),
+ verificationTokens: many(verificationTokens),
}));
-export const loginAttemptRelations = relations(loginAttempt, ({ one }) => ({
- user: one(user, {
- fields: [loginAttempt.userId],
- references: [user.id],
+export const loginAttemptRelations = relations(loginAttempts, ({ one }) => ({
+ user: one(users, {
+ fields: [loginAttempts.userId],
+ references: [users.id],
}),
}));
export const loginHistoryRelations = relations(loginHistory, ({ one }) => ({
- user: one(user, {
+ user: one(users, {
fields: [loginHistory.userId],
- references: [user.id],
+ references: [users.id],
}),
}));
-export const verificationTokenRelations = relations(verificationToken, ({ one }) => ({
- user: one(user, {
- fields: [verificationToken.userId],
- references: [user.id],
+export const verificationTokenRelations = relations(verificationTokens, ({ one }) => ({
+ user: one(users, {
+ fields: [verificationTokens.userId],
+ references: [users.id],
}),
}));
-export const followedSourceRelations = relations(followedSource, ({ one }) => ({
- source: one(source, {
- fields: [followedSource.sourceId],
- references: [source.id],
+export const followedSourceRelations = relations(followedSources, ({ one }) => ({
+ source: one(sources, {
+ fields: [followedSources.sourceId],
+ references: [sources.id],
}),
- user: one(user, {
- fields: [followedSource.followerId],
- references: [user.id],
+ user: one(users, {
+ fields: [followedSources.followerId],
+ references: [users.id],
}),
}));
-export const sourceRelations = relations(source, ({ many }) => ({
- articles: many(article),
- followedSources: many(followedSource),
+export const sourceRelations = relations(sources, ({ many }) => ({
+ articles: many(articles),
+ followedSources: many(followedSources),
}));
-export const commentRelations = relations(comment, ({ one }) => ({
- article: one(article, {
- fields: [comment.articleId],
- references: [article.id],
+export const commentRelations = relations(comments, ({ one }) => ({
+ article: one(articles, {
+ fields: [comments.articleId],
+ references: [articles.id],
}),
- user: one(user, {
- fields: [comment.userId],
- references: [user.id],
+ user: one(users, {
+ fields: [comments.userId],
+ references: [users.id],
}),
}));
-export const articleRelations = relations(article, ({ one, many }) => ({
- bookmarkArticles: many(bookmarkArticle),
- comments: many(comment),
- source: one(source, {
- fields: [article.sourceId],
- references: [source.id],
+export const articleRelations = relations(articles, ({ one, many }) => ({
+ bookmarkArticles: many(bookmarkArticles),
+ comments: many(comments),
+ source: one(sources, {
+ fields: [articles.sourceId],
+ references: [sources.id],
}),
}));
-export const bookmarkArticleRelations = relations(bookmarkArticle, ({ one }) => ({
- article: one(article, {
- fields: [bookmarkArticle.articleId],
- references: [article.id],
+export const bookmarkArticleRelations = relations(bookmarkArticles, ({ one }) => ({
+ article: one(articles, {
+ fields: [bookmarkArticles.articleId],
+ references: [articles.id],
}),
- bookmark: one(bookmark, {
- fields: [bookmarkArticle.bookmarkId],
- references: [bookmark.id],
+ bookmark: one(bookmarks, {
+ fields: [bookmarkArticles.bookmarkId],
+ references: [bookmarks.id],
}),
}));
diff --git a/packages/db/src/synchronizers/data.ts b/packages/db/src/synchronizers/data.ts
index 07e365e..09c4094 100644
--- a/packages/db/src/synchronizers/data.ts
+++ b/packages/db/src/synchronizers/data.ts
@@ -3,8 +3,8 @@
import { RowDataPacket } from "mysql2/promise";
import { Pool, PoolClient } from "pg";
-import { env } from "@/config";
-import { computeReadingTime } from "@/utils/computed";
+import { env } from "#db/config";
+import { computeReadingTime } from "#db/utils/computed";
type SourceOptions = {
host: string;
diff --git a/packages/db/src/synchronizers/tokens.ts b/packages/db/src/synchronizers/tokens.ts
index b28a941..ad11358 100644
--- a/packages/db/src/synchronizers/tokens.ts
+++ b/packages/db/src/synchronizers/tokens.ts
@@ -2,8 +2,8 @@
import { Pool } from "pg";
-import { env } from "@/config";
-import { computeTokenStatistics } from "@/utils/computed";
+import { env } from "#db/config";
+import { computeTokenStatistics } from "#db/utils/computed";
type ArticleRow = {
id: string;
diff --git a/packages/db/src/utils/computed.ts b/packages/db/src/utils/computed.ts
index b020956..2591a34 100644
--- a/packages/db/src/utils/computed.ts
+++ b/packages/db/src/utils/computed.ts
@@ -1,6 +1,6 @@
import { TiktokenEncoding, get_encoding } from "tiktoken";
-import { TokenStatistics } from "@/schema";
+import { TokenStatistics } from "#db/schema";
/**
* Count the number of tokens in the given text using the specified encoding.
diff --git a/packages/db/src/utils/pagination.ts b/packages/db/src/utils/pagination.ts
index d96cacc..9b3ef20 100644
--- a/packages/db/src/utils/pagination.ts
+++ b/packages/db/src/utils/pagination.ts
@@ -4,7 +4,7 @@ import {
PAGINATION_DEFAULT_LIMIT,
PAGINATION_DEFAULT_PAGE,
PAGINATION_MAX_LIMIT,
-} from "@/constants";
+} from "#db/constants";
export interface PageRequest {
page?: number;
@@ -83,7 +83,7 @@ export function decodeCursor(cursor?: string | null): CursorPayload | null {
const decoded = Buffer.from(cursor, "base64").toString("utf8");
const payload = JSON.parse(decoded) as CursorPayload;
- if (!payload || typeof payload.id !== "string" || payload.id.length === 0) {
+ if (!payload || payload.id.length === 0) {
return null;
}
diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json
index 8f5ca5d..3df34ff 100644
--- a/packages/db/tsconfig.json
+++ b/packages/db/tsconfig.json
@@ -2,7 +2,7 @@
"compilerOptions": {
"baseUrl": ".",
"paths": {
- "@/*": ["./src/*"]
+ "#db/*": ["./src/*"]
}
},
"exclude": ["node_modules"],
diff --git a/turbo.json b/turbo.json
index 13efb87..262a57f 100644
--- a/turbo.json
+++ b/turbo.json
@@ -16,6 +16,10 @@
],
"passThroughEnv": []
},
+ "clean": {
+ "cache": false,
+ "outputs": []
+ },
"dev": {
"cache": false,
"inputs": ["$TURBO_DEFAULT$", ".env"],