Skip to content

Commit 649f930

Browse files
author
colinmcneil
committed
Implement image pull/error state
1 parent 865001b commit 649f930

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/extension/ui/src/App.tsx

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
import React, { useEffect, useState } from 'react';
22
import AddIcon from '@mui/icons-material/Add';
33
import { createDockerDesktopClient } from '@docker/extension-api-client';
4-
import { Stack, Typography, Button, ButtonGroup, Grid, debounce, Card, CardContent, IconButton, Alert, DialogTitle, Dialog, DialogContent, FormControlLabel, Checkbox } from '@mui/material';
4+
import { Stack, Typography, Button, ButtonGroup, Grid, debounce, Card, CardContent, IconButton, Alert, DialogTitle, Dialog, DialogContent, FormControlLabel, Checkbox, CircularProgress, Paper } from '@mui/material';
55
import { CatalogItem, CatalogItemCard, CatalogItemWithName } from './components/PromptCard';
66
import { parse, stringify } from 'yaml';
77
import { Ref } from './Refs';
88
import { RegistrySyncStatus } from './components/RegistrySyncStatus';
99
import { getRegistry } from './Registry';
1010
import { ClaudeConfigSyncStatus, setNeverShowAgain } from './components/ClaudeConfigSyncStatus';
1111
import { FolderOpenRounded, } from '@mui/icons-material';
12+
import { ExecResult } from '@docker/extension-api-client-types/dist/v0';
1213

1314
const NEVER_SHOW_AGAIN_KEY = 'registry-sync-never-show-again';
1415

@@ -24,6 +25,7 @@ export function App() {
2425
const [registryItems, setRegistryItems] = useState<{ [key: string]: { ref: string } }>({});
2526
const [showReloadModal, setShowReloadModal] = useState(false);
2627
const [hasConfig, setHasConfig] = useState(false);
28+
const [imagesLoadingResults, setImagesLoadingResults] = useState<ExecResult | null>(null);
2729

2830
const loadCatalog = async (showNotification = true) => {
2931
const cachedCatalog = localStorage.getItem('catalog');
@@ -108,8 +110,24 @@ export function App() {
108110

109111
}
110112

113+
const startImagesLoading = async () => {
114+
setImagesLoadingResults(null);
115+
try {
116+
const result = await client.docker.cli.exec('pull', ['vonwig/function_write_files:latest'])
117+
setImagesLoadingResults(result);
118+
}
119+
catch (error) {
120+
console.error(error)
121+
if (error) {
122+
setImagesLoadingResults(error as ExecResult)
123+
}
124+
125+
}
126+
}
127+
111128
useEffect(() => {
112129
loadCatalog();
130+
startImagesLoading();
113131
loadRegistry();
114132
const interval = setInterval(() => {
115133
loadCatalog(false);
@@ -124,9 +142,22 @@ export function App() {
124142
catalogItems.some((c) => c.name === i)
125143
)
126144

145+
if (!imagesLoadingResults || imagesLoadingResults.stderr) {
146+
return <Paper sx={{ padding: 2, height: '90vh', display: 'flex', flexDirection: 'column', justifyContent: 'center', alignItems: 'center' }}>
147+
{!imagesLoadingResults && <CircularProgress sx={{ marginBottom: 2 }} />}
148+
{!imagesLoadingResults && <Typography>Loading images...</Typography>}
149+
{imagesLoadingResults && <Alert sx={{ fontSize: '1.5em' }} action={<Button variant='outlined' color='secondary' onClick={() => startImagesLoading()}>Retry</Button>} title="Error loading images" severity="error">{imagesLoadingResults.stderr}</Alert>}
150+
<Typography>{imagesLoadingResults?.stdout}</Typography>
151+
</Paper>
152+
}
153+
154+
155+
156+
127157
return (
128158
<div>
129159
<Dialog open={showReloadModal} onClose={() => setShowReloadModal(false)}>
160+
130161
<DialogTitle>Registry Updated</DialogTitle>
131162
<DialogContent>
132163
<Typography sx={{ marginBottom: 2 }}>
@@ -144,7 +175,6 @@ export function App() {
144175

145176
<Stack direction="column" spacing={1}>
146177
<div>
147-
148178
<ButtonGroup>
149179
<Button onClick={() => loadCatalog(true)}>Refresh catalog</Button>
150180
<Button onClick={loadRegistry}>Refresh registry</Button>
@@ -188,8 +218,7 @@ export function App() {
188218
</Grid>
189219
</Grid>
190220
</Stack>
191-
192-
193221
</div>
194222
)
223+
195224
}

0 commit comments

Comments
 (0)