Skip to content

Commit 9597345

Browse files
committed
Add name filter to backend
1 parent 7117ac5 commit 9597345

File tree

6 files changed

+45
-17
lines changed

6 files changed

+45
-17
lines changed

coderd/database/queries.sql.go

Lines changed: 13 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ WHERE
2828
owner_id = @owner_id
2929
ELSE true
3030
END
31+
-- Filter by name
32+
AND CASE
33+
WHEN @name :: string != '' THEN
34+
name = LOWER(@name)
35+
ELSE true
36+
END
3137
;
3238

3339
-- name: GetWorkspacesByOrganizationIDs :many

coderd/workspaces.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ func (api *API) workspaces(rw http.ResponseWriter, r *http.Request) {
137137
// Empty strings mean no filter
138138
orgFilter := r.URL.Query().Get("organization_id")
139139
ownerFilter := r.URL.Query().Get("owner")
140+
nameFilter := r.URL.Query().Get("name")
140141

141142
filter := database.GetWorkspacesWithFilterParams{Deleted: false}
142143
if orgFilter != "" {
@@ -170,6 +171,9 @@ func (api *API) workspaces(rw http.ResponseWriter, r *http.Request) {
170171
}
171172
filter.OwnerID = userID
172173
}
174+
if nameFilter != "" {
175+
filter.Name = nameFilter
176+
}
173177

174178
workspaces, err := api.Database.GetWorkspacesWithFilter(r.Context(), filter)
175179
if err != nil {

codersdk/workspaces.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"fmt"
77
"net/http"
8+
"strconv"
89
"time"
910

1011
"github.com/google/uuid"
@@ -200,7 +201,9 @@ func (c *Client) PutExtendWorkspace(ctx context.Context, id uuid.UUID, req PutEx
200201
type WorkspaceFilter struct {
201202
OrganizationID uuid.UUID
202203
// Owner can be a user_id (uuid), "me", or a username
203-
Owner string
204+
Owner string
205+
Name string
206+
Deleted bool
204207
}
205208

206209
// asRequestOption returns a function that can be used in (*Client).Request.
@@ -214,6 +217,12 @@ func (f WorkspaceFilter) asRequestOption() requestOption {
214217
if f.Owner != "" {
215218
q.Set("owner", f.Owner)
216219
}
220+
if f.Name != "" {
221+
q.Set("name", f.Name)
222+
}
223+
if f.Deleted {
224+
q.Set("deleted", strconv.FormatBool(f.Deleted))
225+
}
217226
r.URL.RawQuery = q.Encode()
218227
}
219228
}

site/src/api/typesGenerated.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export interface CreateUserRequest {
8888
readonly organization_id: string
8989
}
9090

91-
// From codersdk/workspaces.go:34:6
91+
// From codersdk/workspaces.go:35:6
9292
export interface CreateWorkspaceBuildRequest {
9393
readonly template_version_id?: string
9494
readonly transition: WorkspaceTransition
@@ -222,7 +222,7 @@ export interface ProvisionerJobLog {
222222
readonly output: string
223223
}
224224

225-
// From codersdk/workspaces.go:182:6
225+
// From codersdk/workspaces.go:183:6
226226
export interface PutExtendWorkspaceRequest {
227227
readonly deadline: string
228228
}
@@ -299,12 +299,12 @@ export interface UpdateUserProfileRequest {
299299
readonly username: string
300300
}
301301

302-
// From codersdk/workspaces.go:141:6
302+
// From codersdk/workspaces.go:142:6
303303
export interface UpdateWorkspaceAutostartRequest {
304304
readonly schedule: string
305305
}
306306

307-
// From codersdk/workspaces.go:161:6
307+
// From codersdk/workspaces.go:162:6
308308
export interface UpdateWorkspaceTTLRequest {
309309
// This is likely an enum in an external package ("time.Duration")
310310
readonly ttl?: number
@@ -360,7 +360,7 @@ export interface UsersRequest extends Pagination {
360360
readonly status?: string
361361
}
362362

363-
// From codersdk/workspaces.go:18:6
363+
// From codersdk/workspaces.go:19:6
364364
export interface Workspace {
365365
readonly id: string
366366
readonly created_at: string
@@ -438,15 +438,17 @@ export interface WorkspaceBuild {
438438
readonly deadline: string
439439
}
440440

441-
// From codersdk/workspaces.go:64:6
441+
// From codersdk/workspaces.go:65:6
442442
export interface WorkspaceBuildsRequest extends Pagination {
443443
readonly WorkspaceID: string
444444
}
445445

446-
// From codersdk/workspaces.go:200:6
446+
// From codersdk/workspaces.go:201:6
447447
export interface WorkspaceFilter {
448448
readonly OrganizationID: string
449449
readonly Owner: string
450+
readonly Name: string
451+
readonly Deleted: boolean
450452
}
451453

452454
// From codersdk/workspaceresources.go:21:6

site/src/pages/WorkspacesPage/WorkspacesPage.tsx

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import { useMachine } from "@xstate/react"
99
import { FormikErrors, useFormik } from "formik"
1010
import { FC, useState } from "react"
1111
import { Link as RouterLink } from "react-router-dom"
12+
import { CloseDropdown, OpenDropdown } from "../../components/DropdownArrows/DropdownArrows"
1213
import { Margins } from "../../components/Margins/Margins"
1314
import { Stack } from "../../components/Stack/Stack"
1415
import { getFormHelpers, onChangeTrimmed } from "../../util/formUtils"
1516
import { workspacesMachine } from "../../xServices/workspaces/workspacesXService"
1617
import { WorkspacesPageView } from "./WorkspacesPageView"
17-
import { CloseDropdown, OpenDropdown } from "../../components/DropdownArrows/DropdownArrows"
1818

1919
interface FilterFormValues {
2020
query: string
@@ -24,7 +24,7 @@ const Language = {
2424
filterName: "Filters",
2525
createWorkspaceButton: "Create workspace",
2626
yourWorkspacesButton: "Your workspaces",
27-
allWorkspacesButton: "All workspaces"
27+
allWorkspacesButton: "All workspaces",
2828
}
2929

3030
export type FilterFormErrors = FormikErrors<FilterFormValues>
@@ -78,12 +78,7 @@ const WorkspacesPage: FC = () => {
7878
{Language.filterName} {anchorEl ? <CloseDropdown /> : <OpenDropdown />}
7979
</Button>
8080

81-
<Menu id="filter-menu"
82-
anchorEl={anchorEl}
83-
keepMounted
84-
open={Boolean(anchorEl)}
85-
onClose={handleClose}
86-
>
81+
<Menu id="filter-menu" anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
8782
<MenuItem onClick={setYourWorkspaces}>{Language.yourWorkspacesButton}</MenuItem>
8883
<MenuItem onClick={setAllWorkspaces}>{Language.allWorkspacesButton}</MenuItem>
8984
</Menu>

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy