PageSourceSearch

https://getupearlier.com/assets/admin-workouts-CokIVBZh.js

js getupearlier.com collected 2026-10-05 21:53:54 UTC 12,525 bytes, 6 lines download raw bytes

1import{n as X,r as u,y as G,z as J,Q as b,j as e,L as F,o as l,b2 as B,C as W,p as T,q as D,X as f,s as P,I as c,a0 as N,a1 as Z,aB as ee}from"./index-B6_vnucu.js";import{T as se}from"./textarea-DiqO2JLY.js";import{S as A,a as M,b as U,c as z,d as n}from"./select-oLPa4aZ0.js";import{u as te}from"./use-toast-DLmmioNX.js";import{a as C}from"./admin-token-M7p4eARQ.js";import{A as ae}from"./admin-token-bar-BrsJOO_J.js";import{S as ie}from"./save-CushQOtE.js";import{C as re}from"./clock-DGLX5jPh.js";import{F as le}from"./flame-gThhhq7z.js";import"./check-cx9Tbdzi.js";import"./chevron-up-DTaqzwSi.js";/**
2 * @license lucide-react v0.453.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const ne=X("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]),h={title:"",description:"",category:"strength",difficulty:"beginner",duration:15,caloriesBurned:150,equipment:[],exercises:[],videoUrl:"",authorId:"michael",authorName:"Michael Baker",authorPhoto:"/api/placeholder/48/48"};function ye(){const[w,m]=u.useState(!1),[x,p]=u.useState(null),[t,a]=u.useState(h),[g,j]=u.useState(""),[r,d]=u.useState({name:"",sets:"",reps:"",description:""}),{toast:o}=te(),v=G(),{data:k=[],isLoading:L}=J({queryKey:["/api/workouts"]}),E=b({mutationFn:s=>C("/api/workouts",{method:"POST",body:s}),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/workouts"]}),m(!1),a(h),o({title:"Workout created successfully!"})},onError:s=>{o({title:"Failed to create workout",description:s==null?void 0:s.message,variant:"destructive"})}}),q=b({mutationFn:({id:s,data:i})=>C(`/api/workouts/${s}`,{method:"PATCH",body:i}),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/workouts"]}),p(null),a(h),o({title:"Workout updated successfully!"})},onError:s=>{o({title:"Failed to update workout",description:s==null?void 0:s.message,variant:"destructive"})}}),Q=b({mutationFn:s=>C(`/api/workouts/${s}`,{method:"DELETE"}),onSuccess:()=>{v.invalidateQueries({queryKey:["/api/workouts"]}),o({title:"Workout deleted successfully!"})},onError:s=>{o({title:"Failed to delete workout",description:s==null?void 0:s.message,variant:"destructive"})}}),V=s=>{s.preventDefault(),x?q.mutate({id:x,data:t}):E.mutate(t)},K=s=>{p(s.id),a({title:s.title,description:s.description,category:s.category,difficulty:s.difficulty,duration:s.duration,caloriesBurned:s.caloriesBurned,equipment:s.equipment||[],exercises:s.exercises||[],videoUrl:s.videoUrl||"",authorId:s.authorId||"michael",authorName:s.authorName||"Michael Baker",authorPhoto:s.authorPhoto||"/api/placeholder/48/48"}),m(!0)},S=()=>{m(!1),p(null),a(h),j(""),d({name:"",sets:"",reps:"",description:""})},I=()=>{g.trim()&&(a({...t,equipment:[...t.equipment,g.trim()]}),j(""))},H=s=>{a({...t,equipment:t.equipment.filter((i,y)=>y!==s)})},R=()=>{if(r.name.trim()){const s={name:r.name.trim(),sets:r.sets?parseInt(r.sets):void 0,reps:r.reps||void 0,description:r.description||void 0};a({...t,exercises:[...t.exercises,s]}),d({name:"",sets:"",reps:"",description:""})}},$=s=>{a({...t,exercises:t.exercises.filter((i,y)=>y!==s)})},Y=s=>{const i=s.match(/(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})/);return i?i[1]:null},_=s=>{switch(s){case"beginner":return"bg-green-100 text-green-800";case"intermediate":return"bg-yellow-100 text-yellow-800";case"advanced":return"bg-red-100 text-red-800";default:return"bg-gray-100 text-gray-800"}},O=s=>{switch(s){case"strength":return"bg-blue-100 text-blue-800";case"cardio":return"bg-green-100 text-green-800";case"hiit":return"bg-red-100 text-red-800";case"flexibility":return"bg-purple-100 text-purple-800";case"yoga":return"bg-indigo-100 text-indigo-800";case"calisthenics":return"bg-orange-100 text-orange-800";case"tutorial":return"bg-pink-100 text-pink-800";default:return"bg-gray-100 text-gray-800"}};return L?e.jsx("div",{className:"min-h-screen bg-gradient-to-b from-[#BCDCEC] via-[#E8F4F8] to-white",children:e.jsx("div",{className:"container mx-auto px-4 py-8",children:e.jsxs("div",{className:"animate-pulse",children:[e.jsx("div",{className:"h-8 bg-gray-200 rounded w-64 mb-8"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:[1,2,3].map(s=>e.jsx("div",{className:"h-96 bg-gray-200 rounded-lg"},s))})]})})}):e.jsx("div",{className:"min-h-screen bg-gradient-to-b from-[#BCDCEC] via-[#E8F4F8] to-white",children:e.jsx("div",{className:"container mx-auto px-4 py-8",children:e.jsxs("div",{className:"max-w-7xl mx-auto",children:[e.jsx(ae,{className:"mb-6 bg-white/80 backdrop-blur-sm"}),e.jsxs("div",{className:"flex items-center justify-between mb-8",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-gray-900",children:"Workout Management"}),e.jsx("p",{className:"text-gray-600 mt-2",children:"Create and manage workout videos and programs"})]}),e.jsxs("div",{className:"flex gap-4",children:[e.jsx(F,{href:"/workouts",children:e.jsx(l,{variant:"outline",children:"View Public Page"})}),e.jsxs(l,{onClick:()=>m(!0),disabled:w,children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Add Workout"]})]})]}),w&&e.jsxs(W,{className:"mb-8 bg-white/80 backdrop-blur-sm",children:[e.jsx(T,{children:e.jsxs(D,{className:"flex items-center justify-between",children:[x?"Edit Workout":"Create New Workout",e.jsx(l,{variant:"ghost",size:"sm",onClick:S,children:e.jsx(f,{className:"w-4 h-4"})})]})}),e.jsx(P,{children:e.jsxs("form",{onSubmit:V,className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Title"}),e.jsx(c,{value:t.title,onChange:s=>a({...t,title:s.target.value}),placeholder:"Workout title",required:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"YouTube Video URL"}),e.jsx(c,{value:t.videoUrl,onChange:s=>a({...t,videoUrl:s.target.value}),placeholder:"https://www.youtube.com/watch?v=..."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Description"}),e.jsx(se,{value:t.description,onChange:s=>a({...t,description:s.target.value}),placeholder:"Workout description",rows:3,required:!0})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Category"}),e.jsxs(A,{value:t.category,onValueChange:s=>a({...t,category:s}),children:[e.jsx(M,{children:e.jsx(U,{})}),e.jsxs(z,{children:[e.jsx(n,{value:"strength",children:"Strength"}),e.jsx(n,{value:"cardio",children:"Cardio"}),e.jsx(n,{value:"hiit",children:"HIIT"}),e.jsx(n,{value:"flexibility",children:"Flexibility"}),e.jsx(n,{value:"yoga",children:"Yoga"}),e.jsx(n,{value:"calisthenics",children:"Calisthenics"}),e.jsx(n,{value:"tutorial",children:"Tutorial"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Difficulty"}),e.jsxs(A,{value:t.difficulty,onValueChange:s=>a({...t,difficulty:s}),children:[e.jsx(M,{children:e.jsx(U,{})}),e.jsxs(z,{children:[e.jsx(n,{value:"beginner",children:"Beginner"}),e.jsx(n,{value:"intermediate",children:"Intermediate"}),e.jsx(n,{value:"advanced",children:"Advanced"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Duration (min)"}),e.jsx(c,{type:"number",value:t.duration,onChange:s=>a({...t,duration:parseInt(s.target.value)||0}),min:"1",max:"120"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Calories Burned"}),e.jsx(c,{type:"number",value:t.caloriesBurned,onChange:s=>a({...t,caloriesBurned:parseInt(s.target.value)||0}),min:"50",max:"1000"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Equipment"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(c,{value:g,onChange:s=>j(s.target.value),placeholder:"Add equipment (e.g. Dumbbells, Resistance bands)",onKeyPress:s=>s.key==="Enter"&&(s.preventDefault(),I())}),e.jsx(l,{type:"button",onClick:I,children:"Add"})]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:t.equipment.map((s,i)=>e.jsxs(N,{variant:"secondary",className:"gap-1",children:[s,e.jsx("button",{type:"button",onClick:()=>H(i),children:e.jsx(f,{className:"w-3 h-3"})})]},i))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium",children:"Exercises"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-2",children:[e.jsx(c,{value:r.name,onChange:s=>d({...r,name:s.target.value}),placeholder:"Exercise name"}),e.jsx(c,{value:r.sets,onChange:s=>d({...r,sets:s.target.value}),placeholder:"Sets (optional)",type:"number"}),e.jsx(c,{value:r.reps,onChange:s=>d({...r,reps:s.target.value}),placeholder:"Reps (e.g. 10-12)"}),e.jsx(l,{type:"button",onClick:R,children:"Add Exercise"})]}),e.jsx(c,{value:r.description,onChange:s=>d({...r,description:s.target.value}),placeholder:"Exercise description (optional)"}),e.jsx("div",{className:"space-y-2",children:t.exercises.map((s,i)=>e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded",children:[e.jsxs("div",{children:[e.jsx("span",{className:"font-medium",children:s.name}),s.sets&&s.reps&&e.jsxs("span",{className:"text-sm text-gray-600 ml-2",children:[s.sets," sets × ",s.reps]}),s.description&&e.jsx("p",{className:"text-sm text-gray-600",children:s.description})]}),e.jsx(l,{type:"button",variant:"ghost",size:"sm",onClick:()=>$(i),children:e.jsx(f,{className:"w-4 h-4"})})]},i))})]}),e.jsxs("div",{className:"flex gap-4",children:[e.jsxs(l,{type:"submit",disabled:E.isPending||q.isPending,children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),x?"Update Workout":"Create Workout"]}),e.jsx(l,{type:"button",variant:"outline",onClick:S,children:"Cancel"})]})]})})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:k.map(s=>{const i=s.videoUrl?Y(s.videoUrl):null;return e.jsxs(W,{className:"overflow-hidden bg-white/80 backdrop-blur-sm hover:shadow-lg transition-shadow",children:[i&&e.jsxs("div",{className:"relative",children:[e.jsx("img",{src:`https://img.youtube.com/vi/${i}/maxresdefault.jpg`,alt:s.title,className:"w-full h-48 object-cover"}),e.jsx("div",{className:"absolute inset-0 bg-black/20 flex items-center justify-center opacity-0 hover:opacity-100 transition-opacity",children:e.jsx("div",{className:"bg-white/90 rounded-full p-2",children:e.jsx(Z,{className:"w-6 h-6 text-primary"})})})]}),e.jsxs(T,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx(N,{className:O(s.category),children:s.category}),e.jsx(N,{variant:"outline",className:_(s.difficulty),children:s.difficulty})]}),e.jsx(D,{className:"text-lg",children:s.title})]}),e.jsxs(P,{className:"pt-0",children:[e.jsx("p",{className:"text-gray-600 text-sm mb-4 line-clamp-2",children:s.description}),e.jsxs("div",{className:"flex items-center justify-between text-sm text-gray-500 mb-4",children:[e.jsxs("span",{className:"flex items-center",children:[e.jsx(re,{className:"w-4 h-4 mr-1"}),s.duration," min"]}),e.jsxs("span",{className:"flex items-center",children:[e.jsx(le,{className:"w-4 h-4 mr-1"}
6),s.caloriesBurned," cal"]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(l,{variant:"outline",size:"sm",onClick:()=>K(s),children:[e.jsx(ne,{className:"w-4 h-4 mr-1"}),"Edit"]}),e.jsxs(l,{variant:"outline",size:"sm",onClick:()=>{confirm("Are you sure you want to delete this workout?")&&Q.mutate(s.id)},className:"text-red-600 hover:text-red-700",children:[e.jsx(ee,{className:"w-4 h-4 mr-1"}),"Delete"]}),e.jsx(F,{href:`/workouts/${s.id}`,children:e.jsx(l,{variant:"ghost",size:"sm",children:"View"})})]})]})]},s.id)})}),k.length===0&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-2",children:"No workouts yet"}),e.jsx("p",{className:"text-gray-600 mb-4",children:"Create your first workout to get started"}),e.jsxs(l,{onClick:()=>m(!0),children:[e.jsx(B,{className:"w-4 h-4 mr-2"}),"Create First Workout"]})]})]})})})}export{ye 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.