1- import React from 'react' ;
2- import { inject , hooksObserver } from 'app/componentConnectors' ;
3- import PlusIcon from 'react-icons/lib/go/plus' ;
41import Tooltip from '@codesandbox/common/lib/components/Tooltip' ;
2+ import React , { FunctionComponent } from 'react' ;
3+ import PlusIcon from 'react-icons/lib/go/plus' ;
4+
5+ import { useOvermind } from 'app/overmind' ;
56import getWorkspaceItems , {
67 getDisabledItems ,
78 INavigationItem ,
89} from 'app/store/modules/workspace/items' ;
10+
911// @ts -ignore
1012// eslint-disable-next-line import/no-unresolved
1113import InfoIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/sandbox.svg' ;
@@ -24,6 +26,7 @@ import RocketIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/rocket.
2426// @ts -ignore
2527// eslint-disable-next-line import/no-unresolved
2628import ConfigurationIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/cog.svg' ;
29+
2730import { Container , IconContainer , Separator } from './elements' ;
2831import ServerIcon from './ServerIcon' ;
2932
@@ -39,78 +42,70 @@ const IDS_TO_ICONS = {
3942 server : ServerIcon ,
4043} ;
4144
42- interface IconProps {
45+ type IconProps = {
4346 item : INavigationItem ;
4447 isDisabled ?: boolean ;
45- store : any ;
46- signals : any ;
47- }
48+ } ;
49+ const IconComponent : FunctionComponent < IconProps > = ( {
50+ item : { id, name } ,
51+ isDisabled,
52+ } ) => {
53+ const {
54+ actions : {
55+ workspace : { setWorkspaceHidden, setWorkspaceItem } ,
56+ } ,
57+ state : {
58+ workspace : { openedWorkspaceItem, workspaceHidden } ,
59+ } ,
60+ } = useOvermind ( ) ;
4861
49- const IconComponent = inject ( 'store' , 'signals' ) (
50- hooksObserver (
51- ( {
52- item,
53- isDisabled,
54- store,
55- signals : {
56- workspace : { setWorkspaceHidden, setWorkspaceItem } ,
57- } ,
58- } : IconProps ) => {
59- const { id, name } = item ;
62+ const Icon = IDS_TO_ICONS [ id ] ;
63+ const selected = ! workspaceHidden && id === openedWorkspaceItem ;
6064
61- const Icon = IDS_TO_ICONS [ id ] ;
62- const selected =
63- ! store . workspace . workspaceHidden &&
64- id === store . workspace . openedWorkspaceItem ;
65- return (
66- < Tooltip key = { id } placement = "right" content = { name } >
67- < IconContainer
68- isDisabled = { isDisabled }
69- selected = { selected }
70- onClick = { ( ) => {
71- if ( selected ) {
72- setWorkspaceHidden ( { hidden : true } ) ;
73- } else {
74- setWorkspaceHidden ( { hidden : false } ) ;
75- setWorkspaceItem ( { item : id } ) ;
76- }
77- } }
78- >
79- < Icon />
80- </ IconContainer >
81- </ Tooltip >
82- ) ;
83- }
84- )
85- ) ;
65+ return (
66+ < Tooltip placement = "right" content = { name } >
67+ < IconContainer
68+ isDisabled = { isDisabled }
69+ selected = { selected }
70+ onClick = { ( ) => {
71+ if ( selected ) {
72+ setWorkspaceHidden ( { hidden : true } ) ;
73+ } else {
74+ setWorkspaceHidden ( { hidden : false } ) ;
75+ setWorkspaceItem ( { item : id } ) ;
76+ }
77+ } }
78+ >
79+ < Icon />
80+ </ IconContainer >
81+ </ Tooltip >
82+ ) ;
83+ } ;
8684
87- export const Navigation = inject ( 'store' ) (
88- hooksObserver (
89- ( {
90- topOffset,
91- bottomOffset,
92- store,
93- } : {
94- topOffset : number ;
95- bottomOffset : number ;
96- store : any ;
97- } ) => {
98- const shownItems = getWorkspaceItems ( store ) ;
99- const disabledItems = getDisabledItems ( store ) ;
85+ type Props = {
86+ topOffset : number ;
87+ bottomOffset : number ;
88+ } ;
89+ export const Navigation : FunctionComponent < Props > = ( {
90+ topOffset,
91+ bottomOffset,
92+ } ) => {
93+ const { state } = useOvermind ( ) ;
10094
101- return (
102- < Container topOffset = { topOffset } bottomOffset = { bottomOffset } >
103- { shownItems . map ( item => (
104- < IconComponent key = { item . id } item = { item } />
105- ) ) }
95+ const shownItems = getWorkspaceItems ( state ) ;
96+ const disabledItems = getDisabledItems ( state ) ;
10697
107- { disabledItems . length > 0 && < Separator /> }
98+ return (
99+ < Container topOffset = { topOffset } bottomOffset = { bottomOffset } >
100+ { shownItems . map ( item => (
101+ < IconComponent key = { item . id } item = { item } />
102+ ) ) }
108103
109- { disabledItems . map ( item => (
110- < IconComponent key = { item . id } item = { item } isDisabled />
111- ) ) }
112- </ Container >
113- ) ;
114- }
115- )
116- ) ;
104+ { disabledItems . length > 0 && < Separator /> }
105+
106+ { disabledItems . map ( item => (
107+ < IconComponent key = { item . id } item = { item } isDisabled / >
108+ ) ) }
109+ </ Container >
110+ ) ;
111+ } ;
0 commit comments