Skip to content

Commit be73ee4

Browse files
committed
Add error handling
1 parent feb4c78 commit be73ee4

File tree

3 files changed

+63
-32
lines changed

3 files changed

+63
-32
lines changed

packages/playground/website/src/components/site-manager/site-database-panel/adminer-button.tsx

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Button, Icon, Flex, FlexItem } from '@wordpress/components';
22
import { external } from '@wordpress/icons';
33
import { useState } from 'react';
4+
import css from './style.module.css';
45
import {
56
type PlaygroundClient,
67
type StepDefinition,
@@ -68,6 +69,7 @@ export function AdminerButton({
6869
playground: PlaygroundClient | undefined;
6970
}) {
7071
const [state, setState] = useState<'idle' | 'loading' | 'ready'>('idle');
72+
const [error, setError] = useState<string | null>(null);
7173

7274
const handleOpenAdminer = async () => {
7375
if (!playground) {
@@ -84,8 +86,10 @@ export function AdminerButton({
8486
await installAdminer(playground);
8587
setState('ready');
8688
} catch (error) {
87-
console.error('Failed to install Adminer:', error);
8889
setState('idle');
90+
setError(
91+
error instanceof Error ? error.message : 'Unknown error'
92+
);
8993
return;
9094
}
9195
}
@@ -102,20 +106,27 @@ export function AdminerButton({
102106

103107
const isLoading = state === 'loading';
104108
return (
105-
<Button
106-
variant="primary"
107-
disabled={!playground || isLoading}
108-
isBusy={isLoading}
109-
onClick={handleOpenAdminer}
110-
>
111-
<Flex justify="space-between" gap={2} expanded={true}>
112-
<FlexItem>
113-
{isLoading ? 'Opening Adminer…' : 'Open in Adminer'}
114-
</FlexItem>
115-
<FlexItem>
116-
<Icon icon={external} size={16} />
117-
</FlexItem>
118-
</Flex>
119-
</Button>
109+
<Flex direction="column" gap={0} expanded={false}>
110+
<Button
111+
variant="primary"
112+
disabled={!playground || isLoading}
113+
isBusy={isLoading}
114+
onClick={handleOpenAdminer}
115+
>
116+
<Flex justify="space-between" gap={2} expanded={true}>
117+
<FlexItem>
118+
{isLoading ? 'Opening Adminer…' : 'Open in Adminer'}
119+
</FlexItem>
120+
<FlexItem>
121+
<Icon icon={external} size={16} />
122+
</FlexItem>
123+
</Flex>
124+
</Button>
125+
{error && (
126+
<div className={css.error}>
127+
Failed to install Adminer. Please try again. Error: {error}
128+
</div>
129+
)}
130+
</Flex>
120131
);
121132
}

packages/playground/website/src/components/site-manager/site-database-panel/phpmyadmin-button.tsx

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { useState } from 'react';
22
import { Button, Icon, Flex, FlexItem } from '@wordpress/components';
33
import { external } from '@wordpress/icons';
4+
import css from './style.module.css';
45
import {
56
type PlaygroundClient,
67
type StepDefinition,
@@ -60,6 +61,7 @@ export function PhpMyAdminButton({
6061
playground: PlaygroundClient | undefined;
6162
}) {
6263
const [state, setState] = useState<'idle' | 'loading' | 'ready'>('idle');
64+
const [error, setError] = useState<string | null>(null);
6365

6466
const handleOpenPhpMyAdmin = async () => {
6567
if (!playground) {
@@ -76,8 +78,10 @@ export function PhpMyAdminButton({
7678
await installPhpMyAdmin(playground);
7779
setState('ready');
7880
} catch (error) {
79-
console.error('Failed to install phpMyAdmin:', error);
8081
setState('idle');
82+
setError(
83+
error instanceof Error ? error.message : 'Unknown error'
84+
);
8185
return;
8286
}
8387
}
@@ -94,20 +98,30 @@ export function PhpMyAdminButton({
9498

9599
const isLoading = state === 'loading';
96100
return (
97-
<Button
98-
variant="primary"
99-
disabled={!playground || isLoading}
100-
isBusy={isLoading}
101-
onClick={handleOpenPhpMyAdmin}
102-
>
103-
<Flex justify="space-between" gap={2} expanded={true}>
104-
<FlexItem>
105-
{isLoading ? 'Opening phpMyAdmin…' : 'Open in phpMyAdmin'}
106-
</FlexItem>
107-
<FlexItem>
108-
<Icon icon={external} size={16} />
109-
</FlexItem>
110-
</Flex>
111-
</Button>
101+
<Flex direction="column" gap={0} expanded={false}>
102+
<Button
103+
variant="primary"
104+
disabled={!playground || isLoading}
105+
isBusy={isLoading}
106+
onClick={handleOpenPhpMyAdmin}
107+
>
108+
<Flex justify="space-between" gap={2} expanded={true}>
109+
<FlexItem>
110+
{isLoading
111+
? 'Opening phpMyAdmin…'
112+
: 'Open in phpMyAdmin'}
113+
</FlexItem>
114+
<FlexItem>
115+
<Icon icon={external} size={16} />
116+
</FlexItem>
117+
</Flex>
118+
</Button>
119+
{error && (
120+
<div className={css.error}>
121+
Failed to install phpMyAdmin. Please try again. Error:{' '}
122+
{error}
123+
</div>
124+
)}
125+
</Flex>
112126
);
113127
}

packages/playground/website/src/components/site-manager/site-database-panel/style.module.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,9 @@
2424
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier,
2525
monospace;
2626
}
27+
28+
.error {
29+
color: #cc1818;
30+
font-size: 13px;
31+
margin-top: 8px;
32+
}

0 commit comments

Comments
 (0)