PageSourceSearch

https://skillka.ai/assets/QuizResultsPage-BcNaoBJr.js

js skillka.ai collected 2026-10-05 15:04:11 UTC 18,160 bytes, 1 lines download raw bytes

1import{u as pe,a as he,g as _e,i as fe,m as je,r as d,j as e,s as A}from"./index-Cqd0JOc_.js";import{D as J}from"./DashboardLayout-BinGEAd0.js";import{utils as y,writeFile as Ne}from"./xlsx-D_0l8YDs.js";import{B as v}from"./button-BF8JIYbj.js";import{C as _,a as f,b as D,c as T}from"./card-BcVuNMRk.js";import{T as ge,a as be,b as Y,c as j,d as qe,e as N}from"./table-nARFq4H9.js";import{D as ze,a as ve,b as we,c as ye}from"./dialog-iEhwrC3O.js";import{u as Ce,D as ke,a as Ae,b as De,c as Te}from"./use-mobile-Cc7N6gKM.js";import{A as Se,h as Ee,a as Le,b as Pe,c as Ve,d as $e,e as Re,f as Me,g as Fe}from"./alert-dialog-CpS25gTn.js";import{B as S}from"./badge-BHUfJ5H9.js";import{u as g}from"./index-B-GB_aZ6.js";import{L as He}from"./loader-circle-BS6OsW3x.js";import{C as R}from"./circle-check-DS1KkgIu.js";import{C as M}from"./circle-x-DYIUPitU.js";import{A as Oe}from"./arrow-left-CTxylI4d.js";import{C as Be}from"./clipboard-check-B0Zxqwv7.js";import{F as Ie}from"./skeleton-B6LPOF7D.js";import{U as Qe}from"./user-wbwqibtj.js";import{X as Ue}from"./x-CI-zb7NX.js";import{T as Xe}from"./trash-2-Dh2EQ9f4.js";import{D as Ke}from"./download-BjVR6whh.js";import{E as Z}from"./eye-DOHBQS6M.js";import"./index-DEqiOm32.js";import"./input-J4lF_ZPD.js";import"./useProjects-D_-Uw0MY.js";import"./useCreditCosts-BcRtE5PW.js";import"./textarea-BJl_ZXoV.js";import"./currency-CECdeNGG.js";import"./crown-gKsGUkXj.js";import"./createLucideIcon-BUgdZWmp.js";import"./sparkles-y60jKWHf.js";import"./building-2-CgqKxnVV.js";import"./zap-C6BjTcY5.js";import"./credit-card-BuMO8ibT.js";import"./mail-DQ_txK33.js";import"./send-9-SUNmbP.js";import"./index-RVQqwujB.js";import"./index-BS3rh8m8.js";import"./dropdown-menu-B50cqF0J.js";import"./index-_h1cipRK.js";import"./index-BQdIuXMc.js";import"./index-Cv1VlRNV.js";import"./log-out-B2OGXzKC.js";import"./check-BRRfmCJJ.js";import"./radio-group-wqp0Ln5l.js";import"./index-QGGOdO5c.js";import"./use-toast-B9tLpTqp.js";import"./ContactDialog-DtR5fo-M.js";import"./label-yK3TlKaU.js";import"./select-BwYIxdh_.js";import"./chevron-up-BM3YnvV8.js";import"./laure-avatar-wH1i9WzZ.js";import"./share-2-CNqDtR-b.js";import"./gift-EIldoFoh.js";import"./copy-BHUDp6u9.js";import"./OrganizationContext-CQoJsQ29.js";import"./users-DRrtC0T5.js";import"./globe-C9_lmDAP.js";import"./banknote-D5tBcXRh.js";import"./settings-C2YpJ7nr.js";import"./circle-help-QREzNaV4.js";import"./shield-check-v-xp2Ixk.js";import"./party-popper-hfHhLT72.js";import"./book-open-C13MO25X.js";import"./coins-JNu2WCpw.js";import"./graduation-cap-OS2P0j5w.js";import"./kbFileTypes-CK7dhHB6.js";import"./rotate-ccw-C__7SGaS.js";import"./arrow-up-Cbmnt9CZ.js";function mt(){const{id:b,quizKey:p}=pe(),[C,ee]=he(),se=parseInt(C.get("version")||"1",10),u=C.get("learner"),F=_e(),{t:s}=fe(),{profile:E}=je(),te=(E==null?void 0:E.subscription_status)==="pro",re=s("common.cancel")==="Annuler",H=Ce(),[L,O]=d.useState(!0),[w,B]=d.useState([]),[n,I]=d.useState(null),[P,k]=d.useState(!1),[ae,le]=d.useState(""),[ie,q]=d.useState(""),[ne,Q]=d.useState(!1);d.useEffect(()=>{if(!b||!p)return;(async()=>{var l;try{const{data:i}=await A.from("projects").select("title, detailed_plan_json_url, modules_count").eq("id",b).single();if(i){if(le(i.title),p==="pre_assessment")q(s("project_detail.quiz_pre_assessment"));else if(p==="final_assessment")q(s("project_detail.quiz_final_assessment"));else if(p.startsWith("module_")){const r=p.replace("module_","");if(i.detailed_plan_json_url)try{const z=await(await fetch(i.detailed_plan_json_url)).json(),c=(l=z==null?void 0:z.modules)==null?void 0:l[parseInt(r)-1],G=(c==null?void 0:c.titre)||(c==null?void 0:c.title)||(c==null?void 0:c.name);q(G?`Quiz Module ${r} : ${G}`:s("project_detail.quiz_module",{n:r}))}catch{q(s("project_detail.quiz_module",{n:r}))}else q(s("project_detail.quiz_module",{n:r}))}}const{data:h}=await A.from("shared_quizzes").select("share_id").eq("project_id",b).eq("quiz_key",p).eq("quiz_version",se).maybeSingle();if(!h){g.error(s("quiz_results.no_share_found")),O(!1);return}const{data:a,error:m}=await A.from("quiz_responses").select("*, learners(first_name, last_name, email)").eq("share_id",h.share_id).order("completed_at",{ascending:!1});if(m)throw m;const V=(a||[]).map(r=>{var $,z,c;return{id:r.id,learner_id:r.learner_id,learner_first_name:(($=r.learners)==null?void 0:$.first_name)??"",learner_last_name:((z=r.learners)==null?void 0:z.last_name)??"",learner_email:((c=r.learners)==null?void 0:c.email)??"",score:r.score,passed:r.passed,total_questions:r.total_questions,correct_answers:r.correct_answers,answers:Array.isArray(r.answers
1)?r.answers:[],started_at:r.started_at,completed_at:r.completed_at,created_at:r.created_at}});B(V)}catch(i){console.error("Error loading quiz results:",i),g.error(s("common.error"))}finally{O(!1)}})()},[b,p,s]);const o=d.useMemo(()=>u?w.filter(t=>t.learner_id===u):w,[w,u]),U=d.useMemo(()=>{if(!u)return"";const t=w.find(l=>l.learner_id===u);return t?`${t.learner_first_name} ${t.learner_last_name}`:""},[u,w]),oe=()=>{C.delete("learner"),ee(C)},ce=()=>{if(!te){g.error(s("quiz_results.export_pro_only",{defaultValue:"L'export Excel des résultats est réservé à l'offre Pro. Passez à l'offre Pro pour télécharger les résultats détaillés."}),{action:{label:s("common.upgrade",{defaultValue:"Passer au Pro"}),onClick:()=>F("/dashboard/billing")}});return}if(o.length===0){g.error(s("quiz_results.no_data_to_export"));return}const t=y.json_to_sheet(o.map(a=>({[s("quiz_results.first_name")]:a.learner_first_name,[s("quiz_results.last_name")]:a.learner_last_name,[s("quiz_results.email")]:a.learner_email,[s("quiz_results.score")]:a.score,[s("quiz_results.status")]:a.passed?s("quiz_results.passed"):s("quiz_results.failed"),[s("quiz_results.correct_answers")]:`${a.correct_answers}/${a.total_questions}`,[s("quiz_results.date")]:new Date(a.completed_at).toLocaleString()}))),l=o.flatMap(a=>a.answers.map((m,V)=>({[s("quiz_results.first_name")]:a.learner_first_name,[s("quiz_results.last_name")]:a.learner_last_name,[s("quiz_results.email")]:a.learner_email,[s("quiz_results.question_number")]:V+1,[s("quiz_results.question")]:m.question_text,[s("quiz_results.learner_answer")]:Array.isArray(m.selected_options)?m.selected_options.join(", "):String(m.selected_options||""),[s("quiz_results.correct_answer")]:Array.isArray(m.correct_options)?m.correct_options.join(", "):"",[s("quiz_results.status")]:m.is_correct?"✓ "+s("quiz_results.correct"):"✗ "+s("quiz_results.incorrect"),[s("quiz_results.explanation")]:m.explanation||""}))),i=y.book_new();if(y.book_append_sheet(i,t,s("quiz_results.results_sheet")),l.length>0){const a=y.json_to_sheet(l);y.book_append_sheet(i,a,s("quiz_results.details_sheet"))}const h=`quiz_results_${p}_${Date.now()}.xlsx`;Ne(i,h),g.success(s("quiz_results.export_success"))},me=async()=>{if(b){Q(!0);try{const{error:t}=await A.from("quiz_responses").delete().in("id",o.map(l=>l.id));if(t)throw t;B([]),g.success(s("quiz_results.delete_success",{defaultValue:"Tous les résultats ont été effacés"}))}catch(t){console.error("Error deleting results:",t),g.error(s("common.error"))}finally{Q(!1)}}},X=t=>{I(t),k(!0)},x=o.length,de=x>0?Math.round(o.reduce((t,l)=>t+l.score,0)/x):0,ue=x>0?Math.round(o.filter(t=>t.passed).length/x*100):0;if(d.useEffect(()=>{u&&!L&&o.length===1&&!P&&(I(o[0]),k(!0))},[u,L,o]),L)return e.jsx(J,{children:e.jsx("div",{className:"flex min-h-[60vh] items-center justify-center",children:e.jsx(He,{className:"h-8 w-8 animate-spin text-primary"})})});const K=n&&e.jsxs("div",{className:"space-y-4",children:[e.jsx(_,{children:e.jsx(f,{className:"pt-6",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("quiz_results.final_score")}),e.jsxs("p",{className:"text-2xl font-bold",children:[n.score,"%"]})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:s("quiz_results.correct_answers")}),e.jsxs("p",{className:"text-2xl font-bold",children:[n.correct_answers,"/",n.total_questions]})]})]})})}),e.jsx("div",{className:"space-y-3",children:Array.isArray(n.answers)&&n.answers.map((t,l)=>e.jsx(_,{className:t.is_correct?"border-primary/20 bg-primary/5":"border-destructive/20 bg-destructive/5",children:e.jsx(f,{className:"pt-4 pb-4",children:e.jsxs("div",{className:"flex items-start gap-3",children:[t.is_correct?e.jsx(R,{className:"h-5 w-5 text-primary shrink-0 mt-0.5"}):e.jsx(M,{className:"h-5 w-5 text-destructive shrink-0 mt-0.5"}),e.jsxs("div",{className:"flex-1 space-y-2 min-w-0",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium text-muted-foreground",children:s("quiz_results.question_num",{num:l+1})}),e.jsx("p",{className:"font-medium text-sm",children:t.question_text})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[s("quiz_results.learner_answer"),":"]}),e.jsx("div",{className:"pl-2",children:Array.isArray(t.selected_options)&&t.selected_options.length>0?t.selected_options.map((i,h)=>e.jsxs("p",{className:"text-sm break-words",children:["• ",i]},h)):e.jsx("p",{className:"text-sm text-muted-foreground italic",children:s("quiz_share.no_answer",{defaultValue:"Aucune réponse"})})})]}),!t.is_correct&&Array.isArray(t.correct_options)&&t.correct_options.length>0&&e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[s("quiz_results.correct_answer"),":"]}),e.jsx("div",{className:"pl-2",children:t.correct_options.map((i,h)=>e.jsxs("p",{className:"text-sm font-medium text-primary break-words",children:["• ",i]},h))})]}),t.explanation&&e.jsxs("div",{className:"pt-2 border-t",children:[e.jsxs("p",{className:"text-xs text-muted-foreground mb-1",children:[s("quiz_results.explanation"),":"]}),e.jsx("p",{className:"text-sm break-words",children:t.explanation})]})]})]})})},l))})]}),W=`${s("quiz_results.learner_answers")} - ${n==null?void 0:n.learner_first_name} ${n==null?void 0:n.learner_last_name}`,xe=t=>e.jsx(_,{className:"mb-3",children:e.jsxs(f,{className:"pt-4 pb-4 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("p",{className:"font-medium text-sm truncate",children:[t.learner_first_name," ",t.learner_last_name]}),e.jsx("p",{className:"text-xs text-muted-foreground truncate",children:t.learner_email})]}),t.passed?e.jsxs(S,{variant:"default",className:"gap-1 shrink-0 text-xs",children:[e.jsx(R,{className:"h-3 w-3"}),s("quiz_results.passed")]}):e.jsxs(S,{variant:"destructive",className:"gap-1 shrink-0 text-xs",children:[e.jsx(M,{className:"h-3 w-3"}),s("quiz_results.failed")]})]}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-lg font-bold",children:[t.score,"%"]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["(",t.correct_answers,"/",t.total_questions,")"]})]}),e.jsxs(v,{variant:"ghost",size:"sm",onClick:()=>X(t),className:"h-8 px-2",children:[e.jsx(Z,{className:"h-4 w-4 mr-1"}),s("quiz_results.view_details")]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:new Date(t.completed_at).toLocaleStr
1ing()})]})},t.id);return e.jsxs(J,{children:[e.jsxs("div",{className:"max-w-7xl",children:[e.jsxs("div",{className:"mb-6",children:[e.jsxs(v,{variant:"ghost",onClick:()=>F(`/dashboard/projects/${b}`),className:"mb-4 -ml-2",size:"sm",children:[e.jsx(Oe,{className:"mr-2 h-4 w-4"}),s("quiz_results.back_to_project")]}),e.jsxs("div",{className:"relative overflow-hidden rounded-2xl border border-border bg-card shadow-sm",children:[e.jsx("div",{className:"h-1 w-full bg-gradient-to-r from-primary via-sky-400 to-fuchsia-500"}),e.jsx("div",{className:"pointer-events-none absolute -top-20 -left-16 h-56 w-56 rounded-full bg-primary/15 blur-3xl"}),e.jsx("div",{className:"pointer-events-none absolute -bottom-24 -right-16 h-56 w-56 rounded-full bg-fuchsia-500/10 blur-3xl"}),e.jsxs("div",{className:"relative flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4 px-4 sm:px-5 py-3 sm:py-4",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-1",children:[e.jsx("div",{className:"flex h-9 w-9 sm:h-10 sm:w-10 items-center justify-center rounded-xl bg-gradient-to-br from-primary via-sky-500 to-fuchsia-500 shadow-md shrink-0",children:e.jsx(Be,{className:"h-4 w-4 sm:h-5 sm:w-5 text-white"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs sm:text-sm text-muted-foreground mb-0.5 min-w-0",children:[e.jsx(Ie,{className:"h-3.5 w-3.5 shrink-0 text-primary"}),e.jsx("span",{className:"font-semibold text-foreground/80 truncate",children:ae})]}),e.jsx("h1",{className:"text-lg sm:text-2xl font-bold bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent break-words leading-tight",children:ie})]})]}),u&&U&&e.jsxs("div",{className:"flex items-center gap-2 rounded-lg bg-primary/10 border border-primary/20 px-3 py-2 text-sm",children:[e.jsx(Qe,{className:"h-4 w-4 text-primary shrink-0"}),e.jsx("span",{className:"font-medium truncate",children:U}),e.jsx(v,{variant:"ghost",size:"icon",className:"h-6 w-6 shrink-0 rounded-full hover:bg-primary/20",onClick:oe,title:re?"Voir tous les résultats":"View all results",children:e.jsx(Ue,{className:"h-3.5 w-3.5"})})]}),e.jsxs("div",{className:"flex gap-2 shrink-0",children:[e.jsxs(Se,{children:[e.jsx(Ee,{asChild:!0,children:e.jsxs(v,{variant:"destructive",size:"sm",disabled:x===0||ne,children:[e.jsx(Xe,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:s("quiz_results.delete_all",{defaultValue:"Effacer"})})]})}),e.jsxs(Le,{children:[e.jsxs(Pe,{children:[e.jsx(Ve,{children:s("quiz_results.delete_confirm_title",{defaultValue:"Effacer tous les résultats ?"})}),e.jsx($e,{children:s("quiz_results.delete_confirm_desc",{defaultValue:"Cette action est irréversible. Tous les résultats des apprenants pour ce quiz seront définitivement supprimés.",count:x})})]}),e.jsxs(Re,{children:[e.jsx(Me,{children:s("common.cancel",{defaultValue:"Annuler"})}),e.jsx(Fe,{onClick:me,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:s("quiz_results.delete_confirm_button",{defaultValue:"Oui, tout effacer"})})]})]})]}),e.jsxs(v,{onClick:ce,size:"sm",disabled:x===0,children:[e.jsx(Ke,{className:"h-4 w-4 sm:mr-2"}),e.jsx("span",{className:"hidden sm:inline",children:s("quiz_results.export_excel")})]})]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 sm:gap-4 mb-6",children:[e.jsxs(_,{children:[e.jsx(D,{className:"pb-1 sm:pb-3 px-3 sm:px-6 pt-3 sm:pt-6",children:e.jsx(T,{className:"text-xs sm:text-sm font-medium text-muted-foreground",children:s("quiz_results.total_responses")})}),e.jsx(f,{className:"px-3 sm:px-6 pb-3 sm:pb-6",children:e.jsx("div",{className:"text-2xl sm:text-3xl font-bold",children:x})})]}),e.jsxs(_,{children:[e.jsx(D,{className:"pb-1 sm:pb-3 px-3 sm:px-6 pt-3 sm:pt-6",children:e.jsx(T,{className:"text-xs sm:text-sm font-medium text-muted-foreground",children:s("quiz_results.average_score")})}),e.jsx(f,{className:"px-3 sm:px-6 pb-3 sm:pb-6",children:e.jsxs("div",{className:"text-2xl sm:text-3xl font-bold",children:[de,"%"]})})]}),e.jsxs(_,{children:[e.jsx(D,{className:"pb-1 sm:pb-3 px-3 sm:px-6 pt-3 sm:pt-6",children:e.jsx(T,{className:"text-xs sm:text-sm font-medium text-muted-foreground",children:s("quiz_results.pass_rate")})}),e.jsx(f,{className:"px-3 sm:px-6 pb-3 sm:pb-6",children:e.jsxs("div",{className:"text-2xl sm:text-3xl font-bold",children:[ue,"%"]})})]})]}),e.jsxs(_,{children:[e.jsx(D,{className:"px-3 sm:px-6",children:e.jsx(T,{className:"text-base sm:text-lg",children:s("quiz_results.learner_responses")})}),e.jsx(f,{className:"px-3 sm:px-6",children:x===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground",children:e.jsx("p",{children:s("quiz_results.no_responses")})}):H?e.jsx("div",{children:o.map(xe)}):e.jsx("div",{className:"rounded-md border overflow-x-auto",children:e.jsxs(ge,{children:[e.jsx(be,{children:e.jsxs(Y,{children:[e.jsx(j,{children:s("quiz_results.first_name")}
1),e.jsx(j,{children:s("quiz_results.last_name")}),e.jsx(j,{children:s("quiz_results.email")}),e.jsx(j,{className:"text-center",children:s("quiz_results.score")}),e.jsx(j,{className:"text-center",children:s("quiz_results.status")}),e.jsx(j,{children:s("quiz_results.date")}),e.jsx(j,{className:"text-center",children:s("quiz_results.actions")})]})}),e.jsx(qe,{children:o.map(t=>e.jsxs(Y,{children:[e.jsx(N,{className:"font-medium",children:t.learner_first_name}),e.jsx(N,{children:t.learner_last_name}),e.jsx(N,{children:t.learner_email}),e.jsxs(N,{className:"text-center",children:[e.jsxs("span",{className:"font-semibold",children:[t.score,"%"]}),e.jsxs("span",{className:"text-muted-foreground text-sm ml-1",children:["(",t.correct_answers,"/",t.total_questions,")"]})]}),e.jsx(N,{className:"text-center",children:t.passed?e.jsxs(S,{variant:"default",className:"gap-1",children:[e.jsx(R,{className:"h-3 w-3"}),s("quiz_results.passed")]}):e.jsxs(S,{variant:"destructive",className:"gap-1",children:[e.jsx(M,{className:"h-3 w-3"}),s("quiz_results.failed")]})}),e.jsx(N,{children:new Date(t.completed_at).toLocaleString()}),e.jsx(N,{className:"text-center",children:e.jsxs(v,{variant:"ghost",size:"sm",onClick:()=>X(t),children:[e.jsx(Z,{className:"h-4 w-4 mr-1"}),s("quiz_results.view_details")]})})]},t.id))})]})})})]})]}),H?e.jsx(ke,{open:P,onOpenChange:k,children:e.jsxs(Ae,{children:[e.jsx(De,{className:"text-left",children:e.jsx(Te,{className:"text-base",children:W})}),e.jsx("div",{className:"px-4 pb-6 max-h-[70vh] overflow-y-auto",children:K})]})}):e.jsx(ze,{open:P,onOpenChange:k,children:e.jsxs(ve,{className:"max-w-3xl max-h-[80vh] overflow-y-auto",children:[e.jsx(we,{children:e.jsx(ye,{children:W})}),e.jsx("div",{className:"mt-4",children:K})]})})]})}export{mt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.