Skip to content

Commit cabf43a

Browse files
authored
chore(docs): sort types array for easy navigation (#158)
* chore(docs): sort types array for easy navigation * chore(docs): sort && group selected types
1 parent a4492cf commit cabf43a

File tree

2 files changed

+67
-19
lines changed

2 files changed

+67
-19
lines changed

apps/docs/app/(home)/api/query-demo.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,12 @@ export function QueryDemo() {
8787
customizable: data.configs[name]?.customizable,
8888
allowedFilters: data.configs[name]?.allowedFilters,
8989
}));
90-
setAvailableTypes(types);
90+
const sortedByName = [...types].sort((a, b) =>
91+
a.name.localeCompare(b.name)
92+
);
93+
setAvailableTypes(sortedByName);
9194

92-
const sortedByUtility = [...types].sort((a, b) => {
95+
const sortedByUtility = [...sortedByName].sort((a, b) => {
9396
const aScore =
9497
(a.customizable ? 1 : 0) * 2 + (a.allowedFilters?.length || 0);
9598
const bScore =

apps/docs/app/(home)/api/query-type-selector.tsx

Lines changed: 62 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Badge } from '@/components/ui/badge';
55
import { Button } from '@/components/ui/button';
66
import { Card, CardContent } from '@/components/ui/card';
77
import { ScrollArea } from '@/components/ui/scroll-area';
8+
import { Separator } from '@/components/ui/separator';
89

910
interface QueryType {
1011
name: string;
@@ -55,24 +56,23 @@ export function QueryTypeSelector({
5556

5657
<ScrollArea className="h-80 lg:h-96">
5758
<div className="grid grid-cols-1 gap-2 pr-4 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2 2xl:grid-cols-3">
58-
{availableTypes.map((type) => (
59+
{[...selectedTypes].map((type) => (
5960
<Card
60-
className={`group relative cursor-pointer border transition-all duration-200 hover:border-border/80 hover:shadow-sm ${
61-
selectedTypes.has(type.name)
62-
? 'border-primary/40 bg-primary/5 shadow-inner'
63-
: 'border-border/30 bg-card/70'
64-
}`}
65-
key={type.name}
66-
onClick={() => onTypeToggle(type.name)}
61+
className={
62+
'group relative cursor-pointer border transition-all duration-200 hover:border-border/80 hover:shadow-sm '
63+
}
64+
key={type}
65+
onClick={() => onTypeToggle(type)}
6766
>
6867
<CardContent className="p-2">
6968
<div className="flex items-center justify-between gap-2">
7069
<div className="min-w-0 flex-1">
7170
<div className="flex items-center gap-2">
7271
<code className="truncate font-medium font-mono text-xs">
73-
{type.name}
72+
{type}
7473
</code>
75-
{type.customizable && (
74+
{availableTypes.find((t) => t.name === type)
75+
?.customizable && (
7676
<Badge
7777
className="px-1.5 py-0.5 text-[10px] leading-none"
7878
variant="outline"
@@ -81,24 +81,69 @@ export function QueryTypeSelector({
8181
</Badge>
8282
)}
8383
</div>
84-
{type.defaultLimit && (
84+
{availableTypes.find((t) => t.name === type)
85+
?.defaultLimit && (
8586
<div className="mt-0.5 text-[10px] text-muted-foreground">
86-
Limit: {type.defaultLimit}
87+
Limit:
88+
{
89+
availableTypes.find((t) => t.name === type)
90+
.defaultLimit
91+
}
8792
</div>
8893
)}
8994
</div>
9095
<div
91-
className={`h-3 w-3 flex-shrink-0 rounded-full border transition-colors ${
92-
selectedTypes.has(type.name)
93-
? 'border-primary bg-primary'
94-
: 'border-muted-foreground/30'
95-
}`}
96+
className={
97+
'h-3 w-3 flex-shrink-0 rounded-full border border-primary bg-primary transition-colors'
98+
}
9699
/>
97100
</div>
98101
</CardContent>
99102
</Card>
100103
))}
101104
</div>
105+
{selectedTypes.size > 0 && <Separator className="my-4" />}
106+
<div className="grid grid-cols-1 gap-2 pr-4 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2 2xl:grid-cols-3">
107+
{availableTypes
108+
.filter((type) => !selectedTypes.has(type.name))
109+
.map((type) => (
110+
<Card
111+
className={`group 'border-border/30 relative cursor-pointer border bg-card/70 transition-all duration-200 hover:border-border/80 hover:shadow-sm`}
112+
key={type.name}
113+
onClick={() => onTypeToggle(type.name)}
114+
>
115+
<CardContent className="p-2">
116+
<div className="flex items-center justify-between gap-2">
117+
<div className="min-w-0 flex-1">
118+
<div className="flex items-center gap-2">
119+
<code className="truncate font-medium font-mono text-xs">
120+
{type.name}
121+
</code>
122+
{type.customizable && (
123+
<Badge
124+
className="px-1.5 py-0.5 text-[10px] leading-none"
125+
variant="outline"
126+
>
127+
Custom
128+
</Badge>
129+
)}
130+
</div>
131+
{type.defaultLimit && (
132+
<div className="mt-0.5 text-[10px] text-muted-foreground">
133+
Limit: {type.defaultLimit}
134+
</div>
135+
)}
136+
</div>
137+
<div
138+
className={
139+
'h-3 w-3 flex-shrink-0 rounded-full border border-muted-foreground/30 transition-colors'
140+
}
141+
/>
142+
</div>
143+
</CardContent>
144+
</Card>
145+
))}
146+
</div>
102147
</ScrollArea>
103148

104149
<Button

0 commit comments

Comments
 (0)