3520 |
stevensc |
1 |
import { useEffect, useState } from 'react';
|
|
|
2 |
|
|
|
3 |
import { useAlert, useApi, useFetch } from '@shared/hooks';
|
|
|
4 |
import { markSlideCompleted } from '@microlearning/services';
|
|
|
5 |
|
|
|
6 |
export function useSlide(topicUuid, slideUuid) {
|
|
|
7 |
const [slide, setSlide] = useState(null);
|
|
|
8 |
|
|
|
9 |
const { data, loading } = useFetch(`/microlearning/slides/${slideUuid}`);
|
|
|
10 |
const { loading: markLoading, execute } = useApi(markSlideCompleted);
|
|
|
11 |
const { showSuccess, showError } = useAlert();
|
|
|
12 |
|
|
|
13 |
const handleMarkSlideCompleted = async () => {
|
|
|
14 |
try {
|
|
|
15 |
const message = await execute(`/microlearning/sync/topic/${topicUuid}/slide/${slideUuid}`);
|
|
|
16 |
setSlide({ ...slide, completed: true });
|
|
|
17 |
showSuccess(message);
|
|
|
18 |
} catch (error) {
|
|
|
19 |
console.error(error);
|
|
|
20 |
showError(error.message);
|
|
|
21 |
}
|
|
|
22 |
};
|
|
|
23 |
|
|
|
24 |
useEffect(() => {
|
|
|
25 |
if (data) setSlide(data);
|
|
|
26 |
}, [data]);
|
|
|
27 |
|
|
|
28 |
return { slide, loading, markLoading, handleMarkSlideCompleted };
|
|
|
29 |
}
|