-
Notifications
You must be signed in to change notification settings - Fork 418
Expand file tree
/
Copy pathSidebarNote.tsx
More file actions
82 lines (78 loc) · 2.22 KB
/
SidebarNote.tsx
File metadata and controls
82 lines (78 loc) · 2.22 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
/**
* 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.
*
*/
import { useLocation } from "@solidjs/router";
import { createEffect, createSignal, Show } from "solid-js";
import { Note } from "~/lib/types";
export default function SidebarNote(props: { note: Note }) {
const location = useLocation();
const [isExpanded, setIsExpanded] = createSignal(false);
const isActive = () => {
return location.pathname.startsWith(`/notes/${props.note.id}`);
};
let itemRef!: HTMLDivElement;
let title = props.note.title;
createEffect(
() => props.note.title,
(newTitle) => {
if (newTitle !== title) {
title = newTitle;
itemRef.classList.add("flash");
}
},
);
return (
<div
ref={itemRef}
onAnimationEnd={() => {
itemRef.classList.remove("flash");
}}
style={{
color: "black",
}}
class={["sidebar-note-list-item", isExpanded() ? "note-expanded" : ""].join(" ")}
>
<header class="sidebar-note-header">
<strong>{props.note.title}</strong>
<small>{props.note.updatedAt}</small>
</header>
<a
href={`/notes/${props.note.id}`}
class="sidebar-note-open"
style={{
"background-color": isActive()
? "var(--tertiary-blue)"
: "",
border: isActive() ? "1px solid var(--primary-border)" : "1px solid transparent",
}}
>
Open note for preview
</a>
<button
class="sidebar-note-toggle-expand"
onClick={e => {
e.stopPropagation();
setIsExpanded(isExpanded => !isExpanded);
}}
>
<Show
when={isExpanded()}
fallback={<img src="/chevron-down.svg" width="10px" height="10px" alt="Collapse" />}
>
<img src="/chevron-up.svg" width="10px" height="10px" alt="Expand" />
</Show>
</button>
<div
style={{
display: isExpanded() ? "block" : "none",
}}
>
<p class="sidebar-note-excerpt" innerHTML={props.note.body || `<i>No content</i>`} />
</div>
</div>
);
}