diff --git a/src/languages/de.ts b/src/languages/de.ts index 108a5d30b9ef5..fdcfea72c421e 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -843,6 +843,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Einklappen', expand: 'Erweitern', + askConciergeToCreate: 'Bitten Sie Concierge AI, eine Ausgabe zu erstellen ...', + askConciergeToUpdate: 'Bitte Concierge AI bitten, eine Ausgabe zu aktualisieren...', + askConciergeToCorrect: 'Bitten Sie Concierge AI, eine Ausgabe zu korrigieren...', + addColleagueWithMention: 'Füge eine:n Kolleg:in mit einer „@“-Erwähnung hinzu …', }, reportActionContextMenu: { copyMessage: 'Nachricht kopieren', diff --git a/src/languages/en.ts b/src/languages/en.ts index 3de61f20b9c13..74e81f887ac65 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -822,6 +822,10 @@ const translations = { addAttachment: 'Add attachment', writeSomething: 'Write something...', blockedFromConcierge: 'Communication is barred', + askConciergeToCreate: 'Ask Concierge AI to create an expense...', + askConciergeToUpdate: 'Ask Concierge AI to update an expense...', + askConciergeToCorrect: 'Ask Concierge AI to correct an expense...', + addColleagueWithMention: 'Add a colleague with an "@" mention...', fileUploadFailed: 'Upload failed. File is not supported.', localTime: ({user, time}: LocalTimeParams) => `It's ${time} for ${user}`, edited: '(edited)', diff --git a/src/languages/es.ts b/src/languages/es.ts index 1cd7819266187..1364da4925b8b 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -554,6 +554,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Colapsar', expand: 'Expandir', + askConciergeToCreate: 'Pídele a Concierge AI que cree un gasto...', + askConciergeToUpdate: 'Pídele a Concierge AI que actualice un gasto...', + askConciergeToCorrect: 'Pídele a Concierge AI que corrija un gasto...', + addColleagueWithMention: 'Añade a un colega con una mención "@"...', }, reportActionContextMenu: { copyMessage: 'Copiar mensaje', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index 4fd2a793de579..7cdd77cddd406 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -845,6 +845,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Réduire', expand: 'Développer', + askConciergeToCreate: 'Demander à Concierge AI de créer une dépense...', + askConciergeToUpdate: 'Demander à Concierge AI de mettre à jour une dépense...', + askConciergeToCorrect: 'Demander à Concierge AI de corriger une dépense...', + addColleagueWithMention: 'Ajoutez un collègue avec une mention « @ »...', }, reportActionContextMenu: { copyMessage: 'Copier le message', diff --git a/src/languages/it.ts b/src/languages/it.ts index 0ca2e9bcd8035..2dced72d4c38a 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -843,6 +843,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Comprimi', expand: 'Espandi', + askConciergeToCreate: 'Chiedi a Concierge AI di creare una spesa...', + askConciergeToUpdate: 'Chiedi a Concierge AI di aggiornare una spesa...', + askConciergeToCorrect: 'Chiedi a Concierge AI di correggere una spesa...', + addColleagueWithMention: 'Aggiungi un collega con una menzione "@"...', }, reportActionContextMenu: { copyMessage: 'Copia messaggio', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 4fa292b0406ef..67750f0537ef9 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -841,6 +841,10 @@ const translations: TranslationDeepObject = { emoji: '絵文字', collapse: '折りたたむ', expand: '展開', + askConciergeToCreate: 'Concierge AI に経費を作成するよう依頼…', + askConciergeToUpdate: 'Concierge AI に経費の更新を依頼する…', + askConciergeToCorrect: 'Concierge AI に経費の修正を依頼する…', + addColleagueWithMention: '「@」メンションで同僚を追加…', }, reportActionContextMenu: { copyMessage: 'メッセージをコピー', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index e097d4979976f..f9c19eada97e6 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -843,6 +843,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Samenvouwen', expand: 'Uitvouwen', + askConciergeToCreate: 'Vraag Concierge AI om een uitgave aan te maken...', + askConciergeToUpdate: 'Vraag Concierge AI om een uitgave bij te werken...', + askConciergeToCorrect: 'Vraag Concierge AI om een uitgave te corrigeren...', + addColleagueWithMention: 'Voeg een collega toe met een “@”-vermelding...', }, reportActionContextMenu: { copyMessage: 'Bericht kopiëren', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index e8070caffacba..f6552fc10cd7a 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -842,6 +842,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Zwiń', expand: 'Rozwiń', + askConciergeToCreate: 'Poproś Concierge AI o utworzenie wydatku…', + askConciergeToUpdate: 'Poproś Concierge AI o zaktualizowanie wydatku...', + askConciergeToCorrect: 'Poproś Concierge AI o skorygowanie wydatku...', + addColleagueWithMention: 'Dodaj współpracownika, wspominając go za pomocą „@”…', }, reportActionContextMenu: { copyMessage: 'Kopiuj wiadomość', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 288a27422dd01..94bac6bbd35d1 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -842,6 +842,10 @@ const translations: TranslationDeepObject = { emoji: 'Emoji', collapse: 'Recolher', expand: 'Expandir', + askConciergeToCreate: 'Peça para o Concierge AI criar uma despesa...', + askConciergeToUpdate: 'Peça ao Concierge AI para atualizar uma despesa...', + askConciergeToCorrect: 'Peça à Concierge AI para corrigir uma despesa...', + addColleagueWithMention: 'Adicione um colega com uma menção "@"...', }, reportActionContextMenu: { copyMessage: 'Copiar mensagem', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d274911e3f15b..3b426ad4da1fa 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -836,6 +836,10 @@ const translations: TranslationDeepObject = { emoji: '表情符号', collapse: '折叠', expand: '展开', + askConciergeToCreate: '让 Concierge AI 创建一笔报销…', + askConciergeToUpdate: '让 Concierge AI 更新一笔报销…', + askConciergeToCorrect: '让 Concierge AI 更正一笔报销…', + addColleagueWithMention: '使用“@”提及来添加同事…', }, reportActionContextMenu: { copyMessage: '复制消息', diff --git a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx index 113198869b8e6..d04a33b53f7a6 100644 --- a/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx +++ b/src/pages/home/report/ReportActionCompose/ReportActionCompose.tsx @@ -13,6 +13,7 @@ import DualDropZone from '@components/DropZone/DualDropZone'; import EmojiPickerButton from '@components/EmojiPicker/EmojiPickerButton'; import ExceededCommentLength from '@components/ExceededCommentLength'; import ImportedStateIndicator from '@components/ImportedStateIndicator'; +import type {LocalizedTranslate} from '@components/LocaleContextProvider'; import type {Mention} from '@components/MentionSuggestions'; import OfflineIndicator from '@components/OfflineIndicator'; import OfflineWithFeedback from '@components/OfflineWithFeedback'; @@ -52,6 +53,7 @@ import { isConciergeChatReport, isGroupChat, isInvoiceReport, + isMoneyRequestReport, isReportApproved, isReportTransactionThread, isSettled, @@ -124,6 +126,24 @@ const shouldFocusInputOnScreenFocus = canFocusInputOnScreenFocus(); const willBlurTextInputOnTapOutside = willBlurTextInputOnTapOutsideFunc(); +/** + * List of AI-aware placeholder translation keys for expense threads + */ +const AI_PLACEHOLDER_KEYS = [ + 'reportActionCompose.askConciergeToCreate', + 'reportActionCompose.askConciergeToUpdate', + 'reportActionCompose.askConciergeToCorrect', + 'reportActionCompose.addColleagueWithMention', +] as const; + +/** + * Returns a random AI-aware placeholder for expense threads + */ +function getRandomPlaceholder(translate: LocalizedTranslate): string { + const randomIndex = Math.floor(Math.random() * AI_PLACEHOLDER_KEYS.length); + return translate(AI_PLACEHOLDER_KEYS[randomIndex]); +} + // eslint-disable-next-line import/no-mutable-exports let onSubmitAction = noop; @@ -251,13 +271,23 @@ function ReportActionCompose({ return !isRoomOrGroupChat && (canModifyReceipt || hasMoneyRequestOptions) && !isInvoiceReport(report); }, [shouldAddOrReplaceReceipt, report, reportParticipantIDs, policy, isReportArchived, isRestrictedToPreferredPolicy]); + // Check if this is an expense-related report (IOU, expense report, or transaction thread) + const isExpenseRelatedReport = useMemo(() => isTransactionThreadView || isMoneyRequestReport(report), [isTransactionThreadView, report]); + // Placeholder to display in the chat input. const inputPlaceholder = useMemo(() => { if (includesConcierge && userBlockedFromConcierge) { return translate('reportActionCompose.blockedFromConcierge'); } + + // Show AI-aware placeholder for expense-related reports where user can write + // to encourage using Concierge AI for expense management + if (isExpenseRelatedReport && canUserPerformWriteAction) { + return getRandomPlaceholder(translate); + } + return translate('reportActionCompose.writeSomething'); - }, [includesConcierge, translate, userBlockedFromConcierge]); + }, [includesConcierge, translate, userBlockedFromConcierge, isExpenseRelatedReport, canUserPerformWriteAction]); const {displayLabel: agentZeroDisplayLabel, kickoffWaitingIndicator} = useAgentZeroStatusIndicator(reportID, isConciergeChat);