2 lines
7.7 KiB
JavaScript
2 lines
7.7 KiB
JavaScript
import{d as U,y as H,z as J,c as n,a as e,D as a,E as c,F as A,f as S,n as K,G as _,P as Q,h as j,i as B,U as W,T as X,j as u,x as Y,J as Z,r as G,u as ee,q as i,t as te}from"./index-DnbYEqLr.js";import{u as se,g as oe}from"./goals-f4yPn45c.js";const ae={class:"pb-6"},le={key:0,class:"glass-card p-12 text-center"},ne={class:"text-white/70"},ie={class:"mb-8"},re={class:"text-3xl font-bold text-white mb-2 drop-shadow-[0_2px_8px_rgba(0,0,0,0.6)]"},ce={class:"text-white/70"},de={class:"mb-8"},ue={class:"flex items-center justify-between mb-2"},pe={class:"text-sm text-white/60"},ge={class:"w-full h-2 bg-white/10 rounded-full overflow-hidden"},me={key:0,class:"glass-card p-6 mb-6 border-l-4 border-orange-400"},ve={class:"text-lg font-semibold text-white mb-1"},fe={class:"text-white/60 text-sm leading-relaxed"},he={class:"space-y-3"},_e={class:"flex items-start gap-4"},xe={class:"mt-0.5 shrink-0"},be={key:0,class:"w-6 h-6 rounded-full bg-green-500/20 flex items-center justify-center"},ke={key:1,class:"w-6 h-6 rounded-full bg-orange-500/20 flex items-center justify-center"},we={key:2,class:"w-6 h-6 rounded-full bg-white/10 flex items-center justify-center"},ye={class:"text-xs text-white/40 font-medium"},Se={class:"flex-1 min-w-0"},Ce={class:"text-base font-semibold text-white/90 mb-1"},De={class:"text-sm text-white/55 leading-relaxed"},Ie={key:0,class:"mt-4"},Ae=["onClick","disabled"],je=["onClick"],Be=["onClick"],Ge={key:3,disabled:"",class:"glass-button glass-button-sm rounded-lg px-5 py-2 text-sm font-medium opacity-50"},Me={key:1,class:"glass-card p-8 mt-6 text-center"},Te={class:"text-xl font-semibold text-white mb-2"},ze={class:"text-white/60 mb-6"},$e={key:0,class:"fixed bottom-20 left-1/2 -translate-x-1/2 z-50 max-w-md w-full px-4",role:"alert","aria-live":"assertive"},Ee={class:"bg-red-500/20 border border-red-500/40 backdrop-blur-sm rounded-lg px-4 py-3 text-red-200 text-sm flex items-center justify-between gap-3"},Le=U({__name:"GoalDetail",setup(Pe){const{t:l}=H(),M=ee(),C=Y(),b=J(),p=se(),d=u(()=>M.params.goalId),r=u(()=>oe(d.value)),m=G(!1),v=G("");let k;function T(s){v.value=s,k&&clearTimeout(k),k=setTimeout(()=>{v.value=""},5e3)}const g=u(()=>p.getGoalStatus(d.value)),w=u(()=>{if(!r.value)return new Set;const s=new Set;for(const t of r.value.steps)t.appId&&y(t.appId)&&s.add(t.id),p.progress[d.value]?.completedSteps.includes(t.id)&&s.add(t.id);return s}),f=u(()=>{if(!r.value)return 0;const s=r.value.steps;for(let t=0;t<s.length;t++){const o=s[t];if(o&&!w.value.has(o.id))return t}return s.length-1}),z=u(()=>Math.min(f.value+1,r.value?.steps.length||1)),$=u(()=>r.value?Math.round(w.value.size/r.value.steps.length*100):0),E=u(()=>g.value==="completed"?l("goalDetail.completed"):g.value==="in-progress"?l("goalDetail.inProgress"):l("goalDetail.notStarted")),L=u(()=>g.value==="completed"?"goal-status-badge-completed":g.value==="in-progress"?"goal-status-badge-in-progress":"goal-status-badge-not-started"),P=u(()=>{if(!r.value)return!1;const s=r.value.requiredApps.includes("bitcoin-knots"),t=!N("bitcoin-knots");return s&&t&&g.value!=="completed"});function x(s){return w.value.has(s.id)}const R={immich:["immich-server","immich-app","immich_server"],nextcloud:["nextcloud-aio","nextcloud-server"],"bitcoin-knots":["bitcoin","bitcoin-core"]};function D(s,t){if(s===t)return!0;const o=R[t];return o?o.includes(s):!1}function y(s){return Object.keys(b.packages).some(t=>D(t,s))}function N(s){return Object.entries(b.packages).some(([t,o])=>D(t,s)&&o.state==="running")}async function V(s){if(s.appId){m.value=!0,p.progress[d.value]||p.startGoal(d.value);try{await b.installPackage(s.appId,"","latest"),p.completeStep(d.value,s.id)}catch(t){T(`Install failed: ${t instanceof Error?t.message:"Unknown error"}`)}finally{m.value=!1}}}function F(s){p.completeStep(d.value,s.id),s.appId&&C.push(`/dashboard/apps/${s.appId}`)}function O(s){p.progress[d.value]||p.startGoal(d.value),p.completeStep(d.value,s.id)}function q(){C.push("/dashboard")}return(s,t)=>(i(),n("div",ae,[e("button",{onClick:q,class:"flex items-center gap-2 text-white/60 hover:text-white mb-6 transition-colors"},[t[1]||(t[1]=e("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)),e("span",null,a(c(l)("goalDetail.backToGoals")),1)]),r.value?(i(),n(A,{key:1},[e("div",ie,[e("h1",re,a(r.value.title),1),e("p",ce,a(r.value.subtitle),1)]),e("div",de,[e("div",ue,[e("span",pe,a(c(l)("goalDetail.stepOf",{current:z.value,total:r.value.steps.length})),1),e("span",{class:S(["goal-status-badge",L.value])},a(E.value),3)]),e("div",ge,[e("div",{class:S(["h-full rounded-full transition-all duration-500 ease-out",g.value==="completed"?"bg-green-400":"bg-orange-400"]),style:K({width:`${$.value}%`})},null,6)])]),P.value?(i(),n("div",me,[e("h3",ve,a(c(l)("goalDetail.syncTitle")),1),e("p",fe,a(c(l)("goalDetail.syncMessage")),1)])):_("",!0),e("div",he,[(i(!0),n(A,null,Q(r.value.steps,(o,h)=>(i(),n("div",{key:o.id,class:"glass-card p-0 overflow-hidden"},[e("div",{class:S(["goal-step",{"goal-step-completed":x(o),"goal-step-active":h===f.value&&g.value!=="completed","goal-step-pending":h>f.value&&!x(o)}])},[e("div",_e,[e("div",xe,[x(o)?(i(),n("div",be,[...t[2]||(t[2]=[e("svg",{class:"w-4 h-4 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})],-1)])])):h===f.value&&m.value?(i(),n("div",ke,[...t[3]||(t[3]=[e("svg",{class:"w-4 h-4 text-orange-400 animate-spin",fill:"none",viewBox:"0 0 24 24"},[e("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"}),e("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})],-1)])])):(i(),n("div",we,[e("span",ye,a(h+1),1)]))]),e("div",Se,[e("h3",Ce,a(o.title),1),e("p",De,a(o.description),1),h===f.value&&g.value!=="completed"?(i(),n("div",Ie,[o.action==="install"&&o.appId&&!y(o.appId)?(i(),n("button",{key:0,onClick:I=>V(o),disabled:m.value,class:"glass-button glass-button-sm rounded-lg px-5 py-2 text-sm font-medium"},a(m.value?c(l)("common.installing"):c(l)("goalDetail.installApp",{name:o.title.replace("Install ","")})),9,Ae)):o.action==="configure"?(i(),n("button",{key:1,onClick:I=>F(o),class:"glass-button glass-button-sm rounded-lg px-5 py-2 text-sm font-medium"},a(c(l)("goalDetail.openAndConfigure")),9,je)):o.action==="info"?(i(),n("button",{key:2,onClick:I=>O(o),class:"glass-button glass-button-sm rounded-lg px-5 py-2 text-sm font-medium"},a(c(l)("goalDetail.iveDoneThis")),9,Be)):x(o)||y(o.appId||"")?(i(),n("button",Ge,a(c(l)("goalDetail.complete")),1)):_("",!0)])):_("",!0)])])],2)]))),128))]),g.value==="completed"?(i(),n("div",Me,[t[4]||(t[4]=e("div",{class:"w-16 h-16 mx-auto mb-4 rounded-full bg-green-500/20 flex items-center justify-center"},[e("svg",{class:"w-8 h-8 text-green-400",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})])],-1)),e("h2",Te,a(c(l)("goalDetail.allSet")),1),e("p",ze,a(c(l)("goalDetail.goalReady",{title:r.value.title})),1),j(c(W),{to:"/dashboard/apps",class:"glass-button rounded-lg px-6 py-3 font-medium"},{default:B(()=>[Z(a(c(l)("goalDetail.viewMyServices")),1)]),_:1})])):_("",!0)],64)):(i(),n("div",le,[e("p",ne,a(c(l)("goalDetail.notFound")),1)])),j(X,{name:"fade"},{default:B(()=>[v.value?(i(),n("div",$e,[e("div",Ee,[e("span",null,a(v.value),1),e("button",{onClick:t[0]||(t[0]=o=>v.value=""),class:"text-red-300 hover:text-white shrink-0"},"×")])])):_("",!0)]),_:1})]))}}),Ve=te(Le,[["__scopeId","data-v-35eaa724"]]);export{Ve as default};
|