PageSourceSearch

https://buddicarsv.lovable.app/assets/sakai.index-BQcp2j0t.js

js buddicarsv.lovable.app collected 2026-10-03 03:24:51 UTC 11,856 bytes, 6 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/visits.functions-BsFZ1OZG.js","assets/sonner-D-yLv_Jo.js","assets/index-jOKgC_H_.js"])))=>i.map(i=>d[i]);
2import{r,_ as te,j as e,L as se}from"./index-jOKgC_H_.js";import{u as k,T as re,t as S}from"./sonner-D-yLv_Jo.js";import{i as ae,l as x}from"./liff-Y5tXGdX_.js";import{c as ne,e as oe,f as le,h as ie,S as P,i as de,j as ce,k as F}from"./sakai.functions-ChzLU5Qa.js";const ue="/__l5e/assets-v1/c9898b9a-27ae-46fb-9af4-f83e9c79a032/sakai-grand-open.png",me={url:ue},xe=5e3;function pe(i){return new Date(new Date(i).getTime()+9*36e5)}function u(i){const d=new Date(`${i}T00:00:00+09:00`),g=["日","月","火","水","木","金","土"][d.getDay()];return`${d.getMonth()+1}月${d.getDate()}日(${g})`}function l(i){const d=pe(i);return`${String(d.getUTCHours()).padStart(2,"0")}:${String(d.getUTCMinutes()).padStart(2,"0")}`}function ye(){const i=k(ne),d=k(oe),g=k(le),R=k(ie),[U,V]=r.useState([]),[H,O]=r.useState([]),[o,q]=r.useState(null),[a,w]=r.useState(null),_=r.useRef(null),[C,D]=r.useState([]),[A,M]=r.useState(null),[y,E]=r.useState(""),[I,K]=r.useState(""),[T,G]=r.useState(""),[p,Y]=r.useState(""),[f,X]=r.useState(""),[c,z]=r.useState(P[0]),j=F(c),h=j==="sales"?U:H,[L,B]=r.useState(!1),[N,J]=r.useState(null);r.useEffect(()=>{ae().then(t=>{q(t),t?.idToken&&te(async()=>{const{recordVisit:s}=await import("./visits.functions-BsFZ1OZG.js");return{recordVisit:s}},__vite__mapDeps([0,1,2])).then(({recordVisit:s})=>{s({data:{lineIdToken:t.idToken,path:"/sakai"}}).catch(()=>{})})})},[]),r.useEffect(()=>{o?.displayName&&!y&&E(o.displayName)},[o]);const m=r.useCallback(async()=>{try{const t=await i();V(t.salesSlots),O(t.purchaseSlots)}catch{}},[i]);r.useEffect(()=>{m();const t=setInterval(m,xe);return()=>clearInterval(t)},[m]);const v=r.useCallback(async()=>{if(!o?.idToken)return D([]);const t=await g({data:{lineIdToken:o.idToken}});t.ok&&D(t.bookings)},[o?.idToken,g]);r.useEffect(()=>{v()},[v]),r.useEffect(()=>{if(!a)return;const t=h.find(s=>s.startIso===a.startIso);t&&w(t)},[h]);const Q=r.useMemo(()=>{const t=new Map;for(const s of h){const n=t.get(s.date)??[];n.push(s),t.set(s.date,n)}return t},[h]),W=async t=>{if(t.preventDefault(),!!a){B(!0);try{const s=await d({data:{date:a.date,hour:a.hour,name:y.trim(),vehicle:T.trim(),phone:I.trim(),consultation_type:c,interested_vehicle:c!=="査定希望"&&p.trim()?p.trim():null,notes:f.trim()?f.trim():null,lineIdToken:o?.idToken??null}});if(!s.ok){S.error(s.error),m();return}
2try{if(x.isInClient?.()&&typeof x.sendMessages=="function"){const n=c!=="査定希望"&&p.trim()?`気になる車種:${p.trim()}
3`:"",$=f.trim()?`備考:${f.trim()}
4`:"",b=["【BUDDICA 堺 オープンイベント 予約完了】",`日時:${u(a.date)} ${l(a.startIso)}〜${l(a.endIso)}`,`お名前:${y.trim()}`,`お車:${T.trim()}`,`ご相談内容:${c}`,`電話番号:${I.trim()}`,`${n}${$}`.trimEnd(),"","当日のご来店をお待ちしております。"].filter(ee=>ee!=="").join(`
5`);await x.sendMessages([{type:"text",text:b}])}}catch(n){console.warn("[LIFF] sendMessages failed",n)}J({date:a.date,hour:a.hour}),v(),m()}catch{S.error("通信エラーが発生しました")}finally{B(!1)}}},Z=async t=>{if(o?.idToken&&confirm(`${u(t.slot_start.slice(0,10))} ${l(t.slot_start)} の予約をキャンセルしますか?`)){M(t.id);try{const s=await R({data:{id:t.id,lineIdToken:o.idToken}});if(!s.ok){S.error(s.error||"キャンセルに失敗しました");return}try{x.isInClient?.()&&typeof x.sendMessages=="function"&&await x.sendMessages([{type:"text",text:["【BUDDICA 堺 オープンイベント 予約キャンセル】",`日時:${u(t.slot_start.slice(0,10))} ${l(t.slot_start)}〜${l(t.slot_end)}`,"またのご来店をお待ちしております。"].join(`
6`)}])}catch(n){console.warn("[LIFF] sendMessages failed",n)}S.success("予約をキャンセルしました"),await Promise.all([v(),m()])}finally{M(null)}}};if(N){const t=h.find(s=>s.date===N.date&&s.hour===N.hour);return e.jsx("div",{className:"min-h-screen bg-background p-6 flex items-center justify-center",children:e.jsxs("div",{className:"max-w-md w-full overflow-hidden rounded-2xl border-2 border-primary bg-card",children:[e.jsxs("div",{className:"bg-primary px-5 py-7 text-center text-primary-foreground",children:[e.jsx("div",{className:"mx-auto flex h-16 w-16 items-center justify-center rounded-full bg-primary-foreground/20 text-4xl",children:"✓"}),e.jsx("h1",{className:"mt-3 text-xl font-bold",children:"予約が完了しました"}),e.jsx("p",{className:"mt-1 text-xs opacity-90",children:"BUDDICA 堺 オープンイベント"})]}),e.jsx("div",{className:"space-y-2 p-5 text-sm",children:e.jsxs("div",{className:"flex justify-between border-b border-border pb-2",children:[e.jsx("span",{className:"text-muted-foreground",children:"日時"}),e.jsxs("span",{className:"font-semibold",children:[u(N.date)," ",t?`${l(t.startIso)}〜${l(t.endIso)}`:""]})]})}),e.jsx("div",{className:"px-5 pb-5",children:e.jsx(se,{to:"/sakai",className:"block w-full rounded-lg bg-primary py-2.5 text-center text-sm font-bold text-primary-foreground",children:"トップに戻る"})})]})})}return e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(re,{}),e.jsx("header",{className:"bg-secondary text-secondary-foreground px-6 py-5",children:e.jsxs("div",{className:"max-w-2xl mx-auto",children:[e.jsx("div",{className:"text-xs text-primary font-bold tracking-widest",children:"BUDDICA 堺"}),e.jsx("h1",{className:"text-xl font-bold",children:"オープンイベント予約"}),e.jsxs("p",{className:"text-xs mt-1 opacity-80",children:["2026/8/8(金)・8/9(土) / 2時間枠 / 各枠",de,"組まで"]})]})}),e.jsxs("main",{className:"max-w-2xl mx-auto p-6 space-y-6",children:[e.jsx("section",{className:"rounded-2xl overflow-hidden border border-border",children:e.jsx("img",{src:me.url,alt:"BUDDICA 大阪堺支社 GRAND OPEN 8/8・8/9",className:"w-full h-auto object-cover",loading:"eager"})}),C.length>0&&e.jsxs("section",{className:"bg-card border-2 border-primary rounded-2xl p-5 space-y-3",children:[e.jsx("h2",{className:"text-sm font-bold",children:"あなたの予約"}),e.jsx("ul",{className:"space-y-2",children:C.map(t=>e.jsxs("li",{className:"flex items-center justify-between gap-3 bg-muted/50 rounded-xl p-3",children:[e.jsxs("div",{className:"text-sm",children:[e.jsxs("div",{className:"font-bold",children:[u(t.slot_start.slice(0,10))," ",l(t.slot_start),"〜",l(t.slot_end)]}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[t.name," / ",t.vehicle," / ",t.consultation_type]})]}),e.jsx("button",{type:"button",onClick:()=>Z(t),disabled:A===t.id,className:"text-xs px-3 py-2 rounded-lg border border-destructive text-destructive font-bold disabled:opacity-60 whitespace-nowrap",children:A===t.id?"...":"キャンセル"})]},t.id))})]}),e.jsxs("section",{className:"bg-card border border-border rounded-2xl p-5 space-y-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"font-bold text-sm mb-2",children:"ご相談内容"}),e.jsx("div",{className:"grid grid-cols-2 gap-2",children:P.map(t=>{const s=c===t,n=F(t);return e.jsxs("button",{type:"button",onClick:()=>{z(t),w(null)},className:`p-3 rounded-xl border text-sm font-bold transition ${s?"bg-primary text-primary-foreground border-primary":"bg-background border-border hover:border-primary"}`,children:[e.jsx("div",{children:t}),e.jsx("div",{className:"text-[10px] font-normal opacity-80 mt-0.5",children:n==="sales"?"販売相談 / 2時間枠":"買取査定 / 1時間枠"})]},t)})})]}),e.jsxs("div",{className:"flex items-center justify-between pt-2",children:[e.jsxs("h2",{className:"font-bold text-sm",children:["日時を選ぶ",e.jsxs("span",{className:"ml-2 text-[11px] font-normal text-muted-foreground",children:["(",j==="sales"?"2時間枠":"1時間枠",")"]})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:"自動更新中"})]}),[...ce].map(t=>e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"text-sm font-bold",children:u(t)}),e.jsx("div",{className:`grid gap-2 ${j==="sales"?"grid-cols-2":"grid-cols-3"}`,children:(Q.get(t)??[]).map(s=>
6{const n=a?.startIso===s.startIso,$=Math.max(0,s.capacity-s.count),b=s.full;return e.jsxs("button",{type:"button",disabled:b,onClick:()=>{w(s),setTimeout(()=>{_.current?.scrollIntoView({behavior:"smooth",block:"start"})},0)},className:`p-3 rounded-xl border text-left transition ${n?"bg-primary text-primary-foreground border-primary":b?"bg-muted text-muted-foreground border-border cursor-not-allowed":"bg-background border-border hover:border-primary"}`,children:[e.jsxs("div",{className:"text-sm font-bold",children:[String(s.hour).padStart(2,"0"),":00〜",String(s.hour+s.durationHours).padStart(2,"0"),":00"]}),e.jsx("div",{className:"text-[11px] mt-1 opacity-80",children:b?"満席":`残り ${$}枠 / ${s.capacity}`})]},s.startIso)})})]},t))]}),a&&e.jsxs("form",{ref:_,onSubmit:W,className:"bg-card border border-border rounded-2xl p-5 space-y-4 scroll-mt-4",children:[e.jsxs("h2",{className:"font-bold",children:[u(a.date)," ",String(a.hour).padStart(2,"0"),":00〜",String(a.hour+a.durationHours).padStart(2,"0"),":00"]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-sm font-medium",children:"お名前"}),e.jsx("input",{type:"text",value:y,onChange:t=>E(t.target.value),required:!0,maxLength:100,className:"mt-2 w-full px-3 py-2.5 rounded-lg border border-input bg-background"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-sm font-medium",children:"お車(車種・年式など)"}),e.jsx("input",{type:"text",value:T,onChange:t=>G(t.target.value),required:!0,maxLength:200,placeholder:"例: トヨタ アルファード 2020年",className:"mt-2 w-full px-3 py-2.5 rounded-lg border border-input bg-background"})]}),e.jsxs("div",{className:"text-xs text-muted-foreground -mt-2",children:["ご相談内容:",e.jsx("span",{className:"font-bold text-foreground",children:c}),"(",j==="sales"?"販売相談 / 2時間":"買取査定 / 1時間",")"]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-sm font-medium",children:"電話番号"}),e.jsx("input",{type:"tel",value:I,onChange:t=>K(t.target.value),required:!0,maxLength:20,placeholder:"09012345678",className:"mt-2 w-full px-3 py-2.5 rounded-lg border border-input bg-background"})]}),c!=="査定希望"&&e.jsxs("label",{className:"block",children:[e.jsxs("span",{className:"text-sm font-medium",children:["気になる車種 ",e.jsx("span",{className:"text-xs text-muted-foreground",children:"(任意)"})]}),e.jsx("input",{type:"text",value:p,onChange:t=>Y(t.target.value),maxLength:200,placeholder:"例: レクサス LX、ランクル250 など",className:"mt-2 w-full px-3 py-2.5 rounded-lg border border-input bg-background"})]}),e.jsxs("label",{className:"block",children:[e.jsxs("span",{className:"text-sm font-medium",children:["備考 ",e.jsx("span",{className:"text-xs text-muted-foreground",children:"(任意)"})]}),e.jsx("textarea",{value:f,onChange:t=>X(t.target.value),maxLength:1e3,rows:3,placeholder:"ご要望・ご質問などご自由にご記入ください",className:"mt-2 w-full px-3 py-2.5 rounded-lg border border-input bg-background"})]}),e.jsx("button",{type:"submit",disabled:L||a.full,className:"w-full py-3 rounded-xl bg-primary text-primary-foreground font-bold disabled:opacity-60",children:L?"予約中...":"この時間で予約する"})]}),e.jsxs("footer",{className:"text-[11px] text-muted-foreground pt-2 pb-8 leading-relaxed",children:["※完全予約制です。",e.jsx("br",{}),"※お一人様1予約までとなります。",e.jsx("br",{}),"※空き状況は自動的に最新化されます。"]})]})]})}export{ye as component};

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.