import React, { useEffect } from "react"
import { useLearningPath } from "../providers/LearningPath"
import { useNotifications } from "../providers/Notification"
import LearningPathSteps from "../components/LearningPath/Steps"
import LearningPathFinish from "../components/LearningPath/Finish"
import LearningPathIcon from "../components/LearningPath/Icon"
const useCurrentLearningPath = () => {
const { path, currentStep, updatePath, endPath } = useLearningPath()
const step = path?.steps[currentStep]
const {
addNotification,
generateId,
removeNotification,
updateNotification,
} = useNotifications()
// used when a notification closed (finished or not)
const handleClose = (notificationId: string, shouldEndPath = true) => {
if (shouldEndPath) {
setTimeout(() => {
endPath()
}, 500)
}
removeNotification(notificationId)
}
// used when the learning path is completely finished
// shows the finish step, if the path has any
const handleFinish = (notificationId: string) => {
if (path.finish) {
updateNotification(notificationId, {
title: path.finish.step.title,
text: path.finish.step.description,
type: "custom",
layout: "default",
CustomIcon: (
),
children: (
setTimeout(() => {
handleClose(notificationId, false)
}, 1500)
}
/>
),
})
endPath()
} else {
handleClose(notificationId)
}
}
const LearningStep = (notificationId: string) => {
return handleFinish(notificationId)} />
}
// create a notification when a path is initialized
useEffect(() => {
if (path && !path.notificationId) {
const id = generateId()
addNotification({
title: path.label,
text: step?.description,
onClose: () => handleClose(id),
layout: "empty",
id,
children: LearningStep(id),
className: "flex flex-col",
})
updatePath({
notificationId: id,
})
}
}, [path])
// update an existing notification when the step changes
useEffect(() => {
if (path && path.notificationId && step) {
updateNotification(path.notificationId, {
text: step?.description,
children: LearningStep(path.notificationId),
})
}
}, [step])
}
export default useCurrentLearningPath