analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
56 lines (55 loc) • 1.72 kB
JavaScript
// src/hooks/useInstitution.ts
import { useEffect, useState } from "react";
function useInstitution(config) {
const [institution, setInstitution] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
if (!config.institutionId) return;
let cancelled = false;
const fetchInstitution = async () => {
setLoading(true);
setInstitution(null);
setError(null);
try {
const { data: response } = await config.apiClient.get("/institution/filter", {
params: { filter: config.institutionId }
});
if (!cancelled) setInstitution(response.data);
} catch (err) {
if (!cancelled) setError(err);
} finally {
if (!cancelled) setLoading(false);
}
};
fetchInstitution();
return () => {
cancelled = true;
};
}, [config.institutionId, config.apiClient]);
return { institution, loading, error };
}
function useInstitutionId() {
const [institutionId, setInstitutionId] = useState(() => {
return document.querySelector('meta[name="institution-id"]')?.getAttribute("content") ?? null;
});
useEffect(() => {
const metaTag = document.querySelector('meta[name="institution-id"]');
if (!metaTag) return;
const observer = new MutationObserver(() => {
const newValue = metaTag.getAttribute("content");
setInstitutionId(newValue);
});
observer.observe(metaTag, {
attributes: true,
attributeFilter: ["content"]
});
return () => observer.disconnect();
}, []);
return institutionId;
}
export {
useInstitution,
useInstitutionId
};
//# sourceMappingURL=chunk-CXROMRAO.mjs.map