UNPKG

@code-by-dwayne/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.96 kB
'use strict'; var D = require('react'); var pipwerksScormApiWrapper = require('pipwerks-scorm-api-wrapper'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var D__default = /*#__PURE__*/_interopDefault(D); var $=Object.defineProperty;var u=(s,c)=>$(s,"name",{value:c,configurable:!0});var l=D.createContext(void 0),W=u(s=>{let c=Math.floor(s/1e3),m=Math.floor(c/3600),t=Math.floor(c%3600/60),f=c%60;return `${m.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}:${f.toString().padStart(2,"0")}.00`},"formatSessionTime"),q=u(({children:s,version:c,debug:m})=>{let[t,f]=D.useState(!1),[E,h]=D.useState("unknown"),[M,A]=D.useState("unknown"),[g,v]=D.useState("unknown"),[p,w]=D.useState({}),[S,_]=D.useState("");D.useEffect(()=>(k(),window.addEventListener("beforeunload",C),()=>{C(),window.removeEventListener("beforeunload",C);}),[]);let k=D.useCallback(()=>{if(!t)if(c&&(pipwerksScormApiWrapper.SCORM.version=c),typeof m=="boolean"&&(pipwerksScormApiWrapper.debug.isActive=m),pipwerksScormApiWrapper.SCORM.init()){let o=pipwerksScormApiWrapper.SCORM.version,r=o==="1.2"?pipwerksScormApiWrapper.SCORM.get("cmi.core.student_name"):pipwerksScormApiWrapper.SCORM.get("cmi.learner_name"),a=o==="1.2"?pipwerksScormApiWrapper.SCORM.get("cmi.core.student_id"):pipwerksScormApiWrapper.SCORM.get("cmi.learner_id"),n=pipwerksScormApiWrapper.SCORM.status("get");f(!0),h(r||"unknown"),A(a||"unknown"),v(n||"unknown"),_(o);}else console.error("ScormProvider init error: could not create the SCORM API connection");},[t,c,m]),C=D.useCallback(()=>{t&&(I(),pipwerksScormApiWrapper.SCORM.status("set",g),pipwerksScormApiWrapper.SCORM.save(),pipwerksScormApiWrapper.SCORM.quit()?(f(!1),h("unknown"),v("unknown"),w({}),_("")):console.error("ScormProvider error: could not close the API connection"));},[t,g]),P=D.useCallback(()=>{if(!t)throw new Error("SCORM API n\xE3o conectada");try{let o=pipwerksScormApiWrapper.SCORM.get("cmi.core.exit");(!o||o!=="suspend")&&pipwerksScormApiWrapper.SCORM.set("cmi.core.exit","suspend");let r=!1;if(typeof pipwerksScormApiWrapper.SCORM.save=="function"&&(r=pipwerksScormApiWrapper.SCORM.save()!=="false"),!r&&pipwerksScormApiWrapper.SCORM.version==="1.2")try{r=pipwerksScormApiWrapper.SCORM.API.LMSCommit("")!=="false";}catch(n){console.warn("Erro ao tentar LMSCommit direto:",n);}let a=pipwerksScormApiWrapper.SCORM.get("cmi.suspend_data");return (!a||a==="{}")&&console.warn("Commit n\xE3o persistiu dados em suspend_data"),r}catch(o){return console.error("Erro no commit:",o),!1}},[t]),R=D.useCallback(()=>{if(!t)throw new Error("SCORM API n\xE3o conectada");try{let o=pipwerksScormApiWrapper.SCORM.get("cmi.suspend_data"),r={};if(o&&o!=="{}")try{r=JSON.parse(o),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 a=pipwerksScormApiWrapper.SCORM.get("cmi.core.lesson_status");if(a==="completed"||a==="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 w(r),!0}catch(o){return console.error("Erro ao carregar suspend_data:",o),!1}},[t]),I=D.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(p));let o=`activityId=${Object.keys(p).join(",")}&ts=${Date.now()}`;pipwerksScormApiWrapper.SCORM.set("cmi.core.lesson_location",o),pipwerksScormApiWrapper.SCORM.set("cmi.core.exit","suspend");let r=W(30*60*1e3);pipwerksScormApiWrapper.SCORM.set("cmi.core.session_time",r);let a=pipwerksScormApiWrapper.SCORM.get("cmi.core.lesson_status");a!=="completed"&&a!=="passed"&&pipwerksScormApiWrapper.SCORM.set("cmi.core.lesson_status","incomplete");let n=P(),y=pipwerksScormApiWrapper.SCORM.get("cmi.suspend_data");return !y||y==="{}"?(console.warn("Dados n\xE3o foram persistidos corretamente no suspend_data"),!1):n}catch(o){return console.error("Erro ao salvar suspend_data:",o),!1}},[t,p,P]),O=D.useCallback(()=>w({}),[]),x=D.useCallback(o=>{t&&(v(o),pipwerksScormApiWrapper.SCORM.status("set",o));},[t]),L=D.useCallback(async o=>{if(!t)return Promise.reject(new Error("SCORM API not connected"));try{pipwerksScormApiWrapper.SCORM.set("cmi.score.raw",o.value),S==="2004"?(pipwerksScormApiWrapper.SCORM.set("cmi.score.min",o.min),pipwerksScormApiWrapper.SCORM.set("cmi.score.max",o.max)):S==="1.2"&&(pipwerksScormApiWrapper.SCORM.set("cmi.core.score.min",o.min),pipwerksScormApiWrapper.SCORM.set("cmi.core.score.max",o.max)),o.status&&o.status!=="0"&&x(o.status);let r=pipwerksScormApiWrapper.SCORM.save();return Promise.resolve({success:!0,saveResult:r,score:o})}catch(r){return Promise.reject(r)}},[t,S,x]),N=D.useCallback((o,r)=>{t&&pipwerksScormApiWrapper.SCORM.set(o,r);},[t]),j=D.useCallback(o=>t?pipwerksScormApiWrapper.SCORM.get(o):null,[t]);return D__default.default.createElement(l.Provider,{value:{apiConnected:t,learnerName:E,learnerID:M,completionStatus:g,suspendData:p,scormVersion:S,getSuspendData:R,setSuspendData:I,clearSuspendData:O,setStatus:x,setScore:L,set:N,get:j,commitData:P}},s)},"ScormProvider"),F=u(()=>{let s=D__default.default.useContext(l);if(!s)throw new Error("useScorm must be used within a ScormProvider");return s},"useScorm"),z=q;function B(){return function(s){return u(function(m){return D__default.default.createElement(l.Consumer,null,t=>D__default.default.createElement(s,{...m,sco:t}))},"WithScorm")}}u(B,"withScorm");var G=B; exports.ScoContext = l; exports.ScormProvider = z; exports.useScorm = F; exports.withScorm = G; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map