Skip to content

Commit 6e7f102

Browse files
committed
feat: add resetWidget option and onResetWidget callback
1 parent 089c5a6 commit 6e7f102

File tree

5 files changed

+82
-5
lines changed

5 files changed

+82
-5
lines changed

.changeset/ten-planes-hang.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"react-use-zendesk": minor
3+
---
4+
5+
feat: add resetWidget option and onResetWidget callback

apps/docs/app/components/ExampleList.tsx

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ export const ExampleList: React.FC = () => {
5555
},
5656
},
5757
{
58-
id: "messenger set locale",
59-
title: "Set locale",
58+
id: "messenger set DE locale",
59+
title: "Set DE locale",
6060
description: (
6161
<div>
6262
Sets the locale of the messaging Web Widget. For a list of supported
@@ -74,6 +74,26 @@ export const ExampleList: React.FC = () => {
7474
setLocale("de");
7575
},
7676
},
77+
{
78+
id: "messenger set ES locale",
79+
title: "Set ES locale",
80+
description: (
81+
<div>
82+
Sets the locale of the messaging Web Widget. For a list of supported
83+
locales and associated codes, use the following{" "}
84+
<a
85+
href="https://support.zendesk.com/api/v2/locales/public.json"
86+
target="_blank"
87+
>
88+
Zendesk public REST API endpoint
89+
</a>
90+
</div>
91+
),
92+
buttonText: "set ES locale",
93+
onClick: ({ setLocale }) => {
94+
setLocale("es");
95+
},
96+
},
7797
{
7898
id: "messenger set zIndex",
7999
title: "Set zIndex",
@@ -184,6 +204,26 @@ export const ExampleList: React.FC = () => {
184204
logoutUser();
185205
},
186206
},
207+
{
208+
id: "resetWidget",
209+
title: "Reset",
210+
description: (
211+
<div>
212+
This method clears all widget local state, including user data,
213+
conversations, and connections. To learn more about Reset Widget see{" "}
214+
<a
215+
href="https://developer.zendesk.com/api-reference/widget-messaging/web/core/#reset-widget"
216+
target="_blank"
217+
>
218+
Reset Widget
219+
</a>
220+
</div>
221+
),
222+
buttonText: "reset",
223+
onClick({ resetWidget }) {
224+
resetWidget();
225+
},
226+
},
187227
];
188228
return (
189229
<>

apps/docs/app/page.tsx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ export default function Page(): JSX.Element {
4848
]);
4949
}
5050

51+
function handleResetWidget() {
52+
toast("onResetWidget callback");
53+
setCallBacks((old) => [
54+
{
55+
params: arguments,
56+
id: "onResetWidget",
57+
key: "onResetWidget" + old.length,
58+
},
59+
...old,
60+
]);
61+
}
62+
5163
function onChangeKey(key: string) {
5264
setApiKey(key);
5365
}
@@ -58,6 +70,7 @@ export default function Page(): JSX.Element {
5870
onOpen={handleOpen}
5971
onClose={handleClose}
6072
onUnreadMessages={handleUnreadMessages}
73+
onResetWidget={handleResetWidget}
6174
>
6275
<main className="main">
6376
<div className="section-grid">

packages/react-use-zendesk/src/provider.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@ import { ZendeskApi } from "./api";
1212

1313
export const ZendeskProvider: React.FC<
1414
PropsWithChildren<ZendeskProviderProps>
15-
> = ({ apiKey, onOpen, onClose, onUnreadMessages, children }) => {
15+
> = ({
16+
apiKey,
17+
onOpen,
18+
onClose,
19+
onUnreadMessages,
20+
onResetWidget,
21+
children,
22+
}) => {
1623
const isRegisteredCb = useRef(false);
1724

1825
const [isOpen, setIsOpen] = React.useState(false);
@@ -23,11 +30,13 @@ export const ZendeskProvider: React.FC<
2330
const onOpenRef = useRef(onOpen);
2431
const onCloseRef = useRef(onClose);
2532
const onUnreadMessagesRef = useRef(onUnreadMessages);
33+
const onResetWidgetRef = useRef(onResetWidget);
2634

2735
useLayoutEffect(() => {
2836
onOpenRef.current = onOpen;
2937
onCloseRef.current = onClose;
3038
onUnreadMessagesRef.current = onUnreadMessages;
39+
onResetWidgetRef.current = onResetWidget;
3140
});
3241

3342
function registerCallback() {
@@ -116,6 +125,12 @@ export const ZendeskProvider: React.FC<
116125
ZendeskApi("messenger", "logoutUser");
117126
}, []);
118127

128+
const resetWidget = React.useCallback(() => {
129+
ZendeskApi("messenger", "resetWidget", (callback: () => void) => {
130+
!!onResetWidgetRef.current && onResetWidgetRef.current();
131+
});
132+
}, []);
133+
119134
const initialProviderValue: ZendeskContextValues = {
120135
show,
121136
hide,
@@ -128,6 +143,7 @@ export const ZendeskProvider: React.FC<
128143
setConversationTags,
129144
loginUser,
130145
logoutUser,
146+
resetWidget,
131147
isOpen,
132148
unreadMessages,
133149
};

packages/react-use-zendesk/src/types.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export type ZendeskProviderProps = {
33
onOpen?: () => void;
44
onClose?: () => void;
55
onUnreadMessages?: (count: number) => void;
6+
onResetWidget?: () => void;
67
};
78

89
export type ZendeskConversationField = {
@@ -19,11 +20,12 @@ export type ZendeskContextValues = {
1920
setZIndex: (newZIndex: number) => void;
2021
setCookies: (isEnabled: boolean) => void;
2122
setConversationFields: (
22-
conversationFields: Array<ZendeskConversationField>,
23+
conversationFields: Array<ZendeskConversationField>
2324
) => void;
2425
setConversationTags: (conversationTags: Array<string>) => void;
2526
loginUser: (jwtToken: string) => void;
2627
logoutUser: () => void;
28+
resetWidget: () => void;
2729
isOpen: boolean;
2830
unreadMessages: number | undefined;
2931
};
@@ -40,4 +42,5 @@ export type ZendeskMethod =
4042
| "conversationFields"
4143
| "conversationTags"
4244
| "loginUser"
43-
| "logoutUser";
45+
| "logoutUser"
46+
| "resetWidget";

0 commit comments

Comments
 (0)