[{"data":1,"prerenderedAt":296},["ShallowReactive",2],{"/docs/base/jobs-base/client-events/training":3,"/docs/base/jobs-base/client-events/training-surround":282,"/docs/base/jobs-base/client-events/training-implemented-suggestions":295},{"id":4,"title":5,"body":6,"description":271,"extension":272,"head":273,"implementedSuggestions":273,"meta":274,"navigation":275,"path":277,"schemaOrg":273,"seo":278,"sitemap":279,"stem":280,"__hash__":281},"docs/1.docs/base/2.jobs-base/5.client-events/2.training.md","Training",{"type":7,"value":8,"toc":265},"minimark",[9,14,18,26,33,157,163,166,199,253,261],[10,11,13],"h2",{"id":12},"events-emitted-by-the-server","Events emitted by the server",[15,16,17],"p",{},"Training lifecycle events are refresh and presentation signals. They do not grant permission and\ntheir payloads must be treated as read-only.",[19,20,22],"h3",{"id":21},"sky_jobs_basetrainingupdated",[23,24,25],"code",{},"sky_jobs_base:training:updated",[15,27,28,29,32],{},"Emitted to online employees of the affected job after a successful mutation. The optional ",[23,30,31],{},"action","\nfield identifies the mutation that caused the refresh.",[34,35,41],"pre",{"className":36,"code":37,"filename":38,"language":39,"meta":40,"style":40},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","AddEventHandler(\"sky_jobs_base:training:updated\", function(change)\n    local action = type(change) == \"table\" and change.action or \"unknown\"\n    print(\"Training data changed:\", action)\nend)\n","client.lua","lua","",[23,42,43,81,131,149],{"__ignoreMap":40},[44,45,48,52,56,60,63,65,68,72,74,78],"span",{"class":46,"line":47},"line",1,[44,49,51],{"class":50},"s2Zo4","AddEventHandler",[44,53,55],{"class":54},"sTEyZ","(",[44,57,59],{"class":58},"sMK4o","\"",[44,61,25],{"class":62},"sfazB",[44,64,59],{"class":58},[44,66,67],{"class":54},", ",[44,69,71],{"class":70},"s7zQu","function",[44,73,55],{"class":58},[44,75,77],{"class":76},"sHdIc","change",[44,79,80],{"class":58},")\n",[44,82,84,87,90,93,96,99,102,105,108,111,114,117,120,123,125,128],{"class":46,"line":83},2,[44,85,86],{"class":58},"    local",[44,88,89],{"class":54}," action ",[44,91,92],{"class":58},"=",[44,94,95],{"class":50}," type",[44,97,98],{"class":54},"(change) ",[44,100,101],{"class":58},"==",[44,103,104],{"class":58}," \"",[44,106,107],{"class":62},"table",[44,109,110],{"class":58},"\" ",[44,112,113],{"class":58},"and",[44,115,116],{"class":54}," change.",[44,118,31],{"class":119},"sBMFI",[44,121,122],{"class":58}," or",[44,124,104],{"class":58},[44,126,127],{"class":62},"unknown",[44,129,130],{"class":58},"\"\n",[44,132,134,137,139,141,144,146],{"class":46,"line":133},3,[44,135,136],{"class":50},"    print",[44,138,55],{"class":54},[44,140,59],{"class":58},[44,142,143],{"class":62},"Training data changed:",[44,145,59],{"class":58},[44,147,148],{"class":54},", action)\n",[44,150,152,155],{"class":46,"line":151},4,[44,153,154],{"class":70},"end",[44,156,80],{"class":54},[19,158,160],{"id":159},"sky_jobs_basetrainingnotification",[23,161,162],{},"sky_jobs_base:training:notification",[15,164,165],{},"Emitted to the affected employee for enrollment changes, waitlist promotion, session cancellation,\nreminders, and qualification issue or revocation. The built-in handler localizes the message and adds\nit to the tablet notification center.",[15,167,168,169,67,172,67,175,67,178,67,181,67,184,67,187,190,191,194,195,198],{},"Common payload fields include ",[23,170,171],{},"id",[23,173,174],{},"key",[23,176,177],{},"title",[23,179,180],{},"body",[23,182,183],{},"replacements",[23,185,186],{},"startsAt",[23,188,189],{},"kind",",\n",[23,192,193],{},"tone",", and ",[23,196,197],{},"timestamp",".",[34,200,202],{"className":36,"code":201,"filename":38,"language":39,"meta":40,"style":40},"AddEventHandler(\"sky_jobs_base:training:notification\", function(notification)\n    print(\"Training notification:\", notification.key)\nend)\n",[23,203,204,227,247],{"__ignoreMap":40},[44,205,206,208,210,212,214,216,218,220,222,225],{"class":46,"line":47},[44,207,51],{"class":50},[44,209,55],{"class":54},[44,211,59],{"class":58},[44,213,162],{"class":62},[44,215,59],{"class":58},[44,217,67],{"class":54},[44,219,71],{"class":70},[44,221,55],{"class":58},[44,223,224],{"class":76},"notification",[44,226,80],{"class":58},[44,228,229,231,233,235,238,240,243,245],{"class":46,"line":83},[44,230,136],{"class":50},[44,232,55],{"class":54},[44,234,59],{"class":58},[44,236,237],{"class":62},"Training notification:",[44,239,59],{"class":58},[44,241,242],{"class":54},", notification.",[44,244,174],{"class":119},[44,246,80],{"class":54},[44,248,249,251],{"class":46,"line":133},[44,250,154],{"class":70},[44,252,80],{"class":54},[254,255,258],"callout",{"color":256,"icon":257},"warning","i-lucide-shield-alert",[15,259,260],{},"These are server-to-client events, not a mutation API. Locally triggering them can only imitate a\nrefresh or notification on that client; it cannot modify courses, enrollments, results,\nqualifications, or audit history.",[262,263,264],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":40,"searchDepth":47,"depth":83,"links":266},[267],{"id":12,"depth":83,"text":13,"children":268},[269,270],{"id":21,"depth":133,"text":25},{"id":159,"depth":133,"text":162},"Read-only Training App lifecycle and notification events emitted to clients.","md",null,{},{"icon":276},"i-lucide-graduation-cap","/docs/base/jobs-base/client-events/training",{"title":5,"description":271},{"loc":277},"1.docs/base/2.jobs-base/5.client-events/2.training","n0aFv-Y6A6SVeRFTFgc81dmT8OKyjN_cWMaS1xuzUYU",[283,289],{"title":284,"path":285,"stem":286,"description":287,"icon":288,"children":-1},"Emergency Dispatch","/docs/base/jobs-base/client-events/emergency-dispatch","1.docs/base/2.jobs-base/5.client-events/1.emergency-dispatch","Public client events for reacting to Emergency Dispatch state and resolving caller incidents.","i-lucide-siren",{"title":290,"path":291,"stem":292,"description":293,"icon":294,"children":-1},"Media Providers","/docs/base/jobs-base/media-providers","1.docs/base/2.jobs-base/6.media-providers","Configure FiveManage, Qbox CDN, or register a custom media provider for tablet, gallery, camera, CCTV, speedcam, and bodycam uploads.","i-lucide-cloud-upload",[],1786395267668]