@@ -7,14 +7,16 @@ import ScrollContainer from "react-indiana-drag-scroll";
77import { Files } from "." ;
88
99type SidebarProps = {
10+ simbridgeAvailable : boolean
1011 files ?: Files ;
1112 selected ?: string ;
1213 onSelect : ( name : string ) => void ;
1314 ofpSelected : boolean ;
1415 onSelectOfp : ( ) => void ;
16+ onRefresh : ( ) => void ;
1517} ;
1618
17- export const Sidebar : FC < SidebarProps > = ( { files, selected, onSelect, ofpSelected, onSelectOfp } ) => {
19+ export const Sidebar : FC < SidebarProps > = ( { simbridgeAvailable , files, selected, onSelect, ofpSelected, onSelectOfp, onRefresh } ) => {
1820 const getFileTypeIcon = ( name : string , props : { fill : string ; size : number } ) => {
1921 if ( name . endsWith ( ".pdf" ) ) {
2022 return < BsFiletypePdf { ...props } /> ;
@@ -31,46 +33,67 @@ export const Sidebar: FC<SidebarProps> = ({ files, selected, onSelect, ofpSelect
3133 < Title > Files</ Title >
3234 < Category >
3335 < div > SimBrief</ div >
34- < AiOutlineCloudDownload size = { 33 } fill = "#4FA0FC" />
36+ < AiOutlineCloudDownload size = { 33 } fill = "#4FA0FC" onClick = { onSelectOfp } />
3537 </ Category >
3638 < Entry selected = { ofpSelected } onClick = { onSelectOfp } >
3739 < BsFileEarmark fill = { ofpSelected ? "white" : "#4FA0FC" } size = { 32 } />
3840 < div > OFP</ div >
3941 </ Entry >
40- < ScrollContainer style = { { width : "100%" } } >
41- { files ?. pdfs . length !== 0 && (
42- < >
43- < Category >
44- < div > Local Documents</ div >
45- < IoIosRefresh size = { 32 } fill = "#4FA0FC" />
46- </ Category >
47- { files ?. pdfs ?. map ( ( file , i ) => (
48- < Entry selected = { selected === file } key = { i } onClick = { ( ) => onSelect ( file ) } >
49- { getFileTypeIcon ( file , { fill : selected === file ? "white" : "#4FA0FC" , size : 32 } ) }
50- < div > { file } </ div >
51- </ Entry >
52- ) ) }
53- </ >
54- ) }
55- { files ?. images . length !== 0 && (
56- < >
57- < Category >
58- < div > Local Images</ div >
59- < IoIosRefresh size = { 32 } fill = "#4FA0FC" />
60- </ Category >
61- { files ?. images . map ( ( image , i ) => (
62- < Entry selected = { selected === image } key = { i } onClick = { ( ) => onSelect ( image ) } >
63- { getFileTypeIcon ( image , { fill : selected === image ? "white" : "#4FA0FC" , size : 32 } ) }
64- < div > { image } </ div >
65- </ Entry >
66- ) ) }
67- </ >
68- ) }
69- </ ScrollContainer >
42+ { simbridgeAvailable ? (
43+ < ScrollContainer style = { { width : "100%" } } >
44+ { files ?. pdfs . length !== 0 && (
45+ < >
46+ < Category >
47+ < div > Local Documents</ div >
48+ < IoIosRefresh size = { 32 } fill = "#4FA0FC" onClick = { onRefresh } />
49+ </ Category >
50+ { files ?. pdfs ?. map ( ( file , i ) => (
51+ < Entry selected = { selected === file } key = { i } onClick = { ( ) => onSelect ( file ) } >
52+ { getFileTypeIcon ( file , { fill : selected === file ? "white" : "#4FA0FC" , size : 32 } ) }
53+ < div > { file } </ div >
54+ </ Entry >
55+ ) ) }
56+ </ >
57+ ) }
58+ { files ?. images . length !== 0 && (
59+ < >
60+ < Category >
61+ < div > Local Images</ div >
62+ < IoIosRefresh size = { 32 } fill = "#4FA0FC" onClick = { onRefresh } />
63+ </ Category >
64+ { files ?. images . map ( ( image , i ) => (
65+ < Entry selected = { selected === image } key = { i } onClick = { ( ) => onSelect ( image ) } >
66+ { getFileTypeIcon ( image , { fill : selected === image ? "white" : "#4FA0FC" , size : 32 } ) }
67+ < div > { image } </ div >
68+ </ Entry >
69+ ) ) }
70+ </ >
71+ ) }
72+ </ ScrollContainer >
73+ ) : (
74+ < SimbridgeUnavailable >
75+ < div > SimBridge not connected</ div >
76+ < IoIosRefresh size = { 32 } fill = "lightgray" onClick = { onRefresh } />
77+ </ SimbridgeUnavailable >
78+ ) }
7079 </ StyledSidebar >
7180 ) ;
7281} ;
7382
83+ const SimbridgeUnavailable = styled . div `
84+ width: 100%;
85+ flex: 1;
86+ display: flex;
87+ flex-direction: column;
88+ justify-content: center;
89+ align-items: center;
90+ color: lightgray;
91+
92+ * {
93+ margin: 5px;
94+ }
95+ ` ;
96+
7497const Entry = styled . div < { selected : boolean } > `
7598 display: flex;
7699 align-items: center;
@@ -108,6 +131,7 @@ const StyledSidebar = styled.div`
108131 color: black;
109132 font-size: 24px;
110133 border-right: 1px solid lightgray;
134+ flex-shrink: 0;
111135` ;
112136
113137const Title = styled . div `
0 commit comments