mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
fix(widget): update logic
This commit is contained in:
parent
55ee51e5b6
commit
1fb7fe0212
@ -43,20 +43,46 @@ const UserSubscription: React.FC = () => {
|
||||
participants,
|
||||
setParticipants,
|
||||
setSuggestions,
|
||||
hasSession,
|
||||
} = useChat();
|
||||
const [firstName, setFirstName] = useState<string>("");
|
||||
const [lastName, setLastName] = useState<string>("");
|
||||
const isInitialized = useRef(false);
|
||||
const getLocalStorageProfile = (): ISubscriber | null => {
|
||||
const profile = localStorage.getItem("profile");
|
||||
|
||||
if (profile) {
|
||||
return JSON.parse(profile);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
const getBody = async (first_name: string = "", last_name: string = "") => {
|
||||
const { body } = await socket.get<{
|
||||
messages: TMessage[];
|
||||
profile: ISubscriber;
|
||||
}>(
|
||||
`/webhook/${config.channel}/?first_name=${first_name}&last_name=${last_name}`,
|
||||
);
|
||||
|
||||
return body;
|
||||
};
|
||||
const handleSubmit = useCallback(
|
||||
async (event?: React.FormEvent<HTMLFormElement>) => {
|
||||
async ({
|
||||
event,
|
||||
first_name = "",
|
||||
last_name = "",
|
||||
}: {
|
||||
event?: React.FormEvent<HTMLFormElement>;
|
||||
first_name?: string;
|
||||
last_name?: string;
|
||||
}) => {
|
||||
event?.preventDefault();
|
||||
try {
|
||||
setConnectionState(2);
|
||||
const { body } = await socket.get<{
|
||||
messages: TMessage[];
|
||||
profile: ISubscriber;
|
||||
}>(
|
||||
`/webhook/${config.channel}/?first_name=${firstName}&last_name=${lastName}`,
|
||||
const body = await getBody(
|
||||
first_name || firstName,
|
||||
last_name || lastName,
|
||||
);
|
||||
const { messages, profile } = body;
|
||||
const quickReplies = getQuickReplies(body.messages.at(-1));
|
||||
@ -127,21 +153,22 @@ const UserSubscription: React.FC = () => {
|
||||
// User already subscribed ? (example : refreshed the page)
|
||||
if (!isInitialized.current) {
|
||||
isInitialized.current = true;
|
||||
const profile = localStorage.getItem("profile");
|
||||
const localStorageProfile = getLocalStorageProfile();
|
||||
|
||||
if (profile) {
|
||||
const parsedProfile = JSON.parse(profile);
|
||||
|
||||
setFirstName(parsedProfile.first_name);
|
||||
setLastName(parsedProfile.last_name);
|
||||
handleSubmit();
|
||||
}
|
||||
if (localStorageProfile || hasSession)
|
||||
handleSubmit({
|
||||
first_name: localStorageProfile?.first_name,
|
||||
last_name: localStorageProfile?.last_name,
|
||||
});
|
||||
}
|
||||
}, [handleSubmit, setScreen]);
|
||||
|
||||
return (
|
||||
<div className="user-subscription-wrapper">
|
||||
<form className="user-subscription" onSubmit={handleSubmit}>
|
||||
<form
|
||||
className="user-subscription"
|
||||
onSubmit={(event) => handleSubmit({ event })}
|
||||
>
|
||||
<div className="user-subscription-title">
|
||||
{settings.greetingMessage}
|
||||
</div>
|
||||
|
@ -158,6 +158,7 @@ interface ChatContextType {
|
||||
* @param lastName
|
||||
*/
|
||||
handleSubscription: (firstName?: string, lastName?: string) => void;
|
||||
hasSession: boolean;
|
||||
}
|
||||
|
||||
const defaultCtx: ChatContextType = {
|
||||
@ -194,6 +195,7 @@ const defaultCtx: ChatContextType = {
|
||||
setFile: () => {},
|
||||
send: () => {},
|
||||
handleSubscription: () => {},
|
||||
hasSession: false,
|
||||
};
|
||||
const ChatContext = createContext<ChatContextType>(defaultCtx);
|
||||
const ChatProvider: React.FC<{
|
||||
@ -231,6 +233,7 @@ const ChatProvider: React.FC<{
|
||||
const [payload, setPayload] = useState<IPayload | null>(defaultCtx.payload);
|
||||
const [file, setFile] = useState<File | null>(defaultCtx.file);
|
||||
const [webviewUrl, setWebviewUrl] = useState<string>(defaultCtx.webviewUrl);
|
||||
const [hasSession, setHasSession] = useState(false);
|
||||
const updateConnectionState = (state: ConnectionState) => {
|
||||
setConnectionState(state);
|
||||
state === ConnectionState.wantToConnect && wantToConnect && wantToConnect();
|
||||
@ -417,12 +420,8 @@ const ChatProvider: React.FC<{
|
||||
setConnectionState(0);
|
||||
};
|
||||
const resetProfile = ({ type, data }: Packet) => {
|
||||
if (
|
||||
type === PacketType.EVENT &&
|
||||
data[0] === "settings" &&
|
||||
!data[1]?.hasProfile
|
||||
) {
|
||||
localStorage.removeItem("profile");
|
||||
if (type === PacketType.EVENT && data[0] === "settings") {
|
||||
setHasSession(!!data[1]?.hasSession);
|
||||
}
|
||||
};
|
||||
|
||||
@ -483,6 +482,7 @@ const ChatProvider: React.FC<{
|
||||
message,
|
||||
setMessage,
|
||||
handleSubscription,
|
||||
hasSession,
|
||||
};
|
||||
|
||||
return (
|
||||
|
Loading…
Reference in New Issue
Block a user