Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/mobile/.env.template
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
EXPO_PUBLIC_PROJECT_ID=

EXPO_PUBLIC_APP_ID=
EXPO_PUBLIC_IOS_APP_STORE_ID=
EXPO_PUBLIC_APP_OWNER=
EXPO_PUBLIC_APP_SCHEME=
EXPO_PUBLIC_APP_NAME=
Expand All @@ -9,3 +10,5 @@ EXPO_PUBLIC_IS_INTERNAL_RELEASE=
SENTRY_DSN=
AMPLITUDE_API_KEY_DEV=
AMPLITUDE_API_KEY_PROD=
SUPABASE_URL=
SUPABASE_PUBLISHABLE_KEY=
6 changes: 6 additions & 0 deletions apps/mobile/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ const createConfig = (): Omit<ExpoConfig, 'extra'> & { extra: { eas: EASConfig }
apiKeyDev: process.env.AMPLITUDE_API_KEY_DEV,
apiKeyProd: process.env.AMPLITUDE_API_KEY_PROD,
},
supabase: {
url: process.env.SUPABASE_URL,
publishableKey: process.env.SUPABASE_PUBLISHABLE_KEY,
},
env: appEnv.current,
googleIosClientId: appEnv.select({
default: process.env.GOOGLE_IOS_CLIENT_ID_DEV,
Expand Down Expand Up @@ -47,6 +51,7 @@ const createConfig = (): Omit<ExpoConfig, 'extra'> & { extra: { eas: EASConfig }
},
ios: {
bundleIdentifier: appId,
appStoreUrl: `https://apps.apple.com/app/id${process.env.EXPO_PUBLIC_IOS_APP_STORE_ID}`,
supportsTablet: false,
buildNumber: appEnv.select({
default: '18',
Expand All @@ -66,6 +71,7 @@ const createConfig = (): Omit<ExpoConfig, 'extra'> & { extra: { eas: EASConfig }
},
android: {
package: appId,
playStoreUrl: `https://play.google.com/store/apps/details?id=${appId}`,
versionCode: appEnv.select({
default: 15,
production: 36,
Expand Down
3 changes: 3 additions & 0 deletions apps/mobile/app/_layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { useNetworkConnection } from '@open-webui-react-native/shared/features/n
import { analyticsService } from '@open-webui-react-native/shared/utils/analytics-service';
import { constants, LanguageCode } from '@open-webui-react-native/shared/utils/config';
import { setupReactotron } from '@open-webui-react-native/shared/utils/reactotron';
import { supabaseService } from '@open-webui-react-native/shared/utils/supabase-service';
import { i18n, setLanguage } from '@ronas-it/react-native-common-modules/i18n';
import * as Sentry from '@sentry/react-native';
import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';
Expand All @@ -32,6 +33,7 @@ import { SafeAreaProvider } from 'react-native-safe-area-context';
import '../global.css';
import 'reflect-metadata';
import 'expo-dev-client';
import 'react-native-url-polyfill/auto';

export { ErrorBoundary } from 'expo-router';

Expand Down Expand Up @@ -120,6 +122,7 @@ const useLanguage = setLanguage(translations, constants.defaultLocale);

setupReactotron('open-web-ui');
analyticsService.init();
supabaseService.init();

// Prevent the splash screen from auto-hiding before asset loading is complete.
SplashScreen.preventAutoHideAsync();
Expand Down
4 changes: 4 additions & 0 deletions apps/mobile/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,13 @@
"@ronas-it/rtkq-entity-api": "^1.1.1",
"@sentry/react-native": "~7.11.0",
"@shopify/flash-list": "2.0.2",
"@supabase/supabase-js": "^2.112.3",
"@tanstack/react-query": "^5.80.6",
"@tanstack/react-query-persist-client": "^5.87.4",
"axios-observable": "^2.1.0",
"babel-plugin-module-resolver": "^5.0.2",
"babel-plugin-react-compiler": "^19.0.0-beta-af1b7da-20250417",
"base64-arraybuffer": "^1.0.2",
"class-transformer": "^0.5.1",
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
Expand Down Expand Up @@ -74,6 +76,7 @@
"expo-speech": "~57.0.1",
"expo-splash-screen": "~57.0.5",
"expo-status-bar": "~57.0.1",
"expo-store-review": "~57.0.1",
"expo-updates": "~57.0.10",
"html-entities": "^2.6.0",
"i18n-js": "^4.5.1",
Expand Down Expand Up @@ -110,6 +113,7 @@
"react-native-svg": "15.15.4",
"react-native-svg-transformer": "~1.5.0",
"react-native-toast-message": "^2.3.0",
"react-native-url-polyfill": "^4.0.0",
"react-native-uuid": "^2.0.3",
"react-native-web": "^0.21.0",
"react-native-webview": "13.16.1",
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Avatar",
"TEXT_CHANGE_PASSWORD": "Passwort ändern",
"TEXT_LOGOUT": "Abmelden",
"TEXT_CONTACT_SUPPORT": "Support kontaktieren",
"TEXT_REPORT_A_BUG": "Fehler melden",
"TEXT_RATE_APP": "App bewerten",
"TEXT_ARCHIVED_CHATS": "Archivierte Chats",
"TEXT_EXPORT_ALL_CHATS": "Alle Chats exportieren",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "Es gibt keine Modelle."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Support kontaktieren",
"TEXT_MESSAGE_PLACEHOLDER": "Ihre Nachricht",
"BUTTON_ATTACH": "Screenshots oder Video anhängen"
"TEXT_REPORT_BUG": "Fehler melden",
"TEXT_YOUR_MESSAGE": "Ihre Nachricht",
"TEXT_MESSAGE_SENT": "Vielen Dank für Ihr Feedback! Ihre Nachricht wurde erfolgreich gesendet",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Screenshots oder Video anhängen",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "Sie können maximal {{count}} Dateien anhängen"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Sprache"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Avatar",
"TEXT_CHANGE_PASSWORD": "Change password",
"TEXT_LOGOUT": "Logout",
"TEXT_CONTACT_SUPPORT": "Contact support",
"TEXT_REPORT_A_BUG": "Report a bug",
"TEXT_RATE_APP": "Rate app",
"TEXT_ARCHIVED_CHATS": "Archived chats",
"TEXT_EXPORT_ALL_CHATS": "Export all chats",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "There are no models."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Contact support",
"TEXT_MESSAGE_PLACEHOLDER": "Your message",
"BUTTON_ATTACH": "Attach screenshots or video"
"TEXT_REPORT_BUG": "Report a bug",
"TEXT_YOUR_MESSAGE": "Your message",
"TEXT_MESSAGE_SENT": "Thank you for your feedback! Your message has been sent successfully",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Attach screenshots or video",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "You can attach up to {{count}} files"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Language"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Avatar",
"TEXT_CHANGE_PASSWORD": "Cambiar contraseña",
"TEXT_LOGOUT": "Cerrar sesión",
"TEXT_CONTACT_SUPPORT": "Contactar con soporte",
"TEXT_REPORT_A_BUG": "Informar un error",
"TEXT_RATE_APP": "Valorar la aplicación",
"TEXT_ARCHIVED_CHATS": "Chats archivados",
"TEXT_EXPORT_ALL_CHATS": "Exportar todos los chats",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "No hay modelos."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Contactar con soporte",
"TEXT_MESSAGE_PLACEHOLDER": "Tu mensaje",
"BUTTON_ATTACH": "Adjuntar capturas de pantalla o vídeo"
"TEXT_REPORT_BUG": "Informar un error",
"TEXT_YOUR_MESSAGE": "Tu mensaje",
"TEXT_MESSAGE_SENT": "¡Gracias por tus comentarios! Tu mensaje se ha enviado correctamente",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Adjuntar capturas de pantalla o video",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "Puedes adjuntar hasta {{count}} archivos"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Idioma"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Avatar",
"TEXT_CHANGE_PASSWORD": "Modifier le mot de passe",
"TEXT_LOGOUT": "Déconnexion",
"TEXT_CONTACT_SUPPORT": "Contacter le support",
"TEXT_REPORT_A_BUG": "Signaler un bug",
"TEXT_RATE_APP": "Noter l'application",
"TEXT_ARCHIVED_CHATS": "Discussions archivées",
"TEXT_EXPORT_ALL_CHATS": "Exporter toutes les discussions",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "Il n'y a aucun modèle."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Contacter le support",
"TEXT_MESSAGE_PLACEHOLDER": "Votre message",
"BUTTON_ATTACH": "Joindre des captures d'écran ou une vidéo"
"TEXT_REPORT_BUG": "Signaler un bug",
"TEXT_YOUR_MESSAGE": "Votre message",
"TEXT_MESSAGE_SENT": "Merci pour votre retour ! Votre message a été envoyé avec succès",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Joindre des captures d'écran ou une vidéo",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "Vous pouvez joindre jusqu'à {{count}} fichiers"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Langue"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "アバター",
"TEXT_CHANGE_PASSWORD": "パスワードを変更",
"TEXT_LOGOUT": "ログアウト",
"TEXT_CONTACT_SUPPORT": "サポートに問い合わせる",
"TEXT_REPORT_A_BUG": "不具合を報告",
"TEXT_RATE_APP": "アプリを評価",
"TEXT_ARCHIVED_CHATS": "アーカイブ済みチャット",
"TEXT_EXPORT_ALL_CHATS": "すべてのチャットをエクスポート",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "モデルがありません。"
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "サポートに問い合わせる",
"TEXT_MESSAGE_PLACEHOLDER": "メッセージ",
"BUTTON_ATTACH": "スクリーンショットまたは動画を添付"
"TEXT_REPORT_BUG": "不具合を報告",
"TEXT_YOUR_MESSAGE": "メッセージ",
"TEXT_MESSAGE_SENT": "フィードバックをありがとうございます!メッセージが正常に送信されました",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "スクリーンショットまたは動画を添付",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "添付できるファイルは最大{{count}}件までです"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "言語"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Avatar",
"TEXT_CHANGE_PASSWORD": "Alterar senha",
"TEXT_LOGOUT": "Sair",
"TEXT_CONTACT_SUPPORT": "Falar com o suporte",
"TEXT_REPORT_A_BUG": "Reportar um bug",
"TEXT_RATE_APP": "Avaliar o aplicativo",
"TEXT_ARCHIVED_CHATS": "Chats arquivados",
"TEXT_EXPORT_ALL_CHATS": "Exportar todos os chats",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "Não há modelos."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Falar com o suporte",
"TEXT_MESSAGE_PLACEHOLDER": "Sua mensagem",
"BUTTON_ATTACH": "Anexar capturas de tela ou vídeo"
"TEXT_REPORT_BUG": "Reportar um bug",
"TEXT_YOUR_MESSAGE": "Sua mensagem",
"TEXT_MESSAGE_SENT": "Obrigado pelo seu feedback! Sua mensagem foi enviada com sucesso",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Anexar capturas de tela ou vídeo",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "Você pode anexar até {{count}} arquivos"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Idioma"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "Аватар",
"TEXT_CHANGE_PASSWORD": "Изменить пароль",
"TEXT_LOGOUT": "Выйти",
"TEXT_CONTACT_SUPPORT": "Связаться с поддержкой",
"TEXT_REPORT_A_BUG": "Сообщить об ошибке",
"TEXT_RATE_APP": "Оценить приложение",
"TEXT_ARCHIVED_CHATS": "Архивные чаты",
"TEXT_EXPORT_ALL_CHATS": "Экспортировать все чаты",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "Моделей нет."
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "Связаться с поддержкой",
"TEXT_MESSAGE_PLACEHOLDER": "Ваше сообщение",
"BUTTON_ATTACH": "Прикрепить скриншоты или видео"
"TEXT_REPORT_BUG": "Сообщить об ошибке",
"TEXT_YOUR_MESSAGE": "Введите сообщение",
"TEXT_MESSAGE_SENT": "Спасибо за отзыв! Ваше сообщение успешно отправлено",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "Прикрепить скриншот или видео",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "Можно прикрепить не более {{count}} вложений"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "Язык"
Expand Down
10 changes: 6 additions & 4 deletions i18n/mobile/app/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"TEXT_AVATAR": "头像",
"TEXT_CHANGE_PASSWORD": "修改密码",
"TEXT_LOGOUT": "退出登录",
"TEXT_CONTACT_SUPPORT": "联系客服",
"TEXT_REPORT_A_BUG": "报告错误",
"TEXT_RATE_APP": "为应用评分",
"TEXT_ARCHIVED_CHATS": "已归档聊天",
"TEXT_EXPORT_ALL_CHATS": "导出所有聊天",
Expand Down Expand Up @@ -55,9 +55,11 @@
"TEXT_NO_MODELS": "暂无模型。"
},
"CONTACT_SUPPORT_SHEET": {
"TEXT_TITLE": "联系客服",
"TEXT_MESSAGE_PLACEHOLDER": "您的留言",
"BUTTON_ATTACH": "附加截图或视频"
"TEXT_REPORT_BUG": "报告错误",
"TEXT_YOUR_MESSAGE": "您的消息",
"TEXT_MESSAGE_SENT": "感谢您的反馈!您的消息已成功发送",
"BUTTON_ATTACH_SCREENSHOTS_OR_VIDEO": "添加截图或视频",
"TEXT_ATTACHMENTS_LIMIT_REACHED": "最多只能添加 {{count}} 个附件"
},
"LANGUAGE_SHEET": {
"TEXT_TITLE": "语言"
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/de.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Bitte geben Sie Ihr Passwort ein",
"TEXT_INVALID_URL": "Bitte geben Sie eine gültige Server-URL ein, z. B. https://your.domain oder http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Bitte geben Sie einen Ordnernamen ein",
"TEXT_REQUIRED_MESSAGE": "Bitte geben Sie eine Nachricht ein",
"TEXT_REQUIRED_PROFILE_NAME": "Bitte geben Sie einen Profilnamen ein",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Bitte geben Sie Ihr aktuelles Passwort ein",
"TEXT_REQUIRED_NEW_PASSWORD": "Bitte geben Sie ein neues Passwort ein",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Please enter your password",
"TEXT_INVALID_URL": "Please enter a valid server URL, e.g. https://your.domain or http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Please enter a folder name",
"TEXT_REQUIRED_MESSAGE": "Please enter a message",
"TEXT_REQUIRED_PROFILE_NAME": "Please enter a profile name",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Please enter your current password",
"TEXT_REQUIRED_NEW_PASSWORD": "Please enter a new password",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Introduce tu contraseña",
"TEXT_INVALID_URL": "Introduce una URL de servidor válida, p. ej. https://your.domain o http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Introduce un nombre de carpeta",
"TEXT_REQUIRED_MESSAGE": "Introduce un mensaje",
"TEXT_REQUIRED_PROFILE_NAME": "Introduce un nombre de perfil",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Introduce tu contraseña actual",
"TEXT_REQUIRED_NEW_PASSWORD": "Introduce una nueva contraseña",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/fr.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Veuillez saisir votre mot de passe",
"TEXT_INVALID_URL": "Veuillez saisir une URL de serveur valide, ex. https://your.domain ou http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Veuillez saisir un nom de dossier",
"TEXT_REQUIRED_MESSAGE": "Veuillez saisir un message",
"TEXT_REQUIRED_PROFILE_NAME": "Veuillez saisir un nom de profil",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Veuillez saisir votre mot de passe actuel",
"TEXT_REQUIRED_NEW_PASSWORD": "Veuillez saisir un nouveau mot de passe",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/ja.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "パスワードを入力してください",
"TEXT_INVALID_URL": "有効なサーバー URL を入力してください(例: https://your.domain または http://192.168.1.10:3000)",
"TEXT_REQUIRED_FOLDER_NAME": "フォルダ名を入力してください",
"TEXT_REQUIRED_MESSAGE": "メッセージを入力してください",
"TEXT_REQUIRED_PROFILE_NAME": "プロフィール名を入力してください",
"TEXT_REQUIRED_CURRENT_PASSWORD": "現在のパスワードを入力してください",
"TEXT_REQUIRED_NEW_PASSWORD": "新しいパスワードを入力してください",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Digite sua senha",
"TEXT_INVALID_URL": "Digite uma URL de servidor válida, ex.: https://your.domain ou http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Digite um nome de pasta",
"TEXT_REQUIRED_MESSAGE": "Digite uma mensagem",
"TEXT_REQUIRED_PROFILE_NAME": "Digite um nome de perfil",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Digite sua senha atual",
"TEXT_REQUIRED_NEW_PASSWORD": "Digite uma nova senha",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "Введите пароль",
"TEXT_INVALID_URL": "Введите корректный URL сервера, напр. https://your.domain или http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "Введите название папки",
"TEXT_REQUIRED_MESSAGE": "Введите сообщение",
"TEXT_REQUIRED_PROFILE_NAME": "Введите имя профиля",
"TEXT_REQUIRED_CURRENT_PASSWORD": "Введите текущий пароль",
"TEXT_REQUIRED_NEW_PASSWORD": "Введите новый пароль",
Expand Down
1 change: 1 addition & 0 deletions i18n/mobile/shared/zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"TEXT_REQUIRED_PASSWORD": "请输入您的密码",
"TEXT_INVALID_URL": "请输入有效的服务器 URL,例如 https://your.domain 或 http://192.168.1.10:3000",
"TEXT_REQUIRED_FOLDER_NAME": "请输入文件夹名称",
"TEXT_REQUIRED_MESSAGE": "请输入消息内容",
"TEXT_REQUIRED_PROFILE_NAME": "请输入个人资料名称",
"TEXT_REQUIRED_CURRENT_PASSWORD": "请输入当前密码",
"TEXT_REQUIRED_NEW_PASSWORD": "请输入新密码",
Expand Down
17 changes: 14 additions & 3 deletions libs/mobile/chat/features/chat/src/lib/component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useSelector } from '@legendapp/state/react';
import { useTranslation } from '@ronas-it/react-native-common-modules/i18n';
import dayjs from 'dayjs';
import { delay } from 'lodash-es';
import React, { Fragment, ReactElement, useEffect, useMemo, useState } from 'react';
import React, { Fragment, ReactElement, useEffect, useMemo, useRef, useState } from 'react';
import { useForm } from 'react-hook-form';
import { InteractionManager } from 'react-native';
import { EditMessageInput } from '@open-webui-react-native/mobile/chat/features/edit-message-input';
Expand All @@ -28,7 +28,7 @@ import { AnalyticsEvent, analyticsService } from '@open-webui-react-native/share
import { ToastService } from '@open-webui-react-native/shared/utils/toast-service';
import { useAppStateChange } from '@open-webui-react-native/shared/utils/use-app-state-change';
import { ActiveInputMode } from './enums';
import { patchNewChat } from './utils';
import { patchNewChat, requestStoreReview } from './utils';

const LazyChatMessagesList = React.lazy(() => import('./components/messages-list/component'));

Expand Down Expand Up @@ -85,7 +85,11 @@ export function Chat({ chatId, selectedModelId, isNewChat, resetToChatsList }: C
const history = chat?.chat.history;
// NOTE: chat.messages is a legacy snapshot the backend no longer maintains, so the current branch is derived from history
const messages = useMemo(() => (history ? createMessagesList(history, history.currentId) : []), [history]);
const isResponseGenerating = !history?.messages[history.currentId].done;
const currentMessage = history?.messages[history.currentId];
const isResponseGenerating = !currentMessage?.done;
const isAssistantMessage = currentMessage?.role === Role.ASSISTANT;

const firstMessageGeneratedRef = useRef(false);

const shouldHideContent = isLoading || isRefetching || !isMessagesListLoaded || !selectedModelId;

Expand Down Expand Up @@ -208,6 +212,13 @@ export function Chat({ chatId, selectedModelId, isNewChat, resetToChatsList }: C
}
}, [isNewChat, isSuccess, chatId]);

useEffect(() => {
if (isNewChat && !firstMessageGeneratedRef.current && isAssistantMessage && currentMessage.done) {
firstMessageGeneratedRef.current = true;
requestStoreReview(chatId);
}
}, [isNewChat, chatId, currentMessage?.done, isAssistantMessage]);

return (
<Fragment>
{shouldHideContent && (
Expand Down
Loading
Loading