88 Upload ,
99} from "lucide-react" ;
1010
11+ import { trpc } from "~/api/trpc" ;
1112import { Badge } from "~/components/ui/badge" ;
1213import {
1314 Breadcrumb ,
@@ -34,6 +35,7 @@ import {
3435 TableHeader ,
3536 TableRow ,
3637} from "~/components/ui/table" ;
38+ import { useWorkspace } from "~/components/WorkspaceProvider" ;
3739
3840type Resource = {
3941 id : string ;
@@ -46,43 +48,25 @@ type Resource = {
4648} ;
4749
4850export default function Resources ( ) {
49- const resources = [
50- {
51- id : "1" ,
52- name : "prod-api-server-01" ,
53- type : "Compute Instance" ,
54- status : "active" ,
55- region : "us-east-1" ,
56- lastUpdated : "2025-10-20T10:30:00" ,
57- description : "Production API server" ,
58- } ,
59- {
60- id : "2" ,
61- name : "staging-db-cluster" ,
62- type : "Database" ,
63- status : "active" ,
64- region : "us-west-2" ,
65- lastUpdated : "2025-10-19T15:45:00" ,
66- description : "Staging database cluster" ,
67- } ,
68- {
69- id : "3" ,
70- name : "dev-cache-redis" ,
71- type : "Cache" ,
72- status : "active" ,
73- region : "us-east-1" ,
74- lastUpdated : "2025-10-18T09:20:00" ,
75- description : "Development Redis cache" ,
76- } ,
77- ] ;
78-
51+ const { workspace } = useWorkspace ( ) ;
7952 const [ searchQuery , setSearchQuery ] = useState ( "" ) ;
8053
81- const filteredResources = resources . filter (
82- ( resource ) =>
83- resource . name . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
84- resource . type . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ||
85- resource . region . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ,
54+ const cel = `resource.name.startsWith("${ searchQuery } ")
55+ || resource.name.endsWith("${ searchQuery } ")
56+ || resource.name.contains("${ searchQuery } ")
57+ || resource.identifier.startsWith("${ searchQuery } ")
58+ || resource.identifier.endsWith("${ searchQuery } ")
59+ || resource.identifier.contains("${ searchQuery } ")` ;
60+
61+ const { data : resources } = trpc . resources . list . useQuery ( {
62+ workspaceId : workspace . id ,
63+ selector : { cel } ,
64+ limit : 10 ,
65+ offset : 0 ,
66+ } ) ;
67+
68+ const filteredResources = resources ?. items . filter ( ( resource ) =>
69+ resource . name . toLowerCase ( ) . includes ( searchQuery . toLowerCase ( ) ) ,
8670 ) ;
8771
8872 const getStatusColor = ( status : Resource [ "status" ] ) => {
@@ -147,7 +131,7 @@ export default function Resources() {
147131 </ TableRow >
148132 </ TableHeader >
149133 < TableBody >
150- { filteredResources . length === 0 ? (
134+ { filteredResources ? .length === 0 ? (
151135 < TableRow >
152136 < TableCell colSpan = { 6 } className = "py-8 text-center" >
153137 < div className = "flex flex-col items-center gap-2" >
@@ -159,30 +143,28 @@ export default function Resources() {
159143 </ TableCell >
160144 </ TableRow >
161145 ) : (
162- filteredResources . map ( ( resource ) => (
146+ filteredResources ? .map ( ( resource ) => (
163147 < TableRow key = { resource . id } >
164148 < TableCell className = "font-medium" >
165149 < div >
166150 < div > { resource . name } </ div >
167151 < div className = "text-xs text-muted-foreground" >
168- { resource . description }
152+ { resource . version }
169153 </ div >
170154 </ div >
171155 </ TableCell >
172- < TableCell > { resource . type } </ TableCell >
156+ < TableCell > { resource . kind } </ TableCell >
173157 < TableCell >
174158 < Badge
175159 variant = "secondary"
176- className = { getStatusColor (
177- resource . status as Resource [ "status" ] ,
178- ) }
160+ className = { getStatusColor ( "active" ) }
179161 >
180- { resource . status }
162+ Active
181163 </ Badge >
182164 </ TableCell >
183- < TableCell > { resource . region } </ TableCell >
165+ < TableCell > { resource . workspaceId } </ TableCell >
184166 < TableCell >
185- { new Date ( resource . lastUpdated ) . toLocaleDateString ( ) }
167+ { new Date ( resource . createdAt ) . toLocaleDateString ( ) }
186168 </ TableCell >
187169 < TableCell className = "text-right" >
188170 < DropdownMenu >
0 commit comments