* feat: add language selection chore: update tests so we have less error message test: update test * test: update tests * chore: remove duplicate translation * chore: lint for console * chore: remove comments * chore: make sure the affect url frame refresh after the language selection change * chore: add whole_course_translation and language to courseware meta (#1305) * feat: Add feedback widget UI mock Add unit tests Fix snapshot Clean Sequence component logEvent calls Clean unit test Put feedback widget behind whole course translation flag Fix useFeedbackWidget test * chore: add src and dest translation * feat: first iteration of plugin translation chore: update plugin instruction * feat: Connect FeedbackWidget with backend services (#1325) Connect FeedbackWidget with backend services Move feedback widget to unit translation plugin * feat: Add authentication to WCT feedback endpoints (#1329) * chore: add fetch config and move feedback widget for the plugin chore: rewrite and test the api request chore: rebase chore: update translation feedback chore: test chore: add more tests * chore: rebase * chore: update requested change * chore: update package * chore: upgrade frontend-lib-special-exams and frontend-lib-learning-assistant * chore: update tests * chore: remove unneeded package * chore: update example config * chore: add source-map-loader * fix: feedback widget render error after submit feedback (#1335) * fix: feedback widget render error after submit feedback * fix: widget logic --------- Co-authored-by: Rodrigo Martin <rodrigom_94@hotmail.com>
83 lines
1.8 KiB
JavaScript
83 lines
1.8 KiB
JavaScript
import { useCallback, useEffect, useState } from 'react';
|
|
|
|
import { createTranslationFeedback, getTranslationFeedback } from '../data/api';
|
|
|
|
const useFeedbackWidget = ({
|
|
courseId,
|
|
translationLanguage,
|
|
unitId,
|
|
userId,
|
|
}) => {
|
|
const [showFeedbackWidget, setShowFeedbackWidget] = useState(false);
|
|
const [showGratitudeText, setShowGratitudeText] = useState(false);
|
|
|
|
const closeFeedbackWidget = useCallback(() => {
|
|
setShowFeedbackWidget(false);
|
|
}, [setShowFeedbackWidget]);
|
|
|
|
const openFeedbackWidget = useCallback(() => {
|
|
setShowFeedbackWidget(true);
|
|
}, [setShowFeedbackWidget]);
|
|
|
|
useEffect(async () => {
|
|
const translationFeedback = await getTranslationFeedback({
|
|
courseId,
|
|
translationLanguage,
|
|
unitId,
|
|
userId,
|
|
});
|
|
setShowFeedbackWidget(!translationFeedback);
|
|
}, [
|
|
courseId,
|
|
translationLanguage,
|
|
unitId,
|
|
userId,
|
|
]);
|
|
|
|
const openGratitudeText = useCallback(() => {
|
|
setShowGratitudeText(true);
|
|
setTimeout(() => {
|
|
setShowGratitudeText(false);
|
|
}, 3000);
|
|
}, [setShowGratitudeText]);
|
|
|
|
const sendFeedback = useCallback(async (feedbackValue) => {
|
|
await createTranslationFeedback({
|
|
courseId,
|
|
feedbackValue,
|
|
translationLanguage,
|
|
unitId,
|
|
userId,
|
|
});
|
|
closeFeedbackWidget();
|
|
openGratitudeText();
|
|
}, [
|
|
courseId,
|
|
translationLanguage,
|
|
unitId,
|
|
userId,
|
|
closeFeedbackWidget,
|
|
openGratitudeText,
|
|
]);
|
|
|
|
const onThumbsUpClick = useCallback(() => {
|
|
sendFeedback(true);
|
|
}, [sendFeedback]);
|
|
const onThumbsDownClick = useCallback(() => {
|
|
sendFeedback(false);
|
|
}, [sendFeedback]);
|
|
|
|
return {
|
|
closeFeedbackWidget,
|
|
openFeedbackWidget,
|
|
openGratitudeText,
|
|
sendFeedback,
|
|
showFeedbackWidget,
|
|
showGratitudeText,
|
|
onThumbsUpClick,
|
|
onThumbsDownClick,
|
|
};
|
|
};
|
|
|
|
export default useFeedbackWidget;
|