Skip to content

Commit 63449c5

Browse files
committed
add valibot suggestions
1 parent ff8140e commit 63449c5

3 files changed

Lines changed: 25 additions & 36 deletions

File tree

packages/component/src/Activity/ActivityFeedback.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { getOrgSchemaMessage, OrgSchemaAction, parseAction, WebChatActivity } fr
33
import classNames from 'classnames';
44
import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
55
import { defaultFeedbackEntities } from './private/DefaultFeedbackEntities';
6-
import { isDefaultFeedbackActivity } from './private/isDefaultFeedbackActivity';
6+
import { hasFeedbackLoop, getDisclaimer } from './private/feedbackActivity.util';
77

88
import Feedback from './private/Feedback';
99
import dereferenceBlankNodes from '../Utils/JSONLinkedData/dereferenceBlankNodes';
@@ -37,7 +37,7 @@ const parseActivity = (entities?: WebChatActivity['entities']) => {
3737
const useGetMessageThing = (activity: WebChatActivity) =>
3838
useMemo(() => {
3939
const { messageThing, graph } = parseActivity(activity.entities);
40-
if (isDefaultFeedbackActivity(activity)) {
40+
if (hasFeedbackLoop(activity)) {
4141
return { isFeedbackLoopSupported: true, ...parseActivity([defaultFeedbackEntities]) };
4242
}
4343
return { isFeedbackLoopSupported: false, messageThing, graph };
@@ -78,14 +78,6 @@ function ActivityFeedback({ activity }: ActivityFeedbackProps) {
7878
return Object.freeze(new Set([] as OrgSchemaAction[]));
7979
}, [graph, messageThing?.potentialAction]);
8080

81-
const disclaimer = useMemo(
82-
() =>
83-
isFeedbackLoopSupported && isDefaultFeedbackActivity(activity)
84-
? activity.channelData.feedbackLoop?.disclaimer
85-
: undefined,
86-
[activity, isFeedbackLoopSupported]
87-
);
88-
8981
const handleFeedbackActionClick = useCallback((action?: OrgSchemaAction) => {
9082
setSelectedAction(action);
9183
}, []);
@@ -125,13 +117,13 @@ function ActivityFeedback({ activity }: ActivityFeedbackProps) {
125117
const FeedbackFormComponent = useMemo(
126118
() => (
127119
<FeedbackForm
128-
disclaimer={disclaimer}
120+
disclaimer={getDisclaimer(activity)}
129121
feedbackType={selectedAction?.['@type']}
130122
onResetFeedbackForm={handleFeedbackActionClick}
131123
replyToId={activity.id}
132124
/>
133125
),
134-
[activity.id, disclaimer, handleFeedbackActionClick, selectedAction]
126+
[activity, handleFeedbackActionClick, selectedAction]
135127
);
136128

137129
if (feedbackActionsPlacement === 'activity-actions' && isFeedbackLoopSupported) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { type WebChatActivity } from 'botframework-webchat-core';
2+
import { object, safeParse, string } from 'valibot';
3+
4+
const activityWithFeedbackLoopSchema = object({
5+
channelData: object({
6+
feedbackLoop: object({
7+
type: string(),
8+
disclaimer: string()
9+
})
10+
})
11+
});
12+
13+
type FeedbackActivity = WebChatActivity & {
14+
channelData: typeof activityWithFeedbackLoopSchema;
15+
};
16+
17+
export const hasFeedbackLoop = (activity: WebChatActivity): activity is FeedbackActivity =>
18+
safeParse(activityWithFeedbackLoopSchema, activity.channelData).success;
19+
20+
export const getDisclaimer = (activity: WebChatActivity): string | undefined =>
21+
hasFeedbackLoop(activity) ? activity.channelData.feedbackLoop.disclaimer : undefined;

packages/component/src/Activity/private/isDefaultFeedbackActivity.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)