Files
archy-demo/web-dist/assets/GoalDetail-BDM8F7F1.js

2 lines
7.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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};