Skip to content

Commit 8fe547c

Browse files
committed
Fix errors
1 parent d6a7c6f commit 8fe547c

File tree

4 files changed

+20
-3
lines changed

4 files changed

+20
-3
lines changed

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
return isApiError(error) && hasApiFieldErrors(error)
3535
}
3636

37+
export const hasError = (error: unknown) =>
38+
error !== undefined && error !== null
39+
3740
export const mapApiErrorToFieldErrors = (
3841
apiErrorResponse: ApiErrorResponse,
3942
): FieldErrors => {

site/src/pages/WorkspacesPage/Filter.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ import { useQuery } from "@tanstack/react-query"
2222
import { getUsers, getTemplates } from "api/api"
2323
import Skeleton, { SkeletonProps } from "@mui/material/Skeleton"
2424
import CheckOutlined from "@mui/icons-material/CheckOutlined"
25+
import {
26+
getValidationErrorMessage,
27+
hasError,
28+
isApiValidationError,
29+
} from "api/errors"
2530

2631
/** Filter */
2732

@@ -323,14 +328,17 @@ const FilterSkeleton = (props: SkeletonProps) => {
323328
export const Filter = ({
324329
filter,
325330
autocomplete,
331+
error,
326332
}: {
327333
filter: UseFilterResult
334+
error?: unknown
328335
autocomplete: {
329336
users?: UsersAutocomplete
330337
templates: TemplatesAutocomplete
331338
status: StatusAutocomplete
332339
}
333340
}) => {
341+
const shouldDisplayError = hasError(error) && isApiValidationError(error)
334342
const hasFilterQuery = filter.query !== ""
335343
const isIinitializingFilters =
336344
autocomplete.status.isInitializing ||
@@ -351,6 +359,10 @@ export const Filter = ({
351359
return (
352360
<Box display="flex" sx={{ gap: 1, mb: 2 }}>
353361
<TextField
362+
error={shouldDisplayError}
363+
helperText={
364+
shouldDisplayError ? getValidationErrorMessage(error) : undefined
365+
}
354366
sx={{ width: "100%" }}
355367
color="success"
356368
size="small"

site/src/pages/WorkspacesPage/WorkspacesPageView.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import difference from "lodash/difference"
1818
import { ImpendingDeletionBanner } from "components/WorkspaceDeletion"
1919
import { ErrorAlert } from "components/Alert/ErrorAlert"
2020
import { Filter } from "./Filter"
21+
import { hasError, isApiValidationError } from "api/errors"
2122

2223
export const Language = {
2324
pageTitle: "Workspaces",
@@ -98,7 +99,7 @@ export const WorkspacesPageView: FC<
9899
</PageHeader>
99100

100101
<Stack>
101-
<Maybe condition={Boolean(error)}>
102+
<Maybe condition={hasError(error) && !isApiValidationError(error)}>
102103
<ErrorAlert error={error} />
103104
</Maybe>
104105
<ImpendingDeletionBanner
@@ -112,7 +113,7 @@ export const WorkspacesPageView: FC<
112113
}
113114
/>
114115

115-
<Filter {...filterProps} />
116+
<Filter error={error} {...filterProps} />
116117
</Stack>
117118
<WorkspacesTable
118119
workspaces={workspaces}

site/src/pages/WorkspacesPage/data.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ export const useWorkspacesData = ({
2626
limit,
2727
query,
2828
}: UseWorkspacesDataParams) => {
29-
const queryKey = ["workspaces", query, page]
29+
const debouncedQuery = useState(query)
30+
const queryKey = ["workspaces", debouncedQuery, page]
3031
const [shouldRefetch, setShouldRefetch] = useState(true)
3132
const result = useQuery({
3233
queryKey,

0 commit comments

Comments
 (0)