1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
import{j as s,a as N}from"./vendor-react-BHG7lGYR.js";import{c as ss,L as f}from"./vendor-router-D-s5vIeO.js";import{u as q}from"./vendor-tanstack-BzWBL1hV.js";import{C as p,d as E,e as j,B as P,a as G,L as S}from"./index-BWcMVITa.js";import{I as es}from"./input-BGBI2Wze.js";import{T as as,a as ts,b as C,c as k}from"./tabs-DP-eavm_.js";import{P as B,s as rs}from"./PlaylistCard-z0bLl0kY.js";import{i as T}from"./features-6vY6zDlz.js";import{A as X}from"./avatar-B2y8ugWJ.js";import{u as is}from"./useDebounce-Cc7fGPgq.js";import{P as I}from"./Pagination-i598iEQZ.js";import{n as z,X as ls,ab as v,ad as U,F as D}from"./vendor-icons-DaGlTw4_.js";import"./vendor-IYr-MHu4.js";import"./vendor-utils-CgOSfOkx.js";function b({icon:a,title:r,description:i,action:o,className:t,size:c="md"}){const d={sm:"py-6",md:"py-12",lg:"py-16"},m={sm:"h-8 w-8",md:"h-12 w-12",lg:"h-16 w-16"};return s.jsx(p,{className:E(t),children:s.jsxs(j,{className:E("text-center",d[c]),children:[a&&s.jsx("div",{className:"flex justify-center mb-4",children:s.jsx("div",{className:E("text-kodo-content-dim",m[c]),children:a})}),s.jsx("h3",{className:"text-lg font-semibold mb-2 text-white font-display",children:r}),i&&s.jsx("p",{className:"text-sm text-kodo-content-dim mb-4 max-w-md mx-auto",children:i}),o&&s.jsx(P,{onClick:o.onClick,variant:o.variant||"default",size:c==="sm"?"sm":"default",children:o.label})]})})}async function cs(a={}){const r=new URLSearchParams;a.pagination&&(a.pagination.page&&r.append("page",a.pagination.page.toString()),a.pagination.limit&&r.append("limit",a.pagination.limit.toString())),a.filters&&(a.filters.genre&&r.append("genre",a.filters.genre),a.filters.artist&&r.append("artist",a.filters.artist),a.filters.album&&r.append("album",a.filters.album),a.filters.minDuration&&r.append("min_duration",a.filters.minDuration.toString()),a.filters.maxDuration&&r.append("max_duration",a.filters.maxDuration.toString())),a.sort&&(r.append("sort_by",a.sort.field),r.append("sort_order",a.sort.order)),a.search&&r.append("search",a.search);const i=r.toString(),o=`/tracks${i?`?${i}`:""}`,t=await G.get(o);let c=[],d=0,m=1,l=20,n=1;if(t.data&&typeof t.data=="object")if("data"in t.data&&t.data.data&&typeof t.data.data=="object"){const x=t.data.data;x.tracks&&Array.isArray(x.tracks)&&(c=x.tracks),x.pagination&&typeof x.pagination=="object"&&(d=x.pagination.total||0,m=x.pagination.page||1,l=x.pagination.limit||20,n=x.pagination.total_pages||Math.ceil(d/l)||1)}else"tracks"in t.data&&Array.isArray(t.data.tracks)&&(c=t.data.tracks,d=t.data.total||0,m=t.data.page||1,l=t.data.limit||20,n=t.data.totalPages||Math.ceil(d/l)||1);const w=m||a.pagination?.page||1,y=l||a.pagination?.limit||c.length||10,L=n||Math.ceil(d/y)||1;return{data:c,total:d,page:w,limit:y,totalPages:L}}async function ns(a,r={}){return cs({...r,search:a})}async function ds(a){const r=new URLSearchParams;a.query&&r.append("q",a.query),a.page&&r.append("page",a.page.toString()),a.limit&&r.append("limit",a.limit.toString());const i=await G.get(`/users/search?${r.toString()}`);let o=[],t=0;if(i.data&&typeof i.data=="object")if("data"in i.data&&i.data.data&&typeof i.data.data=="object"){const c=i.data.data;c.users&&Array.isArray(c.users)&&(o=c.users),c.pagination&&typeof c.pagination=="object"&&(t=c.pagination.total||0)}else"users"in i.data&&Array.isArray(i.data.users)&&(o=i.data.users,t=i.data.total||0);return{users:o||[],total:t||0,page:a.page||1,limit:a.limit||20}}function ws(){const[a,r]=ss(),[i,o]=N.useState(a.get("q")||""),[t,c]=N.useState(a.get("type")||"all"),[d,m]=N.useState(1),l=20,n=is(i,500);N.useEffect(()=>{const e=new URLSearchParams;n&&e.set("q",n),t!=="all"&&e.set("type",t),r(e,{replace:!0})},[n,t,r]),N.useEffect(()=>{m(1)},[n,t]);const{data:w,isLoading:y,isError:L}=q({queryKey:["searchTracks",n,d,l],queryFn:()=>ns(n,{pagination:{page:d,limit:l}}),enabled:(t==="all"||t==="tracks")&&!!n.trim()}),{data:x,isLoading:R,isError:J}=q({queryKey:["searchPlaylists",n,d,l],queryFn:()=>rs({q:n,page:d,limit:l}),enabled:T("PLAYLIST_SEARCH")&&(t==="all"||t==="playlists")&&!!n.trim(),retry:!1,placeholderData:()=>({playlists:[],total:0})}),{data:$,isLoading:M,isError:O}=q({queryKey:["searchUsers",n,d,l],queryFn:()=>ds({query:n,page:d,limit:l}),enabled:(t==="all"||t==="users")&&!!n.trim()}),F=w?.data||[],Q=T("PLAYLIST_SEARCH")?x?.playlists||[]:[],H=$?.users||[],h=w?.total||0,u=T("PLAYLIST_SEARCH")&&x?.total||0,g=$?.total||0,V=h+u+g,A=y||R||M,_=L||T("PLAYLIST_SEARCH")&&J||O,W=e=>{e.preventDefault(),i.trim()&&m(1)},Z=()=>{o(""),m(1)},Y=V>0,K=n.trim().length>0;return s.jsx("div",{className:"container mx-auto px-4 py-8 relative z-0",children:s.jsxs("div",{className:"max-w-4xl mx-auto relative z-10",children:[s.jsxs("div",{className:"mb-8",children:[s.jsx("h1",{className:"text-3xl font-bold mb-2",children:"Search"}),s.jsx("p",{className:"text-muted-foreground",children:"Search for tracks, playlists, and users"})]}),s.jsx(p,{className:"mb-6 relative z-10",children:s.jsx(j,{className:"pt-6 relative z-10",children:s.jsx("form",{onSubmit:W,className:"space-y-4",children:s.jsxs("div",{className:"relative z-20",children:[s.jsx(z,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-muted-foreground z-10 pointer-events-none"}),s.jsx(es,{type:"text",placeholder:"Search tracks, playlists, users...",value:i,onChange:e=>o(e.target.value),className:"pl-10 pr-10 relative z-10"}),i&&s.jsx(P,{type:"button",variant:"ghost",size:"icon",className:"absolute right-1 top-1/2 transform -translate-y-1/2 h-8 w-8 z-20",onClick:Z,children:s.jsx(ls,{className:"h-4 w-4"})})]})})})}),K&&s.jsxs("div",{className:"space-y-8",children:[A&&s.jsx("div",{className:"flex justify-center py-12",children:s.jsx(S,{})}),_&&s.jsx(p,{children:s.jsx(j,{className:"pt-6",children:s.jsx("div",{className:"text-center text-destructive",children:s.jsx("p",{children:"An error occurred while searching. Please try again."})})})}),!A&&!_&&!Y&&s.jsx("div",{className:"relative z-10",children:s.jsx(b,{icon:s.jsx(z,{}),title:`No results found for "${n}"`,description:"Try adjusting your search terms"})}),!A&&!_&&Y&&s.jsxs(as,{value:t,onValueChange:e=>c(e),children:[s.jsxs(ts,{className:"grid w-full grid-cols-4",children:[s.jsxs(C,{value:"all",children:["All (",V,")"]}),s.jsxs(C,{value:"tracks",children:[s.jsx(v,{className:"h-4 w-4 mr-2"}),"Tracks (",h,")"]}),s.jsxs(C,{value:"playlists",children:[s.jsx(U,{className:"h-4 w-4 mr-2"}),"Playlists (",u,")"]}),s.jsxs(C,{value:"users",children:[s.jsx(D,{className:"h-4 w-4 mr-2"}),"Users (",g,")"]})]}),s.jsx(k,{value:"all",className:"mt-6",children:s.jsxs("div",{className:"space-y-8",children:[h>0&&s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold mb-4 flex items-center gap-2",children:[s.jsx(v,{className:"h-5 w-5"}),"Tracks (",h,")"]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:F.slice(0,6).map(e=>s.jsx(f,{to:`/tracks/${e.id}`,children:s.jsxs(p,{className:"overflow-hidden cursor-pointer",children:[s.jsx("div",{className:"relative aspect-square bg-muted flex items-center justify-center",children:e.cover?s.jsx("img",{src:e.cover,alt:e.title,className:"w-full h-full object-cover"}):s.jsx(v,{className:"h-16 w-16 text-muted-foreground/50"})}),s.jsxs(j,{className:"p-4",children:[s.jsx("h3",{className:"font-medium truncate",children:e.title}),e.artist&&s.jsx("p",{className:"text-sm text-muted-foreground truncate",children:e.artist})]})]})},e.id))}),h>6&&s.jsx("div",{className:"mt-4 text-center",children:s.jsx(P,{variant:"outline",onClick:()=>c("tracks"),children:"View All Tracks"})})]}),u>0&&s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold mb-4 flex items-center gap-2",children:[s.jsx(U,{className:"h-5 w-5"}),"Playlists (",u,")"]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:Q.slice(0,6).map(e=>s.jsx(f,{to:`/playlists/${e.id}`,children:s.jsx(B,{playlist:e})},e.id))}),u>6&&s.jsx("div",{className:"mt-4 text-center",children:s.jsx(P,{variant:"outline",onClick:()=>c("playlists"),children:"View All Playlists"})})]}),g>0&&s.jsxs("div",{children:[s.jsxs("h2",{className:"text-2xl font-bold mb-4 flex items-center gap-2",children:[s.jsx(D,{className:"h-5 w-5"}),"Users (",g,")"]}),s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:H.slice(0,6).map(e=>s.jsx(f,{to:`/u/${e.username}`,children:s.jsx(p,{className:"cursor-pointer",children:s.jsx(j,{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx(X,{src:e.avatar_url||"",fallback:e.username[0].toUpperCase(),size:"md"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("h3",{className:"font-medium truncate",children:e.username}),e.first_name||e.last_name?s.jsxs("p",{className:"text-sm text-muted-foreground truncate",children:[e.first_name," ",e.last_name]}):null]})]})})})},e.id))}),g>6&&s.jsx("div",{className:"mt-4 text-center",children:s.jsx(P,{variant:"outline",onClick:()=>c("users"),children:"View All Users"})})]})]})}),s.jsxs(k,{value:"tracks",className:"mt-6",children:[y?s.jsx("div",{className:"flex justify-center py-12",children:s.jsx(S,{})}):h===0?s.jsx(b,{icon:s.jsx(v,{}),title:"No tracks found",description:"Try adjusting your search terms"}):s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:F.map(e=>s.jsx(f,{to:`/tracks/${e.id}`,children:s.jsxs(p,{className:"overflow-hidden hover:shadow-lg transition-shadow cursor-pointer",children:[s.jsx("div",{className:"relative aspect-square bg-muted flex items-center justify-center",children:e.cover?s.jsx("img",{src:e.cover,alt:e.title,className:"w-full h-full object-cover"}):s.jsx(v,{className:"h-16 w-16 text-muted-foreground/50"})}),s.jsxs(j,{className:"p-4",children:[s.jsx("h3",{className:"font-medium truncate",children:e.title}),e.artist&&s.jsx("p",{className:"text-sm text-muted-foreground truncate",children:e.artist})]})]})},e.id))}),h>l&&s.jsx(I,{currentPage:d,totalPages:Math.ceil(h/l),onPageChange:m,totalItems:h,itemsPerPage:l,showItemsInfo:!0,className:"mt-6"})]}),s.jsxs(k,{value:"playlists",className:"mt-6",children:[R?s.jsx("div",{className:"flex justify-center py-12",children:s.jsx(S,{})}):u===0?s.jsx(b,{icon:s.jsx(U,{}),title:"No playlists found",description:"Try adjusting your search terms"}):s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:Q.map(e=>s.jsx(f,{to:`/playlists/${e.id}`,children:s.jsx(B,{playlist:e})},e.id))}),u>l&&s.jsx(I,{currentPage:d,totalPages:Math.ceil(u/l),onPageChange:m,totalItems:u,itemsPerPage:l,showItemsInfo:!0,className:"mt-6"})]}),s.jsxs(k,{value:"users",className:"mt-6",children:[M?s.jsx("div",{className:"flex justify-center py-12",children:s.jsx(S,{})}):g===0?s.jsx(b,{icon:s.jsx(D,{}),title:"No users found",description:"Try adjusting your search terms"}):s.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:H.map(e=>s.jsx(f,{to:`/u/${e.username}`,children:s.jsx(p,{className:"hover:shadow-lg transition-shadow cursor-pointer",children:s.jsx(j,{className:"p-4",children:s.jsxs("div",{className:"flex items-center gap-4",children:[s.jsx(X,{src:e.avatar_url||"",fallback:e.username[0].toUpperCase(),size:"md"}),s.jsxs("div",{className:"flex-1 min-w-0",children:[s.jsx("h3",{className:"font-medium truncate",children:e.username}),e.first_name||e.last_name?s.jsxs("p",{className:"text-sm text-muted-foreground truncate",children:[e.first_name," ",e.last_name]}):null,e.bio&&s.jsx("p",{className:"text-xs text-muted-foreground mt-1 line-clamp-2",children:e.bio})]})]})})})},e.id))}),g>l&&s.jsx(I,{currentPage:d,totalPages:Math.ceil(g/l),onPageChange:m,totalItems:g,itemsPerPage:l,showItemsInfo:!0,className:"mt-6"})]})]})]}),!K&&s.jsx(b,{icon:s.jsx(z,{}),title:"Start Searching",description:"Enter a search query to find tracks, playlists, and users",size:"lg"})]})})}export{ws as SearchPage};
|