1
1
import { ArrowUpCircleIcon , BookOpenIcon } from "@heroicons/react/20/solid" ;
2
- import { LoaderFunctionArgs } from "@remix-run/server-runtime" ;
3
- import { typeddefer , typedjson , UseDataFunctionReturn , useTypedLoaderData } from "remix-typedjson" ;
2
+ import { Await } from "@remix-run/react" ;
3
+ import { type LoaderFunctionArgs } from "@remix-run/server-runtime" ;
4
+ import { Suspense } from "react" ;
5
+ import { typeddefer , useTypedLoaderData } from "remix-typedjson" ;
4
6
import { AdminDebugTooltip } from "~/components/admin/debugTooltip" ;
5
7
import { EnvironmentLabel } from "~/components/environments/EnvironmentLabel" ;
8
+ import { Feedback } from "~/components/Feedback" ;
6
9
import { PageBody , PageContainer } from "~/components/layout/AppLayout" ;
7
10
import { Button , LinkButton } from "~/components/primitives/Buttons" ;
8
11
import { Header2 } from "~/components/primitives/Headers" ;
9
- import { Input } from "~/components/primitives/Input" ;
10
12
import { NavBar , PageAccessories , PageTitle } from "~/components/primitives/PageHeader" ;
11
- import { Paragraph } from "~/components/primitives/Paragraph" ;
12
- import * as Property from "~/components/primitives/PropertyTable" ;
13
+ import { Spinner } from "~/components/primitives/Spinner" ;
13
14
import {
14
15
Table ,
15
- TableBlankRow ,
16
16
TableBody ,
17
17
TableCell ,
18
18
TableHeader ,
19
19
TableHeaderCell ,
20
20
TableRow ,
21
21
} from "~/components/primitives/Table" ;
22
- import { SimpleTooltip } from "~/components/primitives/Tooltip" ;
23
- import {
24
- taskTriggerSourceDescription ,
25
- TaskTriggerSourceIcon ,
26
- } from "~/components/runs/v3/TaskTriggerSource" ;
27
22
import { useOrganization } from "~/hooks/useOrganizations" ;
28
- import { useTextFilter } from "~/hooks/useTextFilter" ;
29
23
import {
30
24
ConcurrencyPresenter ,
31
- Environment ,
32
- Task ,
25
+ type Environment ,
33
26
} from "~/presenters/v3/ConcurrencyPresenter.server" ;
34
27
import { requireUserId } from "~/services/session.server" ;
35
- import { ProjectParamSchema , docsPath , v3BillingPath } from "~/utils/pathBuilder" ;
28
+ import { docsPath , ProjectParamSchema , v3BillingPath } from "~/utils/pathBuilder" ;
36
29
import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route" ;
37
- import { Feedback } from "~/components/Feedback" ;
38
- import { Suspense } from "react" ;
39
- import { Await } from "@remix-run/react" ;
40
- import { Spinner } from "~/components/primitives/Spinner" ;
41
30
42
31
export const loader = async ( { request, params } : LoaderFunctionArgs ) => {
43
32
const userId = await requireUserId ( request ) ;
@@ -61,15 +50,15 @@ export const loader = async ({ request, params }: LoaderFunctionArgs) => {
61
50
} ;
62
51
63
52
export default function Page ( ) {
64
- const { environments, tasks , limit } = useTypedLoaderData < typeof loader > ( ) ;
53
+ const { environments } = useTypedLoaderData < typeof loader > ( ) ;
65
54
66
55
const organization = useOrganization ( ) ;
67
56
const plan = useCurrentPlan ( ) ;
68
57
69
58
return (
70
59
< PageContainer >
71
60
< NavBar >
72
- < PageTitle title = "Concurrency" />
61
+ < PageTitle title = "Concurrency limits " />
73
62
< PageAccessories >
74
63
< AdminDebugTooltip />
75
64
< LinkButton
@@ -125,14 +114,6 @@ export default function Page() {
125
114
</ TableBody >
126
115
</ Table >
127
116
</ div >
128
- < div >
129
- < Header2 spacing > Tasks</ Header2 >
130
- < Suspense fallback = { < Spinner /> } >
131
- < Await resolve = { tasks } errorElement = { < p > Error loading tasks</ p > } >
132
- { ( tasks ) => < TaskTable tasks = { tasks } /> }
133
- </ Await >
134
- </ Suspense >
135
- </ div >
136
117
</ div >
137
118
</ PageBody >
138
119
</ PageContainer >
@@ -155,70 +136,3 @@ function EnvironmentsTable({ environments }: { environments: Environment[] }) {
155
136
</ >
156
137
) ;
157
138
}
158
-
159
- function TaskTable ( { tasks } : { tasks : Task [ ] } ) {
160
- const { filterText, setFilterText, filteredItems } = useTextFilter < Task > ( {
161
- items : tasks ,
162
- filter : ( task , text ) => {
163
- if ( task . identifier . toLowerCase ( ) . includes ( text . toLowerCase ( ) ) ) {
164
- return true ;
165
- }
166
-
167
- if ( task . triggerSource === "SCHEDULED" && "scheduled" . includes ( text . toLowerCase ( ) ) ) {
168
- return true ;
169
- }
170
-
171
- return false ;
172
- } ,
173
- } ) ;
174
-
175
- return (
176
- < >
177
- < div className = "h-8" >
178
- < Input
179
- placeholder = "Search tasks"
180
- variant = "small"
181
- icon = "search"
182
- fullWidth = { true }
183
- value = { filterText }
184
- onChange = { ( e ) => setFilterText ( e . target . value ) }
185
- autoFocus
186
- />
187
- </ div >
188
- < Table >
189
- < TableHeader >
190
- < TableRow >
191
- < TableHeaderCell > Task ID</ TableHeaderCell >
192
- < TableHeaderCell alignment = "right" > Queued</ TableHeaderCell >
193
- < TableHeaderCell alignment = "right" > Running</ TableHeaderCell >
194
- </ TableRow >
195
- </ TableHeader >
196
- < TableBody >
197
- { filteredItems . length > 0 ? (
198
- filteredItems . map ( ( task ) => (
199
- < TableRow key = { task . identifier } >
200
- < TableCell >
201
- < div className = "flex items-center gap-2" >
202
- < SimpleTooltip
203
- button = { < TaskTriggerSourceIcon source = { task . triggerSource } /> }
204
- content = { taskTriggerSourceDescription ( task . triggerSource ) }
205
- />
206
- < span > { task . identifier } </ span >
207
- </ div >
208
- </ TableCell >
209
- < TableCell alignment = "right" > { task . queued } </ TableCell >
210
- < TableCell alignment = "right" > { task . concurrency } </ TableCell >
211
- </ TableRow >
212
- ) )
213
- ) : (
214
- < TableBlankRow colSpan = { 3 } >
215
- < Paragraph variant = "small" className = "flex items-center justify-center" >
216
- { tasks . length > 0 ? "No tasks match your filters" : "No tasks" }
217
- </ Paragraph >
218
- </ TableBlankRow >
219
- ) }
220
- </ TableBody >
221
- </ Table >
222
- </ >
223
- ) ;
224
- }
0 commit comments