-
Notifications
You must be signed in to change notification settings - Fork 644
Expand file tree
/
Copy pathSidebarNoteContent.js
More file actions
88 lines (83 loc) · 2.19 KB
/
SidebarNoteContent.js
File metadata and controls
88 lines (83 loc) · 2.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
'use client';
import {useState, useRef, useEffect, useTransition} from 'react';
import {useRouter} from './framework/router';
export default function SidebarNoteContent({
id,
title,
children,
expandedChildren,
}) {
const {location, navigate} = useRouter();
const [isPending, startTransition] = useTransition();
const [isExpanded, setIsExpanded] = useState(false);
const isActive = id === location.selectedId;
// Animate after title is edited.
const itemRef = useRef(null);
const prevTitleRef = useRef(title);
useEffect(() => {
if (title !== prevTitleRef.current) {
prevTitleRef.current = title;
itemRef.current.classList.add('flash');
}
}, [title]);
return (
<div
ref={itemRef}
onAnimationEnd={() => {
itemRef.current.classList.remove('flash');
}}
className={[
'sidebar-note-list-item',
isExpanded ? 'note-expanded' : '',
].join(' ')}>
{children}
<button
className="sidebar-note-open"
style={{
backgroundColor: isPending
? 'var(--gray-80)'
: isActive
? 'var(--tertiary-blue)'
: '',
border: isActive
? '1px solid var(--primary-border)'
: '1px solid transparent',
}}
onClick={() => {
startTransition(() => {
navigate({
selectedId: id,
isEditing: false,
});
});
}}>
Open note for preview
</button>
<button
className="sidebar-note-toggle-expand"
onClick={(e) => {
e.stopPropagation();
setIsExpanded(!isExpanded);
}}>
{isExpanded ? (
<img
src="chevron-down.svg"
width="10px"
height="10px"
alt="Collapse"
/>
) : (
<img src="chevron-up.svg" width="10px" height="10px" alt="Expand" />
)}
</button>
{isExpanded && expandedChildren}
</div>
);
}