Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit77b0ca0

Browse files
refactor(site): Improve workspaces filtering (#7681)
1 parentc795a0e commit77b0ca0

File tree

29 files changed

+1148
-183
lines changed

29 files changed

+1148
-183
lines changed

‎coderd/apidoc/docs.go

Lines changed: 4 additions & 2 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/apidoc/swagger.json

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎codersdk/deployment.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,6 +1682,9 @@ const (
16821682
// https://github.com/coder/coder/milestone/19
16831683
ExperimentWorkspaceActionsExperiment="workspace_actions"
16841684

1685+
// New workspace filter
1686+
ExperimentWorkspaceFilterExperiment="workspace_filter"
1687+
16851688
// Add new experiments here!
16861689
// ExperimentExample Experiment = "example"
16871690
)

‎docs/api/schemas.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2561,6 +2561,7 @@ CreateParameterRequest is a structure used to create a new parameter value for a
25612561
| -------------------|
25622562
|`moons`|
25632563
|`workspace_actions`|
2564+
|`workspace_filter`|
25642565

25652566
##codersdk.Feature
25662567

‎site/.eslintrc.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ rules:
136136
"object-curly-spacing":"off"
137137
react-hooks/exhaustive-deps:warn
138138
react-hooks/rules-of-hooks:error
139+
react/display-name:"off"
139140
react/jsx-no-script-url:
140141
-error
141142
-- name:Link

‎site/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@
111111
"@testing-library/user-event":"14.4.3",
112112
"@types/jest":"29.4.0",
113113
"@types/node":"14.18.22",
114-
"@types/react":"18.0.15",
115-
"@types/react-dom":"18.0.6",
114+
"@types/react":"18.2.6",
115+
"@types/react-dom":"18.2.4",
116116
"@types/react-helmet":"6.1.5",
117117
"@types/react-syntax-highlighter":"15.5.5",
118118
"@types/react-virtualized-auto-sizer":"1.0.1",
File renamed without changes.

‎site/src/@types/i18n.d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import"i18next"
2+
3+
// https://github.com/i18next/react-i18next/issues/1543#issuecomment-1528679591
4+
declare module"i18next"{
5+
interfaceTypeOptions{
6+
returnNull:false
7+
allowObjectInHTMLChildren:false
8+
}
9+
exportfunctiont<T>(s:string):T
10+
}
File renamed without changes.

‎site/src/api/errors.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ export const isApiValidationError = (error: unknown): error is ApiError => {
3434
returnisApiError(error)&&hasApiFieldErrors(error)
3535
}
3636

37+
exportconsthasError=(error:unknown)=>
38+
error!==undefined&&error!==null
39+
3740
exportconstmapApiErrorToFieldErrors=(
3841
apiErrorResponse:ApiErrorResponse,
3942
):FieldErrors=>{

‎site/src/api/typesGenerated.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1386,8 +1386,12 @@ export const Entitlements: Entitlement[] = [
13861386
]
13871387

13881388
// From codersdk/deployment.go
1389-
exporttypeExperiment="moons"|"workspace_actions"
1390-
exportconstExperiments:Experiment[]=["moons","workspace_actions"]
1389+
exporttypeExperiment="moons"|"workspace_actions"|"workspace_filter"
1390+
exportconstExperiments:Experiment[]=[
1391+
"moons",
1392+
"workspace_actions",
1393+
"workspace_filter",
1394+
]
13911395

13921396
// From codersdk/deployment.go
13931397
exporttypeFeatureName=

‎site/src/components/DeploymentBanner/DeploymentBannerView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import{DeploymentStats,WorkspaceStatus}from"api/typesGenerated"
22
import{FC,useMemo,useEffect,useState}from"react"
33
importprettyBytesfrom"pretty-bytes"
4-
import{getStatus}from"components/WorkspaceStatusBadge/WorkspaceStatusBadge"
54
importBuildingIconfrom"@mui/icons-material/Build"
65
import{makeStyles}from"@mui/styles"
76
import{RocketIcon}from"components/Icons/RocketIcon"
@@ -19,6 +18,7 @@ import dayjs from "dayjs"
1918
importCollectedIconfrom"@mui/icons-material/Compare"
2019
importRefreshIconfrom"@mui/icons-material/Refresh"
2120
importButtonfrom"@mui/material/Button"
21+
import{getDisplayWorkspaceStatus}from"utils/workspace"
2222

2323
exportconstbannerHeight=36
2424

@@ -218,7 +218,7 @@ const WorkspaceBuildValue: FC<{
218218
count?:number
219219
}>=({ status, count})=>{
220220
conststyles=useStyles()
221-
constdisplayStatus=getStatus(status)
221+
constdisplayStatus=getDisplayWorkspaceStatus(status)
222222
letstatusText=displayStatus.text
223223
leticon=displayStatus.icon
224224
if(status==="starting"){

‎site/src/components/UserAvatar/UserAvatar.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
1-
import{Avatar}from"components/Avatar/Avatar"
1+
import{Avatar,AvatarProps}from"components/Avatar/Avatar"
22
import{FC}from"react"
33

4-
exportinterfaceUserAvatarProps{
4+
exporttypeUserAvatarProps={
55
username:string
66
avatarURL?:string
7-
// It is needed to work with the AvatarGroup so it can pass the
8-
// MuiAvatarGroup-avatar className
9-
className?:string
10-
}
7+
}&AvatarProps
118

129
exportconstUserAvatar:FC<UserAvatarProps>=({
1310
username,
1411
avatarURL,
15-
className,
12+
13+
...avatarProps
1614
})=>{
1715
return(
18-
<Avatartitle={username}src={avatarURL}className={className}>
16+
<Avatartitle={username}src={avatarURL}{...avatarProps}>
1917
{username}
2018
</Avatar>
2119
)

‎site/src/components/WorkspaceStatusBadge/WorkspaceStatusBadge.tsx

Lines changed: 8 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
1-
importCircularProgressfrom"@mui/material/CircularProgress"
2-
importErrorIconfrom"@mui/icons-material/ErrorOutline"
3-
importStopIconfrom"@mui/icons-material/StopOutlined"
4-
importPlayIconfrom"@mui/icons-material/PlayArrowOutlined"
5-
importQueuedIconfrom"@mui/icons-material/HourglassEmpty"
6-
import{Workspace,WorkspaceBuild}from"api/typesGenerated"
1+
import{Workspace}from"api/typesGenerated"
72
import{Pill}from"components/Pill/Pill"
8-
importi18nextfrom"i18next"
93
import{FC,PropsWithChildren}from"react"
104
import{makeStyles}from"@mui/styles"
115
import{combineClasses}from"utils/combineClasses"
@@ -14,82 +8,7 @@ import {
148
ImpendingDeletionBadge,
159
ImpendingDeletionText,
1610
}from"components/WorkspaceDeletion"
17-
18-
constLoadingIcon:FC=()=>{
19-
return<CircularProgresssize={10}style={{color:"#FFF"}}/>
20-
}
21-
22-
exportconstgetStatus=(buildStatus:WorkspaceBuild["status"])=>{
23-
const{ t}=i18next
24-
25-
switch(buildStatus){
26-
caseundefined:
27-
return{
28-
text:t("workspaceStatus.loading",{ns:"common"}),
29-
icon:<LoadingIcon/>,
30-
}asconst
31-
case"running":
32-
return{
33-
type:"success",
34-
text:t("workspaceStatus.running",{ns:"common"}),
35-
icon:<PlayIcon/>,
36-
}asconst
37-
case"starting":
38-
return{
39-
type:"success",
40-
text:t("workspaceStatus.starting",{ns:"common"}),
41-
icon:<LoadingIcon/>,
42-
}asconst
43-
case"stopping":
44-
return{
45-
type:"warning",
46-
text:t("workspaceStatus.stopping",{ns:"common"}),
47-
icon:<LoadingIcon/>,
48-
}asconst
49-
case"stopped":
50-
return{
51-
type:"warning",
52-
text:t("workspaceStatus.stopped",{ns:"common"}),
53-
icon:<StopIcon/>,
54-
}asconst
55-
case"deleting":
56-
return{
57-
type:"warning",
58-
text:t("workspaceStatus.deleting",{ns:"common"}),
59-
icon:<LoadingIcon/>,
60-
}asconst
61-
case"deleted":
62-
return{
63-
type:"error",
64-
text:t("workspaceStatus.deleted",{ns:"common"}),
65-
icon:<ErrorIcon/>,
66-
}asconst
67-
case"canceling":
68-
return{
69-
type:"warning",
70-
text:t("workspaceStatus.canceling",{ns:"common"}),
71-
icon:<LoadingIcon/>,
72-
}asconst
73-
case"canceled":
74-
return{
75-
type:"warning",
76-
text:t("workspaceStatus.canceled",{ns:"common"}),
77-
icon:<ErrorIcon/>,
78-
}asconst
79-
case"failed":
80-
return{
81-
type:"error",
82-
text:t("workspaceStatus.failed",{ns:"common"}),
83-
icon:<ErrorIcon/>,
84-
}asconst
85-
case"pending":
86-
return{
87-
type:"info",
88-
text:t("workspaceStatus.pending",{ns:"common"}),
89-
icon:<QueuedIcon/>,
90-
}asconst
91-
}
92-
}
11+
import{getDisplayWorkspaceStatus}from"utils/workspace"
9312

9413
exporttypeWorkspaceStatusBadgeProps={
9514
workspace:Workspace
@@ -99,7 +18,9 @@ export type WorkspaceStatusBadgeProps = {
9918
exportconstWorkspaceStatusBadge:FC<
10019
PropsWithChildren<WorkspaceStatusBadgeProps>
10120
>=({ workspace, className})=>{
102-
const{ text, icon, type}=getStatus(workspace.latest_build.status)
21+
const{ text, icon, type}=getDisplayWorkspaceStatus(
22+
workspace.latest_build.status,
23+
)
10324
return(
10425
<ChooseOne>
10526
{/* <ImpendingDeletionBadge/> determines its own visibility */}
@@ -117,7 +38,9 @@ export const WorkspaceStatusText: FC<
11738
PropsWithChildren<WorkspaceStatusBadgeProps>
11839
>=({ workspace, className})=>{
11940
conststyles=useStyles()
120-
const{ text, type}=getStatus(workspace.latest_build.status)
41+
const{ text, type}=getDisplayWorkspaceStatus(
42+
workspace.latest_build.status,
43+
)
12144

12245
return(
12346
<ChooseOne>

‎site/src/hooks/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ export * from "./useClickable"
22
export*from"./useClickableTableRow"
33
export*from"./useClipboard"
44
export*from"./useFeatureVisibility"
5-
export*from"./useFilter"
65
export*from"./useLocalStorage"
76
export*from"./useMe"
87
export*from"./useOrganizationId"

‎site/src/hooks/useFilter.ts

Lines changed: 0 additions & 21 deletions
This file was deleted.

‎site/src/hooks/usePagination.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import{DEFAULT_RECORDS_PER_PAGE}from"components/PaginationWidget/utils"
22
import{useSearchParams}from"react-router-dom"
33

4-
typeUsePaginationResult={
5-
page:number
6-
limit:number
7-
goToPage:(page:number)=>void
8-
}
9-
10-
exportconstusePagination=():UsePaginationResult=>{
11-
const[searchParams,setSearchParams]=useSearchParams()
12-
constpage=searchParams.get("page") ?Number(searchParams.get("page")) :0
4+
exportconstusePagination=({
5+
searchParamsResult,
6+
}:{
7+
searchParamsResult:ReturnType<typeofuseSearchParams>
8+
})=>{
9+
const[searchParams,setSearchParams]=searchParamsResult
10+
constpage=searchParams.get("page") ?Number(searchParams.get("page")) :1
1311
constlimit=DEFAULT_RECORDS_PER_PAGE
1412

1513
constgoToPage=(page:number)=>{

‎site/src/pages/UserSettingsPage/TokensPage/TokensPage.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { FC, PropsWithChildren, useState } from "react"
22
import{Section}from"components/SettingsLayout/Section"
33
import{TokensPageView}from"./TokensPageView"
44
importmakeStylesfrom"@mui/styles/makeStyles"
5-
import{useTranslation,Trans}from"react-i18next"
5+
import{useTranslation}from"react-i18next"
66
import{useTokensData}from"./hooks"
77
import{ConfirmDeleteDialog}from"./components"
88
import{Stack}from"components/Stack/Stack"
@@ -16,12 +16,6 @@ export const TokensPage: FC<PropsWithChildren<unknown>> = () => {
1616
const{ t}=useTranslation("tokensPage")
1717

1818
constcliCreateCommand="coder tokens create"
19-
constdescription=(
20-
<Transt={t}i18nKey="description"values={{ cliCreateCommand}}>
21-
Tokens are used to authenticate with the Coder API. You can create a token
22-
with the Coder CLI using the<code>{{ cliCreateCommand}}</code> command.
23-
</Trans>
24-
)
2519

2620
constTokenActions=()=>(
2721
<Stackdirection="row"justifyContent="end"className={styles.tokenActions}>
@@ -52,7 +46,13 @@ export const TokensPage: FC<PropsWithChildren<unknown>> = () => {
5246
<Section
5347
title={t("title")}
5448
className={styles.section}
55-
description={description}
49+
description={
50+
<>
51+
Tokens are used to authenticate with the Coder API. You can create a
52+
token with the Coder CLI using the<code>{cliCreateCommand}</code>{" "}
53+
command.
54+
</>
55+
}
5656
layout="fluid"
5757
>
5858
<TokenActions/>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp