Skip to content

Commit 84972fd

Browse files
SaerisCompuIves
authored andcommitted
🔨 Refactor Navigation to use React Hooks, TypeScript (codesandbox#2046)
Applied coding conventions to the Sandbox Workspace Navigation component. Removed unused SVGs and updated references in UserMenu and Dashboard Sidebar to use icons from the common lib instead. Tested locally. No observable changes in behavior.
1 parent 3c7727f commit 84972fd

File tree

16 files changed

+134
-254
lines changed

16 files changed

+134
-254
lines changed

‎packages/app/src/app/pages/Dashboard/Sidebar/SandboxesItem/index.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import AddFolderIcon from 'react-icons/lib/md/create-new-folder';
55
import { inject, observer } from 'mobx-react';
66

77
import { Query } from 'react-apollo';
8-
import InfoIcon from 'app/pages/Sandbox/Editor/Navigation/InfoIcon';
8+
import InfoIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/sandbox.svg';
99
import DelayedAnimation from 'app/components/DelayedAnimation';
1010

1111
import Item from '../Item';

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/ConfigurationIcon.js‎

Lines changed: 0 additions & 18 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/ConfigurationIcon.svg‎

Lines changed: 0 additions & 13 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/File.svg‎

Lines changed: 0 additions & 14 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/FileIcon.js‎

Lines changed: 0 additions & 19 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/Info.svg‎

Lines changed: 0 additions & 16 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/InfoIcon.js‎

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import React from 'react';
2+
import { observer } from 'mobx-react-lite';
3+
import PlusIcon from 'react-icons/lib/go/plus';
4+
import ServerIcon from 'react-icons/lib/go/server';
5+
import Tooltip from '@codesandbox/common/lib/components/Tooltip';
6+
// @ts-ignore
7+
import InfoIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/sandbox.svg';
8+
// @ts-ignore
9+
import GitHubIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/github.svg';
10+
// @ts-ignore
11+
import LiveIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/live.svg';
12+
// @ts-ignore
13+
import FilesIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/file.svg';
14+
// @ts-ignore
15+
import RocketIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/rocket.svg';
16+
// @ts-ignore
17+
import ConfigurationIcon from '-!svg-react-loader!@codesandbox/common/lib/icons/cog.svg';
18+
import getWorkspaceItems from 'app/store/modules/workspace/items';
19+
import { useSignals, useStore } from 'app/store';
20+
import { Container, IconContainer } from './elements';
21+
22+
const IDS_TO_ICONS = {
23+
project: InfoIcon,
24+
'project-summary': InfoIcon,
25+
files: FilesIcon,
26+
github: GitHubIcon,
27+
deploy: RocketIcon,
28+
config: ConfigurationIcon,
29+
live: LiveIcon,
30+
more: PlusIcon,
31+
server: ServerIcon,
32+
};
33+
34+
export const Navigation = observer(
35+
({
36+
topOffset,
37+
bottomOffset,
38+
}: {
39+
topOffset: number;
40+
bottomOffset: number;
41+
}) => {
42+
const {
43+
workspace: { setWorkspaceHidden, setWorkspaceItem },
44+
} = useSignals();
45+
const store = useStore();
46+
47+
return (
48+
<Container topOffset={topOffset} bottomOffset={bottomOffset}>
49+
{getWorkspaceItems(store)
50+
.filter(w => !w.show || w.show(store))
51+
.map(item => {
52+
const { id, name } = item;
53+
const Icon = IDS_TO_ICONS[id];
54+
const selected =
55+
!store.workspace.workspaceHidden &&
56+
id === store.workspace.openedWorkspaceItem;
57+
return (
58+
<Tooltip key={id} placement="right" content={name}>
59+
<IconContainer
60+
selected={selected}
61+
onClick={() => {
62+
if (selected) {
63+
setWorkspaceHidden({ hidden: true });
64+
} else {
65+
setWorkspaceHidden({ hidden: false });
66+
setWorkspaceItem({ item: id });
67+
}
68+
}}
69+
>
70+
<Icon />
71+
</IconContainer>
72+
</Tooltip>
73+
);
74+
})}
75+
</Container>
76+
);
77+
}
78+
);

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/Rocket.svg‎

Lines changed: 0 additions & 15 deletions
This file was deleted.

‎packages/app/src/app/pages/Sandbox/Editor/Navigation/RocketIcon.js‎

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)