Skip to content

Commit d208e5a

Browse files
authored
ENG-914 Add DiscourseSuggestionsPanel and panel manager (#468)
* react component panel manager * coderabbit review * fix minimise button location, refactor code * fix highlight * use new approach to width setting, fix bugs, code improvments, address review
1 parent 2ec63fc commit d208e5a

File tree

5 files changed

+620
-44
lines changed

5 files changed

+620
-44
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
import {
2+
Alignment,
3+
Card,
4+
Classes,
5+
Button,
6+
Navbar,
7+
Collapse,
8+
} from "@blueprintjs/core";
9+
import React, { useState, useCallback } from "react";
10+
11+
export const DiscourseSuggestionsPanel = ({
12+
tag,
13+
blockUid,
14+
onClose,
15+
// TODO: Will be used to pass setting to body renderer
16+
shouldGrabFromReferencedPages,
17+
shouldGrabParentChildContext,
18+
}: {
19+
tag: string;
20+
blockUid: string;
21+
onClose: () => void;
22+
shouldGrabFromReferencedPages: boolean;
23+
shouldGrabParentChildContext: boolean;
24+
}) => {
25+
const [isOpen, setIsOpen] = useState(true);
26+
27+
const toggleHighlight = useCallback(
28+
(on: boolean) => {
29+
document
30+
.querySelectorAll(`[data-dg-block-uid="${blockUid}"]`)
31+
.forEach((el) =>
32+
el.classList.toggle(
33+
"suggestive-mode-overlay-highlight-on-panel-hover",
34+
on,
35+
),
36+
);
37+
},
38+
[blockUid],
39+
);
40+
41+
return (
42+
<Card
43+
data-dg-block-uid={`${blockUid}`}
44+
onMouseEnter={() => toggleHighlight(true)}
45+
onMouseLeave={() => toggleHighlight(false)}
46+
className="discourse-suggestions-panel flex flex-col bg-white p-2"
47+
>
48+
<Navbar className="flex flex-nowrap items-center pl-2 pr-0 shadow-none">
49+
<Navbar.Group
50+
align={Alignment.LEFT}
51+
className="min-w-0 flex-1 cursor-pointer"
52+
onClick={() => setIsOpen((prev) => !prev)}
53+
>
54+
<Navbar.Heading className="cursor-pointer truncate text-base font-semibold">
55+
{tag}
56+
</Navbar.Heading>
57+
</Navbar.Group>
58+
<Navbar.Group align={Alignment.RIGHT} className="flex-0">
59+
<Button
60+
icon={isOpen ? "chevron-up" : "chevron-down"}
61+
minimal
62+
small
63+
onClick={() => setIsOpen((prev) => !prev)}
64+
title={isOpen ? "Collapse" : "Expand"}
65+
/>
66+
<Button
67+
icon="cross"
68+
minimal={true}
69+
title="Close Panel"
70+
onClick={onClose}
71+
small={true}
72+
/>
73+
</Navbar.Group>
74+
</Navbar>
75+
<Collapse
76+
isOpen={isOpen}
77+
keepChildrenMounted={true}
78+
transitionDuration={150}
79+
>
80+
<div className="flex-grow overflow-y-auto p-2">
81+
{/* TODO: Replace with actual body*/}
82+
<div>Body placeholder</div>
83+
</div>
84+
</Collapse>
85+
</Card>
86+
);
87+
};

0 commit comments

Comments
 (0)