@@ -55,7 +55,7 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({ appProps }) => {
55
55
return false;
56
56
}
57
57
return !Object.keys(registryItems).every((i) =>
58
- catalogItems.some((c: CatalogItemRichened) => c.name === i)
58
+ catalogItems.some((c: CatalogItemRichened) => c.name === i),
59
59
);
60
60
}, [catalogItems, registryItems]);
61
61
@@ -103,138 +103,143 @@ export const CatalogGrid: React.FC<CatalogGridProps> = ({ appProps }) => {
103
103
</Typography>
104
104
</Alert>
105
105
)}
106
- <Box
107
- sx={{
108
- position: 'sticky',
109
- top: 0,
110
- zIndex: 1000,
111
- backgroundColor: 'background.default',
112
- }}
113
- >
114
- <Tabs
115
- value={tab}
116
- onChange={(_, newValue) => setTab(newValue)}
117
- sx={CATALOG_LAYOUT_SX}
106
+
107
+ <Stack spacing={2} sx={{ width: 'fit-content', alignSelf: 'center' }}>
108
+ <Box
109
+ sx={{
110
+ position: 'sticky',
111
+ top: 0,
112
+ zIndex: 1000,
113
+ backgroundColor: 'background.default',
114
+ }}
118
115
>
119
- <Tab label="MCP Servers" />
120
- <Tab label="MCP Clients" />
121
- {/* <Tab label="OAuth Providers" /> */}
122
- </Tabs>
123
- {tab === 0 && (
124
- <Stack
125
- direction="row"
126
- spacing={1}
127
- alignItems="center"
128
- sx={{ mt: 1, py: 1, ...CATALOG_LAYOUT_SX }}
116
+ <Tabs
117
+ value={tab}
118
+ onChange={(_, newValue) => setTab(newValue)}
119
+ sx={CATALOG_LAYOUT_SX}
129
120
>
130
- <FormGroup>
131
- <Stack
132
- direction="row"
133
- spacing={1}
134
- alignItems="center"
135
- justifyContent="space-evenly"
136
- >
137
- <OutlinedInput
138
- startAdornment={<SearchIcon color="secondary" />}
139
- size="small"
140
- type="search"
141
- placeholder="Search"
142
- sx={{ width: 380 }}
143
- value={search}
144
- onChange={(e) => setSearch(e.target.value)}
145
- />
146
- <IconButton
147
- size="small"
148
- id="demo-customized-button"
149
- aria-controls={
150
- openMenus['demo-customized-menu']
151
- ? 'demo-customized-menu'
152
- : undefined
153
- }
154
- aria-haspopup="true"
155
- aria-expanded={
156
- openMenus['demo-customized-menu'] ? 'true' : undefined
157
- }
158
- onClick={(e) =>
159
- setOpenMenus({
160
- ...openMenus,
161
- 'demo-customized-menu': {
162
- anchorEl: e.currentTarget,
163
- open: !openMenus['demo-customized-menu'].open,
164
- },
165
- })
166
- }
121
+ <Tab label="MCP Servers" />
122
+ <Tab label="MCP Clients" />
123
+ {/* <Tab label="OAuth Providers" /> */}
124
+ </Tabs>
125
+ {tab === 0 && (
126
+ <Stack
127
+ direction="row"
128
+ spacing={1}
129
+ alignItems="center"
130
+ sx={{ mt: 1, py: 1, ...CATALOG_LAYOUT_SX }}
131
+ >
132
+ <FormGroup>
133
+ <Stack
134
+ direction="row"
135
+ spacing={1}
136
+ alignItems="center"
137
+ justifyContent="space-evenly"
167
138
>
168
- <SwapVert fontSize="small" />
169
- </IconButton>
170
- </Stack>
171
- </FormGroup>
139
+ <OutlinedInput
140
+ startAdornment={<SearchIcon color="secondary" />}
141
+ size="small"
142
+ type="search"
143
+ placeholder="Search"
144
+ sx={{ width: 380 }}
145
+ value={search}
146
+ onChange={(e) => setSearch(e.target.value)}
147
+ />
148
+ <IconButton
149
+ size="small"
150
+ id="demo-customized-button"
151
+ aria-controls={
152
+ openMenus['demo-customized-menu']
153
+ ? 'demo-customized-menu'
154
+ : undefined
155
+ }
156
+ aria-haspopup="true"
157
+ aria-expanded={
158
+ openMenus['demo-customized-menu'] ? 'true' : undefined
159
+ }
160
+ onClick={(e) =>
161
+ setOpenMenus({
162
+ ...openMenus,
163
+ 'demo-customized-menu': {
164
+ anchorEl: e.currentTarget,
165
+ open: !openMenus['demo-customized-menu'].open,
166
+ },
167
+ })
168
+ }
169
+ >
170
+ <SwapVert fontSize="small" />
171
+ </IconButton>
172
+ </Stack>
173
+ </FormGroup>
172
174
173
- <Menu
174
- id="demo-customized-menu"
175
- MenuListProps={{
176
- 'aria-labelledby': 'demo-customized-button',
177
- }}
178
- anchorEl={openMenus['demo-customized-menu'].anchorEl || undefined}
179
- open={openMenus['demo-customized-menu'].open}
180
- onClose={() =>
181
- setOpenMenus({
182
- ...openMenus,
183
- 'demo-customized-menu': { anchorEl: null, open: false },
184
- })
185
- }
186
- >
187
- <MenuItem
188
- sx={{ fontWeight: sort === 'name-asc' ? 'bold' : 'normal' }}
189
- onClick={() => {
190
- setOpenMenus({
191
- ...openMenus,
192
- 'demo-customized-menu': { anchorEl: null, open: false },
193
- });
194
- setSort('name-asc');
175
+ <Menu
176
+ id="demo-customized-menu"
177
+ MenuListProps={{
178
+ 'aria-labelledby': 'demo-customized-button',
195
179
}}
196
- disableRipple
197
- >
198
- Name (A-Z)
199
- </MenuItem>
200
- <MenuItem
201
- sx={{ fontWeight: sort === 'name-desc' ? 'bold' : 'normal' }}
202
- onClick={() => {
180
+ anchorEl={
181
+ openMenus['demo-customized-menu'].anchorEl || undefined
182
+ }
183
+ open={openMenus['demo-customized-menu'].open}
184
+ onClose={() =>
203
185
setOpenMenus({
204
186
...openMenus,
205
187
'demo-customized-menu': { anchorEl: null, open: false },
206
- });
207
- setSort('name-desc');
208
- }}
209
- disableRipple
188
+ })
189
+ }
210
190
>
211
- Name (Z-A)
212
- </MenuItem>
213
- </Menu>
214
- </Stack>
215
- )}
216
- </Box>
217
- <Suspense
218
- fallback={
219
- <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>
220
- <CircularProgress />
221
- </Box>
222
- }
223
- >
224
- {tab === 0 && (
225
- <ToolCatalog search={search} client={client} sort={sort} />
226
- )}
227
- {tab === 1 && <YourClients appProps={appProps} />}
228
- </Suspense>
229
- <Suspense
230
- fallback={
231
- <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>
232
- <CircularProgress />
233
- </Box>
234
- }
235
- >
236
- {tab === 2 && <OAuthProviders client={client} />}
237
- </Suspense>
191
+ <MenuItem
192
+ sx={{ fontWeight: sort === 'name-asc' ? 'bold' : 'normal' }}
193
+ onClick={() => {
194
+ setOpenMenus({
195
+ ...openMenus,
196
+ 'demo-customized-menu': { anchorEl: null, open: false },
197
+ });
198
+ setSort('name-asc');
199
+ }}
200
+ disableRipple
201
+ >
202
+ Name (A-Z)
203
+ </MenuItem>
204
+ <MenuItem
205
+ sx={{ fontWeight: sort === 'name-desc' ? 'bold' : 'normal' }}
206
+ onClick={() => {
207
+ setOpenMenus({
208
+ ...openMenus,
209
+ 'demo-customized-menu': { anchorEl: null, open: false },
210
+ });
211
+ setSort('name-desc');
212
+ }}
213
+ disableRipple
214
+ >
215
+ Name (Z-A)
216
+ </MenuItem>
217
+ </Menu>
218
+ </Stack>
219
+ )}
220
+ </Box>
221
+ <Suspense
222
+ fallback={
223
+ <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>
224
+ <CircularProgress />
225
+ </Box>
226
+ }
227
+ >
228
+ {tab === 0 && (
229
+ <ToolCatalog search={search} client={client} sort={sort} />
230
+ )}
231
+ {tab === 1 && <YourClients appProps={appProps} />}
232
+ </Suspense>
233
+ <Suspense
234
+ fallback={
235
+ <Box sx={{ display: 'flex', justifyContent: 'center', p: 4 }}>
236
+ <CircularProgress />
237
+ </Box>
238
+ }
239
+ >
240
+ {tab === 2 && <OAuthProviders client={client} />}
241
+ </Suspense>
242
+ </Stack>
238
243
</Stack>
239
244
);
240
245
};
0 commit comments