Skip to content

Commit 8da19ad

Browse files
committed
fix: Handle 0 cluster filter results gracefully
https://harperdb.atlassian.net/browse/STUDIO-585
1 parent 61b7bbf commit 8da19ad

File tree

2 files changed

+20
-32
lines changed

2 files changed

+20
-32
lines changed

src/features/clusters/ClustersList.tsx

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function ClustersList() {
2222
const [savedClusterState] = useLocalStorage<unknown | null>(LocalStorageKeys.SavedClusterState, null);
2323

2424
const [filterByNameValue, setFilterByNameValue] = useState('');
25+
const clearFilterByNameValue = useCallback(() => setFilterByNameValue(''), []);
2526

2627
const onFilterByNameChanged = useCallback((e: FormEvent<HTMLInputElement>) => {
2728
setFilterByNameValue(e.currentTarget.value?.toLowerCase() || '');
@@ -34,7 +35,7 @@ export function ClustersList() {
3435
.filter(curryFilterByFuzzySearch<Cluster>(['id', 'name'], filterByNameValue))
3536
.sort(byClusterStatusThenName) || [], [filterByNameValue, orgInfo?.clusters]);
3637

37-
if (!clusters.length && create) {
38+
if (orgInfo?.clusters && !orgInfo.clusters.length && create) {
3839
return <UpsertCluster />;
3940
}
4041
if (savedClusterState) {
@@ -70,36 +71,18 @@ export function ClustersList() {
7071
) : null}
7172
</SubNavMenu>
7273
<section className="mt-40 md:mt-32 px-4 pt-4 md:px-12 min-h-[calc(100vh-theme(spacing.32))]">
73-
{clusters.length ? (
74-
<div className="grid grid-cols-1 gap-4 md:grid-cols-12 mb-4">
75-
{clusters.map((cluster) => (
76-
<div key={cluster.id} className="cols-span-1 md:col-span-4 lg:col-span-3 2xl:col-span-2">
77-
<ClusterCard cluster={cluster} />
78-
</div>
79-
))}
80-
</div>
81-
) : (
82-
<div className="flex-col space-y-5 items-center justify-center text-center">
83-
<h2 className="text-2xl text-center text-white">
84-
No clusters found.{!create ? ' Talk to your org admin to create one!' : ''}
85-
</h2>
86-
87-
{create && (
88-
<Link to="new-cluster">
89-
<Button
90-
variant="positive"
91-
className="w-full rounded-full md:w-44"
92-
accessKey="n"
93-
>
94-
<Plus />{' '}
95-
<span>
96-
<u>N</u>ew Cluster
97-
</span>
98-
</Button>
99-
</Link>
100-
)}
101-
</div>
102-
)}
74+
<div className="grid grid-cols-1 gap-4 md:grid-cols-12 mb-4">
75+
{clusters.map((cluster) => (
76+
<div key={cluster.id} className="col-span-1 md:col-span-4 lg:col-span-3 2xl:col-span-2">
77+
<ClusterCard cluster={cluster} />
78+
</div>
79+
))}
80+
{!clusters.length && (
81+
<div className="col-span-1 md:col-span-12 text-center">
82+
<h2 className="my-4 text-xl">No matches found.</h2>
83+
<Button variant="outline" onClick={clearFilterByNameValue}>Clear Filters</Button>
84+
</div>)}
85+
</div>
10386
</section>
10487
</>
10588
);

src/features/organizations/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ export function OrganizationsIndex() {
2323
organizationId: string;
2424
organizationName?: string;
2525
}>(null);
26+
2627
const [filterByNameValue, setFilterByNameValue] = useState('');
28+
const clearFilterByNameValue = useCallback(() => setFilterByNameValue(''), []);
2729

2830
const organizationRoles = useMemo(() => {
2931
const roles = user?.roles || {};
@@ -109,7 +111,10 @@ export function OrganizationsIndex() {
109111
</div>
110112
))}
111113
{!organizationRoles.length && (
112-
<div className="col-span-1 md:col-span-12 text-center">No matches found!</div>)}
114+
<div className="col-span-1 md:col-span-12 text-center">
115+
<h2 className="my-4 text-xl">No matches found.</h2>
116+
<Button variant="outline" onClick={clearFilterByNameValue}>Clear Filters</Button>
117+
</div>)}
113118
</div>
114119
</section>
115120
{deleteOrgInfo && (

0 commit comments

Comments
 (0)