@erik-efl/react-scorm-provider
Version:
Modern React Components to easily enable SCORM API communication in React projects. Updated fork of the original react-scorm-provider.
17 lines (12 loc) • 5.52 kB
JavaScript
;
var pipwerksScormApiWrapper = require('pipwerks-scorm-api-wrapper');
var E = require('react');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var E__default = /*#__PURE__*/_interopDefault(E);
var L=Object.defineProperty;var u=(s,c)=>L(s,"name",{value:c,configurable:!0});var f=E.createContext(void 0),T=u(s=>{let c=Math.floor(s/1e3),i=Math.floor(c/3600),t=Math.floor(c%3600/60),d=c%60;return `${i.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}:${d.toString().padStart(2,"0")}.00`},"formatSessionTime"),V=u(({children:s,version:c,debug:i})=>{let[t,d]=E.useState(!1),[A,h]=E.useState("unknown"),[v,g]=E.useState("unknown"),[S,C]=E.useState({}),[p,_]=E.useState("");E.useEffect(()=>(R(),window.addEventListener("beforeunload",w),()=>{w(),window.removeEventListener("beforeunload",w);}),[]);let R=E.useCallback(()=>{if(t)return;c&&(pipwerksScormApiWrapper.SCORM.version=c),typeof i=="boolean"&&(pipwerksScormApiWrapper.debug.isActive=i);let e=pipwerksScormApiWrapper.SCORM.init();if(d(!!e),e){let r=pipwerksScormApiWrapper.SCORM.version,m=r==="1.2"?pipwerksScormApiWrapper.SCORM.get("cmi.core.student_name"):pipwerksScormApiWrapper.SCORM.get("cmi.learner_name"),n=pipwerksScormApiWrapper.SCORM.status("get");d(!0),h(m||"unknown"),g(n||"unknown"),_(r),y();}else d(!1),console.error("ScormProvider init error: could not create the SCORM API connection");},[t,c,i]),w=E.useCallback(()=>{t&&(I(),pipwerksScormApiWrapper.SCORM.status("set",v),pipwerksScormApiWrapper.SCORM.save(),pipwerksScormApiWrapper.SCORM.quit()?(d(!1),h("unknown"),g("unknown"),C({}),_("")):console.error("ScormProvider error: could not close the API connection"));},[t,v]),P=E.useCallback(()=>{if(!t)return console.error("SCORM API n\xE3o conectada no commit."),!1;try{let e=!1;if(typeof pipwerksScormApiWrapper.SCORM.save=="function"&&(e=pipwerksScormApiWrapper.SCORM.save()!=="false"),!e&&pipwerksScormApiWrapper.SCORM.version==="1.2")try{e=pipwerksScormApiWrapper.SCORM.API.LMSCommit("")!=="false";}catch(r){console.warn("Erro ao tentar LMSCommit direto:",r);}return e||console.error("Commit SCORM falhou."),e}catch(e){return console.error("Erro no commit:",e),!1}},[t]),y=E.useCallback(()=>{if(!t)throw new Error("SCORM API n\xE3o conectada");try{let e=pipwerksScormApiWrapper.SCORM.get("cmi.suspend_data"),r={};if(e&&e!=="{}")try{r=JSON.parse(e),console.log("Dados recuperados de suspend_data com sucesso");}catch(n){console.warn("Erro ao processar dados de suspend_data:",n);}else {console.warn("Nenhum dado encontrado em suspend_data");let n=pipwerksScormApiWrapper.SCORM.get("cmi.core.lesson_location");n&&n.includes("activityId=")&&console.log("Encontrado identificador em lesson_location:",n);}let m=pipwerksScormApiWrapper.SCORM.get("cmi.core.lesson_status");if(m==="completed"||m==="passed"){console.log("Atividade j\xE1 marcada como conclu\xEDda no LMS");let n=pipwerksScormApiWrapper.SCORM.get("cmi.core.score.raw");n&&console.log("Pontua\xE7\xE3o recuperada:",n);}return C(r),!0}catch(e){return console.error("Erro ao carregar suspend_data:",e),!1}},[t]),I=E.useCallback(()=>{if(!t)return console.warn("SCORM API n\xE3o conectada, imposs\xEDvel salvar dados"),!1;try{pipwerksScormApiWrapper.SCORM.set("cmi.suspend_data",JSON.stringify(S));let e=`activityId=${Object.keys(S).join(",")}&ts=${Date.now()}`;pipwerksScormApiWrapper.SCORM.set("cmi.core.lesson_location",e),pipwerksScormApiWrapper.SCORM.set("cmi.core.exit","suspend");let r=T(30*60*1e3);pipwerksScormApiWrapper.SCORM.set("cmi.core.session_time",r);let m=pipwerksScormApiWrapper.SCORM.get("cmi.core.lesson_status");m!=="completed"&&m!=="passed"&&pipwerksScormApiWrapper.SCORM.set("cmi.core.lesson_status","incomplete");let n=P(),b=pipwerksScormApiWrapper.SCORM.get("cmi.suspend_data");return !b||b==="{}"?(console.warn("Dados n\xE3o foram persistidos corretamente no suspend_data"),!1):n}catch(e){return console.error("Erro ao salvar suspend_data:",e),!1}},[t,S,P]),D=E.useCallback(()=>C({}),[]),x=E.useCallback(e=>{t&&(g(e),pipwerksScormApiWrapper.SCORM.status("set",e));},[t]),O=E.useCallback(e=>{if(!t)return new Error("SCORM API not connected");try{return pipwerksScormApiWrapper.SCORM.set("cmi.score.raw",e.value),p==="2004"?(pipwerksScormApiWrapper.SCORM.set("cmi.score.min",e.min),pipwerksScormApiWrapper.SCORM.set("cmi.score.max",e.max)):p==="1.2"&&(pipwerksScormApiWrapper.SCORM.set("cmi.core.score.min",e.min),pipwerksScormApiWrapper.SCORM.set("cmi.core.score.max",e.max)),e.status&&e.status!=="0"&&x(e.status),pipwerksScormApiWrapper.SCORM.save()}catch(r){return r instanceof Error}},[t,p,x]),k=E.useCallback((e,r)=>{t&&pipwerksScormApiWrapper.SCORM.set(e,r);},[t]),N=E.useCallback(e=>t?pipwerksScormApiWrapper.SCORM.get(e):null,[t]);return E__default.default.createElement(f.Provider,{value:{apiConnected:t,learnerName:A,completionStatus:v,suspendData:S,scormVersion:p,getSuspendData:y,setSuspendData:I,clearSuspendData:D,setStatus:x,setScore:O,set:k,get:N,commitData:P}},s)},"ScormProvider"),W=u(()=>{let s=E__default.default.useContext(f);if(!s)throw new Error("useScorm must be used within a ScormProvider");return s},"useScorm"),q=V;function F(){return function(s){return u(function(i){return E__default.default.createElement(f.Consumer,null,t=>E__default.default.createElement(s,{...i,sco:t}))},"WithScorm")}}u(F,"withScorm");var z=F;
exports.ScoContext = f;
exports.ScormProvider = q;
exports.useScorm = W;
exports.withScorm = z;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.js.map