Skip to content

Commit b5911fa

Browse files
committed
Display "concierge thinking" indicator when asking concierge from the search router
1 parent 7d8d521 commit b5911fa

4 files changed

Lines changed: 28 additions & 2 deletions

File tree

src/ONYXKEYS.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,9 @@ const ONYXKEYS = {
593593
/** Company cards custom names */
594594
NVP_EXPENSIFY_COMPANY_CARDS_CUSTOM_NAMES: 'nvp_expensify_ccCustomNames',
595595

596+
/** Whether to kick off the "Concierge is thinking" indicator when AgentZeroStatusGate mounts */
597+
CONCIERGE_THINKING_KICKOFF: 'conciergeThinkingKickoff',
598+
596599
/** The user's Concierge reportID */
597600
CONCIERGE_REPORT_ID: 'conciergeReportID',
598601

@@ -1498,6 +1501,7 @@ type OnyxValuesMapping = {
14981501
[ONYXKEYS.LAST_ROUTE]: string;
14991502
[ONYXKEYS.IS_USING_IMPORTED_STATE]: boolean;
15001503
[ONYXKEYS.NVP_EXPENSIFY_COMPANY_CARDS_CUSTOM_NAMES]: Record<string, string>;
1504+
[ONYXKEYS.CONCIERGE_THINKING_KICKOFF]: boolean;
15011505
[ONYXKEYS.CONCIERGE_REPORT_ID]: string;
15021506
[ONYXKEYS.SELF_DM_REPORT_ID]: string;
15031507
[ONYXKEYS.SHARE_UNKNOWN_USER_DETAILS]: Participant;

src/components/Search/SearchRouter/useAskConcierge.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import useOnyx from '@hooks/useOnyx';
44
import useOpenConciergeAnywhere from '@hooks/useOpenConciergeAnywhere';
55
import useSidePanelReportID from '@hooks/useSidePanelReportID';
66
import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
7-
import {addComment} from '@userActions/Report';
7+
import {addComment, setConciergeThinkingKickoff} from '@userActions/Report';
88
import CONST from '@src/CONST';
99
import ONYXKEYS from '@src/ONYXKEYS';
1010

@@ -26,6 +26,7 @@ function useAskConcierge() {
2626
if (!targetReport || !targetReportID) {
2727
return;
2828
}
29+
setConciergeThinkingKickoff();
2930
addComment({
3031
report: targetReport,
3132
notifyReportID: targetReportID,

src/libs/actions/Report/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7421,6 +7421,14 @@ function setOptimisticTransactionThread(reportID?: string, parentReportID?: stri
74217421
});
74227422
}
74237423

7424+
function setConciergeThinkingKickoff() {
7425+
Onyx.set(ONYXKEYS.CONCIERGE_THINKING_KICKOFF, true);
7426+
}
7427+
7428+
function clearConciergeThinkingKickoff() {
7429+
Onyx.set(ONYXKEYS.CONCIERGE_THINKING_KICKOFF, null);
7430+
}
7431+
74247432
export type {Video, GuidedSetupData, TaskForParameters, IntroSelected, OpenReportActionParams, ParticipantInfo};
74257433

74267434
export {
@@ -7539,4 +7547,6 @@ export {
75397547
prepareOnyxDataForCleanUpOptimisticParticipants,
75407548
getGuidedSetupDataForOpenReport,
75417549
getReportChannelName,
7550+
setConciergeThinkingKickoff,
7551+
clearConciergeThinkingKickoff,
75427552
};

src/pages/inbox/AgentZeroStatusContext.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React, {createContext, useContext, useEffect, useRef, useState} from 'rea
44
import useLocalize from '@hooks/useLocalize';
55
import useNetwork from '@hooks/useNetwork';
66
import useOnyx from '@hooks/useOnyx';
7-
import {getReportChannelName} from '@libs/actions/Report';
7+
import {clearConciergeThinkingKickoff, getReportChannelName} from '@libs/actions/Report';
88
import Log from '@libs/Log';
99
import Pusher from '@libs/Pusher';
1010
import CONST from '@src/CONST';
@@ -102,6 +102,17 @@ function AgentZeroStatusGate({reportID, children}: React.PropsWithChildren<{repo
102102
const lastUpdateTimeRef = useRef<number>(0);
103103
const {isOffline} = useNetwork();
104104

105+
// Auto-kickoff "thinking" indicator when opened from search (where kickoffWaitingIndicator isn't accessible)
106+
const [shouldKickoff] = useOnyx(ONYXKEYS.CONCIERGE_THINKING_KICKOFF);
107+
useEffect(() => {
108+
if (!shouldKickoff) {
109+
return;
110+
}
111+
clearConciergeThinkingKickoff();
112+
// eslint-disable-next-line react-hooks/set-state-in-effect -- one-shot kickoff from search; Onyx flag is cleared immediately so it cannot cascade
113+
setOptimisticStartTime(Date.now());
114+
}, [shouldKickoff]);
115+
105116
// Tracks the current agentZeroRequestID so the Pusher callback can detect new requests
106117
const agentZeroRequestIDRef = useRef('');
107118

0 commit comments

Comments
 (0)