Skip to content

Commit

Permalink
feat: store last prompt (#4163)
Browse files Browse the repository at this point in the history
  • Loading branch information
rebelchris authored Feb 7, 2025
1 parent 50206fb commit 4ad5519
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 3 deletions.
15 changes: 13 additions & 2 deletions packages/shared/src/components/post/smartPrompts/PromptButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,20 @@ export const PromptButtons = ({
const { data, isLoading } = usePromptsQuery();
const { flags: settingFlags } = useSettingsContext();
const { prompt: promptFlags } = settingFlags || {};
const lastPrompt = settingFlags?.lastPrompt;
const prompts = useMemo(() => {
return data?.filter((prompt) => promptFlags?.[prompt.id] !== false);
}, [data, promptFlags]);
const filteredPrompts = data?.filter(
(prompt) => promptFlags?.[prompt.id] !== false,
);
if (filteredPrompts && lastPrompt) {
const latPromptIndex = filteredPrompts.findIndex(
(item) => item.id === lastPrompt,
);
const [lastPromptItem] = filteredPrompts.splice(latPromptIndex, 1);
filteredPrompts.unshift(lastPromptItem);
}
return filteredPrompts;
}, [data, lastPrompt, promptFlags]);

const { isPlus } = usePlusSubscription();
const promptList = usePromptButtons({
Expand Down
12 changes: 12 additions & 0 deletions packages/shared/src/contexts/SettingsContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ export interface SettingsContextData extends Omit<RemoteSettings, 'theme'> {
flag: keyof SettingsFlags,
value: string | boolean,
) => Promise<unknown>;
updateFlagRemote: (
flag: keyof SettingsFlags,
value: string | boolean,
) => Promise<unknown>;
updatePromptFlag: (flag: string, value: boolean) => Promise<unknown>;
syncSettings: (bootUserId?: string) => Promise<unknown>;
onToggleHeaderPlacement(): Promise<unknown>;
Expand Down Expand Up @@ -279,6 +283,14 @@ export const SettingsContextProvider = ({
[flag]: value,
},
}),
updateFlagRemote: (flag: keyof SettingsFlags, value: string | boolean) =>
updateRemoteSettingsFn({
...settings,
flags: {
...settings.flags,
[flag]: value,
},
}),
updatePromptFlag: (flag: keyof SettingsFlags, value: boolean) =>
setSettings({
...settings,
Expand Down
1 change: 1 addition & 0 deletions packages/shared/src/graphql/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export type SettingsFlags = {
clickbaitShieldEnabled: boolean;
timezoneMismatchIgnore?: string;
prompt?: Record<string, boolean>;
lastPrompt?: string;
};

export enum SidebarSettingsFlags {
Expand Down
16 changes: 15 additions & 1 deletion packages/shared/src/hooks/prompt/useSmartPrompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from '../../graphql/search';
import type { CreatePayload, TokenPayload, UseChatMessage } from '../chat';
import { UseChatMessageType } from '../chat';
import { useSettingsContext } from '../../contexts/SettingsContext';

export const useSmartPrompt = ({
post,
Expand All @@ -30,6 +31,8 @@ export const useSmartPrompt = ({
isPending: boolean;
} => {
const { user, accessToken } = useAuthContext();
const { flags, updateFlagRemote } = useSettingsContext();
const lastPrompt = flags?.lastPrompt;
const client = useQueryClient();
const sourceRef = useRef<EventSource>();

Expand Down Expand Up @@ -93,6 +96,9 @@ export const useSmartPrompt = ({
case UseChatMessageType.Completed: {
setSearchQuery({ completedAt: new Date() });
sourceRef.current?.close();
if (lastPrompt !== prompt.id) {
updateFlagRemote('lastPrompt', prompt.id);
}
break;
}
case UseChatMessageType.Error: {
Expand Down Expand Up @@ -126,7 +132,15 @@ export const useSmartPrompt = ({
source.addEventListener('message', onMessage);
sourceRef.current = source;
},
[accessToken?.token, client, post, queryKey],
[
accessToken?.token,
client,
lastPrompt,
post,
prompt.id,
queryKey,
updateFlagRemote,
],
);

useEffect(() => {
Expand Down

0 comments on commit 4ad5519

Please sign in to comment.