Skip to content
This repository was archived by the owner on Dec 26, 2022. It is now read-only.

Commit 34b79ea

Browse files
committed
Highlight active project
1 parent 7cf40f2 commit 34b79ea

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

src/modules/projects/ProjectStore.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default class ProjectStore {
2727

2828
setActiveProject(projectId: string) {
2929
this.activeProject = projectId;
30+
this.projects = this.projects.slice(); // trigger to update view
3031
}
3132

3233
setProjectProps(
@@ -36,6 +37,7 @@ export default class ProjectStore {
3637
) {
3738
project.title = title;
3839
project.color = color || '';
40+
this.projects = this.projects.slice();
3941
this.projectService.save(this.projects);
4042
}
4143

@@ -47,8 +49,9 @@ export default class ProjectStore {
4749
}
4850

4951
add(project: ProjectModel) {
50-
this.projects.push(project);
51-
this.projects = this.projects.slice();
52+
const newProjects = this.projects.slice();
53+
newProjects.push(project);
54+
this.projects = newProjects;
5255
this.projectService.save(this.projects);
5356
}
5457

src/screens/projects/Projects.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,14 @@ const ProjectList = TreeList(
4545
projectStore.set(list);
4646
},
4747
{
48+
selectable: false,
4849
titleRender(project: ProjectModel) {
49-
return <ProjectNode project={project} />;
50+
return (
51+
<ProjectNode
52+
project={project}
53+
active={projectStore.activeProject === project.key}
54+
/>
55+
);
5056
},
5157
}
5258
);

src/screens/projects/components/ProjectNode/ProjectNode.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, { SyntheticEvent } from 'react';
22
import { EditOutlined } from '@ant-design/icons';
33
import { observer } from 'mobx-react';
44
import { createUseStyles } from 'react-jss';
5+
import clsx from 'clsx';
56

67
import ProjectModel from '../../../../models/ProjectModel';
78
import rootStore from '../../../../modules/RootStore';
@@ -10,28 +11,38 @@ const { projectStore } = rootStore;
1011

1112
interface ProjectNodeProps {
1213
project: ProjectModel;
14+
active: boolean;
1315
}
1416

15-
export default observer(function ProjectNode({ project }: ProjectNodeProps) {
17+
const ProjectNode = observer(({ project, active }: ProjectNodeProps) => {
1618
const classes = useStyle();
1719

18-
function onClick(e: SyntheticEvent) {
20+
function onClick() {
21+
projectStore.setActiveProject(project.key);
22+
}
23+
24+
function onEditClick(e: SyntheticEvent) {
1925
e.stopPropagation();
2026
projectStore.setEditableProject(project);
2127
}
2228

2329
return (
24-
<div className={classes.projectNode}>
30+
<div
31+
className={clsx(classes.projectNode, active && classes.active)}
32+
onClick={onClick}
33+
>
2534
<div
2635
className={classes.projectColor}
2736
style={{ backgroundColor: project.color }}
2837
/>
2938
<div className={classes.title}>{project.title}</div>
30-
<EditOutlined className={classes.editButton} onClick={onClick} />
39+
<EditOutlined className={classes.editButton} onClick={onEditClick} />
3140
</div>
3241
);
3342
});
3443

44+
export default ProjectNode;
45+
3546
const useStyle = createUseStyles({
3647
projectNode: {
3748
display: 'flex',
@@ -42,6 +53,9 @@ const useStyle = createUseStyles({
4253
display: 'inline',
4354
},
4455
},
56+
active: {
57+
fontWeight: 500,
58+
},
4559
projectColor: {
4660
width: 16,
4761
height: 16,

0 commit comments

Comments
 (0)