1+ "use strict" ;
2+
3+ Object . defineProperty ( exports , "__esModule" , {
4+ value : true
5+ } ) ;
6+ exports . default = ApplicationMenu ;
7+
8+ var _react = _interopRequireDefault ( require ( "react" ) ) ;
9+
10+ var _styles = require ( "@material-ui/core/styles" ) ;
11+
12+ var _IconButton = _interopRequireDefault ( require ( "@material-ui/core/IconButton" ) ) ;
13+
14+ var _ClickAwayListener = _interopRequireDefault ( require ( "@material-ui/core/ClickAwayListener" ) ) ;
15+
16+ var _Paper = _interopRequireDefault ( require ( "@material-ui/core/Paper" ) ) ;
17+
18+ var _Popper = _interopRequireDefault ( require ( "@material-ui/core/Popper" ) ) ;
19+
20+ var _Tooltip = _interopRequireDefault ( require ( "@material-ui/core/Tooltip" ) ) ;
21+
22+ var _Apps = _interopRequireDefault ( require ( "@material-ui/icons/Apps" ) ) ;
23+
24+ var _Fade = _interopRequireDefault ( require ( "@material-ui/core/Fade" ) ) ;
25+
26+ var _Launch = _interopRequireDefault ( require ( "@material-ui/icons/Launch" ) ) ;
27+
28+ var _Card = _interopRequireDefault ( require ( "@material-ui/core/Card" ) ) ;
29+
30+ var _CardContent = _interopRequireDefault ( require ( "@material-ui/core/CardContent" ) ) ;
31+
32+ var _Typography = _interopRequireDefault ( require ( "@material-ui/core/Typography" ) ) ;
33+
34+ var _Grid = _interopRequireDefault ( require ( "@material-ui/core/Grid" ) ) ;
35+
36+ var _NeonContext = _interopRequireDefault ( require ( "../NeonContext/NeonContext" ) ) ;
37+
38+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
39+
40+ function _extends ( ) { _extends = Object . assign || function ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] ; for ( var key in source ) { if ( Object . prototype . hasOwnProperty . call ( source , key ) ) { target [ key ] = source [ key ] ; } } } return target ; } ; return _extends . apply ( this , arguments ) ; }
41+
42+ function _slicedToArray ( arr , i ) { return _arrayWithHoles ( arr ) || _iterableToArrayLimit ( arr , i ) || _unsupportedIterableToArray ( arr , i ) || _nonIterableRest ( ) ; }
43+
44+ function _nonIterableRest ( ) { throw new TypeError ( "Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; }
45+
46+ function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || / ^ (?: U i | I ) n t (?: 8 | 1 6 | 3 2 ) (?: C l a m p e d ) ? A r r a y $ / . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; }
47+
48+ function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; }
49+
50+ function _iterableToArrayLimit ( arr , i ) { if ( typeof Symbol === "undefined" || ! ( Symbol . iterator in Object ( arr ) ) ) return ; var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] != null ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; }
51+
52+ function _arrayWithHoles ( arr ) { if ( Array . isArray ( arr ) ) return arr ; }
53+
54+ // declare styles
55+ var useStyles = ( 0 , _styles . makeStyles ) ( function ( theme ) {
56+ return ( 0 , _styles . createStyles ) ( {
57+ menuContainer : {
58+ zIndex : 1000 // be sure to display the menu over other elements
59+
60+ } ,
61+ toolbarContainer : {
62+ display : 'flex' ,
63+ justifyContent : 'space-between' ,
64+ boxShadow : '0px 1px 3px rgba(0, 0, 0, 0.45)' ,
65+ // match shadow of site header
66+ position : 'relative'
67+ } ,
68+ toolbarButtons : {
69+ display : 'flex' ,
70+ marginLeft : 'auto' ,
71+ // align content right
72+ marginRight : theme . spacing ( 2.5 ) ,
73+ marginTop : theme . spacing ( 0.5 ) ,
74+ marginBottom : theme . spacing ( 0.5 )
75+ } ,
76+ paper : {
77+ padding : theme . spacing ( 4 ) ,
78+ maxWidth : '500px' ,
79+ // limit width of menu
80+ marginTop : theme . spacing ( 1 ) ,
81+ // line top of menu up with divider
82+ overflowX : 'unset' ,
83+ overflowY : 'unset' ,
84+ '&::before' : {
85+ // add tooltip like arrow to top of menu
86+ content : '""' ,
87+ position : 'absolute' ,
88+ marginRight : theme . spacing ( 4 ) ,
89+ // center arrow point beneath menu button
90+ top : 0 ,
91+ right : 0 ,
92+ width : theme . spacing ( 2 ) ,
93+ // width of arrow
94+ height : theme . spacing ( 2 ) ,
95+ // height of arrow
96+ backgroundColor : theme . palette . background . paper ,
97+ // match paper background
98+ boxShadow : theme . shadows [ 2 ] ,
99+ // add arrow shadow
100+ transform : 'rotate(315deg)' ,
101+ // point arrow up toward menu button
102+ clipPath : 'polygon(-5px -5px, calc(100% + 5px) -5px, calc(100% + 5px) calc(100% + 5px))'
103+ }
104+ } ,
105+ card : {
106+ transition : '0.4s' ,
107+ '&:hover' : {
108+ // raised hover effect for Cards
109+ transform : 'translateY(-2px)' ,
110+ // raise Card
111+ boxShadow : theme . shadows [ 2 ] // add shadow
112+
113+ } ,
114+ cursor : 'pointer' ,
115+ // visually indicate Cards are links
116+ width : '100%' ,
117+ // ensure Cards are equal width
118+ border : 0 // remove default Card border
119+
120+ } ,
121+ cardContent : {
122+ textAlign : 'center'
123+ } ,
124+ gridItem : {
125+ display : 'flex' // so grid items stretch to equal height
126+
127+ }
128+ } ) ;
129+ } ) ;
130+
131+ var getApps = function getApps ( ) {
132+ var _authData$userData , _authData$userData$da ;
133+
134+ var _NeonContext$useNeonC = _NeonContext . default . useNeonContextState ( ) ,
135+ _NeonContext$useNeonC2 = _slicedToArray ( _NeonContext$useNeonC , 1 ) ,
136+ authData = _NeonContext$useNeonC2 [ 0 ] . auth ;
137+
138+ return authData === null || authData === void 0 ? void 0 : ( _authData$userData = authData . userData ) === null || _authData$userData === void 0 ? void 0 : ( _authData$userData$da = _authData$userData . data ) === null || _authData$userData$da === void 0 ? void 0 : _authData$userData$da . apps ;
139+ } ; // define the menu component
140+
141+
142+ var Menu = function Menu ( props ) {
143+ var apps = props . apps ;
144+ var classes = useStyles ( ) ;
145+
146+ var _React$useState = _react . default . useState ( false ) ,
147+ _React$useState2 = _slicedToArray ( _React$useState , 2 ) ,
148+ open = _React$useState2 [ 0 ] ,
149+ setOpen = _React$useState2 [ 1 ] ;
150+
151+ var anchorRef = _react . default . useRef ( null ) ; // handle menu toggle
152+
153+
154+ var handleToggle = function handleToggle ( ) {
155+ setOpen ( function ( prevOpen ) {
156+ return ! prevOpen ;
157+ } ) ;
158+ } ; // close the menu
159+
160+
161+ var handleClose = function handleClose ( event ) {
162+ if ( anchorRef . current && anchorRef . current . contains ( event . target ) ) {
163+ return ;
164+ }
165+
166+ setOpen ( false ) ;
167+ } ; // open menu by tab key
168+
169+
170+ function handleMenuKeyDown ( event ) {
171+ if ( event . key === 'Tab' ) {
172+ event . preventDefault ( ) ;
173+ setOpen ( false ) ;
174+ }
175+ } // handle a menu selection
176+
177+
178+ var handleMenuItemClick = function handleMenuItemClick ( event , url ) {
179+ window . location . href = url ;
180+ } ;
181+
182+ return /*#__PURE__*/ _react . default . createElement ( "div" , {
183+ className : classes . toolbarContainer
184+ } , /*#__PURE__*/ _react . default . createElement ( "div" , {
185+ className : classes . toolbarButtons
186+ } , /*#__PURE__*/ _react . default . createElement ( _Tooltip . default , {
187+ title : "Neon Applications" ,
188+ "aria-label" : "Neon Applications" ,
189+ placement : "left" ,
190+ TransitionComponent : _Fade . default ,
191+ TransitionProps : {
192+ timeout : 200
193+ } ,
194+ arrow : true
195+ } , /*#__PURE__*/ _react . default . createElement ( _IconButton . default , {
196+ ref : anchorRef ,
197+ style : {
198+ color : 'black'
199+ } ,
200+ "aria-label" : "more" ,
201+ "aria-controls" : open ? 'neon-application-menu' : undefined ,
202+ "aria-haspopup" : "true" ,
203+ onClick : handleToggle ,
204+ onKeyDown : handleMenuKeyDown
205+ } , /*#__PURE__*/ _react . default . createElement ( _Apps . default , null ) ) ) , /*#__PURE__*/ _react . default . createElement ( _Popper . default , {
206+ className : classes . menuContainer ,
207+ open : open ,
208+ anchorEl : anchorRef . current ,
209+ role : "presentation" ,
210+ transition : true
211+ } , function ( _ref ) {
212+ var TransitionProps = _ref . TransitionProps ,
213+ placement = _ref . placement ;
214+ return /*#__PURE__*/ _react . default . createElement ( _Fade . default , _extends ( { } , TransitionProps , {
215+ style : {
216+ transformOrigin : placement === 'bottom' ? 'center top' : 'center bottom'
217+ } ,
218+ timeout : 200
219+ } ) , /*#__PURE__*/ _react . default . createElement ( _Paper . default , {
220+ elevation : 3 ,
221+ className : classes . paper
222+ } , /*#__PURE__*/ _react . default . createElement ( _ClickAwayListener . default , {
223+ onClickAway : handleClose
224+ } , /*#__PURE__*/ _react . default . createElement ( _Grid . default , {
225+ container : true ,
226+ spacing : 4 ,
227+ alignItems : "stretch"
228+ } , apps . map ( function ( app ) {
229+ return /*#__PURE__*/ _react . default . createElement ( _Grid . default , {
230+ item : true ,
231+ xs : apps . length === 1 ? 12 : 6 ,
232+ className : classes . gridItem ,
233+ key : app . name
234+ } , /*#__PURE__*/ _react . default . createElement ( _Card . default , {
235+ onClick : function onClick ( event ) {
236+ return handleMenuItemClick ( event , app . url ) ;
237+ } ,
238+ key : app . url ,
239+ className : classes . card
240+ } , /*#__PURE__*/ _react . default . createElement ( _CardContent . default , {
241+ className : classes . cardContent
242+ } , /*#__PURE__*/ _react . default . createElement ( _Launch . default , {
243+ fontSize : "large"
244+ } ) , /*#__PURE__*/ _react . default . createElement ( _Typography . default , {
245+ variant : "subtitle1" ,
246+ gutterBottom : true ,
247+ style : {
248+ lineHeight : 1
249+ }
250+ } , app . name ) , app . description ) ) ) ;
251+ } ) ) ) ) ) ;
252+ } ) ) ) ;
253+ } ;
254+
255+ function ApplicationMenu ( ) {
256+ var apps = getApps ( ) ;
257+
258+ if ( ( apps === null || apps === void 0 ? void 0 : apps . length ) > 0 ) {
259+ return /*#__PURE__*/ _react . default . createElement ( Menu , {
260+ apps : apps
261+ } ) ;
262+ }
263+
264+ return null ;
265+ }
0 commit comments