1- import React , { Suspense } from 'react' ;
1+ import React , { useState , useEffect , Suspense } from 'react' ;
22import {
33 HashRouter as Router ,
44 Redirect ,
55 Route ,
66 Switch ,
77} from 'react-router-dom' ;
88import './App.less' ;
9- import { Layout , Skeleton } from 'antd' ;
9+ import { Alert , Button , Space , Layout , Skeleton } from 'antd' ;
1010import Sidebar from './Sidebar' ;
1111import BuildImage from './BuildImage' ;
1212import ListImage from './ListImage' ;
1313import Settings from './Settings' ;
14+ import { send } from './utils/ipcClient' ;
1415import CreatePrimeHubImage from './CreatePrimeHubImage' ;
1516const { Footer } = Layout ;
1617
18+ const OK = 'ok' ;
19+
1720const Crane = ( ) => {
21+ const [ missingDocker , setMissingDocker ] = useState ( false ) ;
1822 const siderWidth = {
1923 collapsed : 80 ,
2024 unCollapsed : 190 ,
2125 } ;
2226
27+ useEffect ( ( ) => {
28+ ( async ( ) => {
29+ // @ts -ignore
30+ const pong = await send ( 'ping_docker' ) ;
31+ console . log ( 'Ping docker:' , pong ) ;
32+ if ( pong !== OK ) {
33+ setMissingDocker ( true ) ;
34+ }
35+ } ) ( ) ;
36+ } , [ ] ) ;
37+
2338 return (
2439 < Layout
2540 style = { {
@@ -29,6 +44,28 @@ const Crane = () => {
2944 < Router >
3045 < Sidebar collapsed = { true } width = { siderWidth . unCollapsed } />
3146 < Layout className = 'site-layout' >
47+ { missingDocker ? (
48+ < Alert
49+ message = 'Error: Missing Docker runtime.'
50+ description = 'Can not detect system docker, please check your docker enviroment.'
51+ type = 'error'
52+ showIcon
53+ action = {
54+ < Space >
55+ < Button
56+ size = 'small'
57+ type = 'primary'
58+ href = 'https://docs.docker.com/get-docker/'
59+ target = '_blank'
60+ >
61+ Get Docker
62+ </ Button >
63+ </ Space >
64+ }
65+ />
66+ ) : (
67+ < > </ >
68+ ) }
3269 < Suspense
3370 fallback = {
3471 < div className = 'site-layout-background' >
@@ -38,7 +75,7 @@ const Crane = () => {
3875 >
3976 < Switch >
4077 < Route exact path = '/' component = { BuildImage } />
41- < Route path = '/settings' component = { Settings } />
78+ < Route path = '/settings/:tabName ' component = { Settings } />
4279 < Route path = '/images' component = { ListImage } />
4380 < Route
4481 path = '/createPrimeHubImage'
0 commit comments