analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
57 lines (55 loc) • 1.59 kB
JavaScript
import {
useQuizStore
} from "./chunk-G7IP4VLI.mjs";
// src/hooks/useDraftAutoSave.ts
import { useEffect, useMemo } from "react";
function useDraftAutoSave({
apiClient,
enabled,
endpoint = "/activities/{activityId}/draft"
}) {
const { setDraftApiClient, saveDraft } = useQuizStore();
const draftApiClient = useMemo(
() => ({
saveDraft: async (activityId, payload) => {
const url = endpoint.replace("{activityId}", activityId);
await apiClient.post(url, payload);
return { success: true };
},
loadDraft: async (activityId) => {
const url = endpoint.replace("{activityId}", activityId);
const response = await apiClient.get(url);
const data = response.data?.data;
return data ? {
hasDraft: data.hasDraft,
answers: data.answers || []
} : null;
}
}),
[apiClient, endpoint]
);
useEffect(() => {
if (enabled) {
setDraftApiClient(draftApiClient);
} else {
setDraftApiClient(null);
}
return () => {
setDraftApiClient(null);
};
}, [enabled, draftApiClient, setDraftApiClient]);
useEffect(() => {
if (!enabled) return;
const handleVisibilityChange = () => {
if (document.visibilityState === "hidden") {
saveDraft();
}
};
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => document.removeEventListener("visibilitychange", handleVisibilityChange);
}, [enabled, saveDraft]);
}
export {
useDraftAutoSave
};
//# sourceMappingURL=chunk-OOFGQDRU.mjs.map