PageSourceSearch

https://askbina.ai/assets/ManageGoogleCalendar-CVH2aYeM.js

js askbina.ai collected 2026-10-05 13:01:15 UTC 7,374 bytes, 1 lines download raw bytes

1import{r,a6 as d,j as e,t as f,w as N,x as S,z as b,v as C,B as o,R as v,X as w,a9 as F,n as z}from"./index-CcMLSBG6.js";import{T as U,a as B,b as _,c as I}from"./tabs-3XcCUx4u.js";import{I as u}from"./input-6C8gsjbZ.js";import{L as m}from"./label-6YVF-Fk-.js";import{S as R}from"./switch-DimzQKXP.js";import{A as M}from"./AdminLayout-BvLDTXmd.js";import{S as K}from"./separator-CI5RXlzM.js";import{C as O}from"./calendar-70KlfpAC.js";import{T as P}from"./triangle-alert-B1Ayw7eC.js";import"./video-CeYomunc.js";import"./chart-no-axes-column-D2swLHl6.js";import"./ticket-CZJGnvk2.js";import"./bell-BY-kgHnA.js";function re(){const[V,A]=r.useState(null),[E,L]=r.useState(!1),[x,j]=r.useState([]),[T,g]=r.useState(!0),[t,c]=r.useState({}),[l,y]=r.useState({calendarId:"",apiKey:"",clientId:"",autoSync:!0,reminderHours:24});r.useEffect(()=>{D()},[]);const D=async()=>{try{g(!0);const s=await d.User.me();if(A(s),s.role==="admin"){L(!0);const a=await d.Advisor.list();j(a||[]);const n={};a.forEach(h=>{n[h.id]={lastSync:h.google_calendar_last_sync||null,status:h.google_calendar_connected?"connected":"disconnected"}}),c(n)}else try{const a=await d.Advisor.filter({email:s.email});if(a&&a.length>0){const n=a[0];j([n]),c({[n.id]:{lastSync:n.google_calendar_last_sync||null,status:n.google_calendar_connected?"connected":"disconnected"}}),n.google_calendar_settings&&y(n.google_calendar_settings)}}catch(a){console.error("Error loading advisor data:",a)}}catch(s){console.error("Error loading initial data:",s)}finally{g(!1)}},p=async s=>{try{c(a=>({...a,[s]:{...a[s],status:"syncing"}})),setTimeout(()=>{c(a=>({...a,[s]:{lastSync:new Date().toISOString(),status:"connected"}}))},2e3)}catch(a){console.error("Error syncing calendar:",a),c(n=>({...n,[s]:{...n[s],status:"error"}}))}},G=async s=>{try{c(a=>({...a,[s]:{lastSync:null,status:"disconnected"}}))}catch(a){console.error("Error disconnecting calendar:",a)}},i=(s,a)=>{y(n=>({...n,[s]:a}))},k=async()=>{try{if(!E&&x.length===1){const s=x[0];await d.Advisor.update(s.id,{google_calendar_settings:l,google_calendar_connected:t[s.id].status==="connected"})}}catch(s){console.error("Error saving settings:",s)}},H=(s,a)=>s==="connected"?e.jsxs("div",{className:"flex items-center text-green-600",children:[e.jsx(z,{className:"h-4 w-4 mr-1"}),e.jsx("span",{children:"מחובר"}),a&&e.jsxs("span",{className:"text-xs text-gray-500 mr-2",children:["סנכרון אחרון: ",new Date(a).toLocaleString("he-IL")]})]}):s==="disconnected"?e.jsxs("div",{className:"flex items-center text-gray-500",children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),e.jsx("span",{children:"לא מחובר"})]}):s==="syncing"?e.jsxs("div",{className:"flex items-center text-blue-600",children:[e.jsx(v,{className:"h-4 w-4 mr-1 animate-spin"}),e.jsx("span",{children:"מסנכרן..."})]}):s==="error"?e.jsxs("div",{className:"flex items-center text-red-600",children:[e.jsx(P,{className:"h-4 w-4 mr-1"}),e.jsx("span",{children:"שגיאה בסנכרון"})]}):null;return e.jsx(M,{currentPage:"ManageGoogleCalendar",children:e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex justify-between items-center",children:e.jsx("h1",{className:"text-3xl font-bold",children:"ניהול סנכרון יומן Google"})}),e.jsxs(U,{defaultValue:"sync",children:[e.jsxs(B,{className:"mb-4",children:[e.jsx(_,{value:"sync",children:"סנכרון יומנים"}),e.jsx(_,{value:"settings",children:"הגדרות"})]}),e.jsx(I,{value:"sync",children:e.jsxs(f,{children:[e.jsxs(N,{children:[e.jsx(S,{children:"סנכרון יומני יועצים"}),e.jsx(b,{children:"חיבור ליומן Google של היועצים יאפשר סנכרון אוטומטי של פגישות הייעוץ"})]}),e.jsx(C,{children:T?e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-4"}),e.jsx("p",{children:"טוען נתונים..."})]}):e.jsx("div",{className:"space-y-4",children:x.map(s=>{var a,n;return e.jsxs("div",{className:"p-4 border rounded-lg",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-medium",children:s.full_name}),e.jsx("p",{className:"text-sm text-gray-500",children:s.email})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[t[s.id]&&H(t[s.id].status,t[
1s.id].lastSync),((a=t[s.id])==null?void 0:a.status)==="connected"?e.jsxs(e.Fragment,{children:[e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>p(s.id),children:[e.jsx(v,{className:"h-4 w-4 mr-1"}),"סנכרן עכשיו"]}),e.jsxs(o,{variant:"outline",size:"sm",onClick:()=>G(s.id),children:[e.jsx(w,{className:"h-4 w-4 mr-1"}),"נתק"]})]}):e.jsxs(o,{className:"bg-blue-600 hover:bg-blue-700",size:"sm",onClick:()=>p(s.id),children:[e.jsx(O,{className:"h-4 w-4 mr-1"}),"חבר ליומן"]})]})]}),((n=t[s.id])==null?void 0:n.status)==="connected"&&e.jsxs("div",{className:"mt-4 pt-4 border-t",children:[e.jsx("h4",{className:"text-sm font-medium mb-2",children:"פעילות יומן אחרונה"}),e.jsxs("div",{className:"text-sm text-gray-500",children:[e.jsxs("p",{children:["סנכרון אחרון: ",t[s.id].lastSync?new Date(t[s.id].lastSync).toLocaleString("he-IL"):"לא זמין"]}),e.jsx("p",{children:"פגישות מסונכרנות: 15"})," "]})]})]},s.id)})})})]})}),e.jsx(I,{value:"settings",children:e.jsxs(f,{children:[e.jsxs(N,{children:[e.jsx(S,{children:"הגדרות סנכרון יומן Google"}),e.jsx(b,{children:"הגדר את פרטי החיבור ליומן Google והגדרות סנכרון"})]}),e.jsx(C,{children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"calendarId",children:"מזהה יומן (Calendar ID)"}),e.jsx(u,{id:"calendarId",value:l.calendarId,onChange:s=>i("calendarId",s.target.value),placeholder:"primary או כתובת אימייל של היומן"}),e.jsx("p",{className:"text-xs text-gray-500",children:"בדרך כלל זו כתובת האימייל של בעל היומן או 'primary' ליומן ברירת המחדל"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"clientId",children:"Client ID"}),e.jsx(u,{id:"clientId",value:l.clientId,onChange:s=>i("clientId",s.target.value),placeholder:"מזהה לקוח מ-Google Cloud Console"})]}),e.jsx(K,{className:"my-4"}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-lg font-medium",children:"הגדרות סנכרון"}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(m,{children:"סנכרון אוטומטי"}),e.jsx("p",{className:"text-sm text-gray-500",children:"סנכרון אוטומטי של היומן בכל שעה"})]}),e.jsx(R,{checked:l.autoSync,onCheckedChange:s=>i("autoSync",s)})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"reminderHours",children:"תזכורת לפגישה (שעות מראש)"}),e.jsx(u,{id:"reminderHours",type:"number",value:l.reminderHours,onChange:s=>i("reminderHours",Number(s.target.value)),min:"1",max:"72"})]})]})]})}),e.jsx(F,{className:"flex justify-end",children:e.jsx(o,{onClick:k,className:"bg-blue-600 hover:bg-blue-700",children:"שמור הגדרות"})})]})})]})," "]})})}export{re 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.