Skip to content

Commit 5ea67ae

Browse files
committed
added discussion page examples, fixed hotkey for discussion input
1 parent bc2aa6c commit 5ea67ae

File tree

2 files changed

+80
-13
lines changed

2 files changed

+80
-13
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
'use client';
2+
3+
import { Discussion } from '@/modules/discussion/discussion';
4+
5+
export default function DiscussionTestPage() {
6+
return (
7+
<div className="container mx-auto py-8 px-4">
8+
<h1 className="text-3xl font-bold mb-6">Discussion Test Page</h1>
9+
10+
<div className="space-y-8">
11+
{/* Basic Discussion Example */}
12+
<div>
13+
<h2 className="text-xl font-semibold mb-4">Basic Discussion</h2>
14+
<div className="max-w-md">
15+
<Discussion title="Team Feedback" discussionKey="test-team-feedback" />
16+
</div>
17+
</div>
18+
19+
{/* Project Planning Discussion */}
20+
<div>
21+
<h2 className="text-xl font-semibold mb-4">Project Planning</h2>
22+
<div className="max-w-md">
23+
<Discussion title="Q4 Planning Session" discussionKey="test-q4-planning" />
24+
</div>
25+
</div>
26+
27+
{/* Feature Discussion */}
28+
<div>
29+
<h2 className="text-xl font-semibold mb-4">Feature Discussion</h2>
30+
<div className="max-w-md">
31+
<Discussion title="New Feature Ideas" discussionKey="test-feature-ideas" />
32+
</div>
33+
</div>
34+
35+
{/* Side-by-side Layout Example */}
36+
<div>
37+
<h2 className="text-xl font-semibold mb-4">Multiple Discussions</h2>
38+
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
39+
<div>
40+
<h3 className="text-lg font-medium mb-2">Technical Discussion</h3>
41+
<Discussion title="Architecture Review" discussionKey="test-architecture-review" />
42+
</div>
43+
<div>
44+
<h3 className="text-lg font-medium mb-2">General Discussion</h3>
45+
<Discussion title="Open Forum" discussionKey="test-open-forum" />
46+
</div>
47+
</div>
48+
</div>
49+
</div>
50+
</div>
51+
);
52+
}

apps/webapp/src/modules/discussion/discussion-form.tsx

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Button } from '@/components/ui/button';
44
import { Input } from '@/components/ui/input';
55
import { Label } from '@/components/ui/label';
66
import { Textarea } from '@/components/ui/textarea';
7-
import { useState } from 'react';
7+
import { useCallback, useEffect, useRef, useState } from 'react';
88

99
interface DiscussionFormProps {
1010
initialName?: string;
@@ -16,26 +16,40 @@ export function DiscussionForm({ initialName = '', onSubmit, onCancel }: Discuss
1616
const [name, setName] = useState(initialName);
1717
const [message, setMessage] = useState('');
1818
const [isSubmitting, setIsSubmitting] = useState(false);
19+
const formRef = useRef<HTMLFormElement>(null);
1920

20-
const handleSubmit = async (e: React.FormEvent) => {
21-
e.preventDefault();
21+
const handleSubmit = useCallback(
22+
async (e?: React.FormEvent) => {
23+
if (e) {
24+
e.preventDefault();
25+
}
2226

23-
if (!name.trim() || !message.trim()) return;
27+
if (!name.trim() || !message.trim() || isSubmitting) return;
2428

25-
setIsSubmitting(true);
26-
try {
27-
const success = await onSubmit(name, message);
28-
if (success) {
29-
// Clear message but keep name for future submissions
30-
setMessage('');
29+
setIsSubmitting(true);
30+
try {
31+
const success = await onSubmit(name, message);
32+
if (success) {
33+
// Clear message but keep name for future submissions
34+
setMessage('');
35+
}
36+
} finally {
37+
setIsSubmitting(false);
3138
}
32-
} finally {
33-
setIsSubmitting(false);
39+
},
40+
[name, message, onSubmit, isSubmitting]
41+
);
42+
43+
const handleTextareaKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {
44+
// Cmd/Ctrl + Enter to submit the form
45+
if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {
46+
e.preventDefault();
47+
handleSubmit();
3448
}
3549
};
3650

3751
return (
38-
<form onSubmit={handleSubmit} className="space-y-4">
52+
<form onSubmit={handleSubmit} className="space-y-4" ref={formRef}>
3953
<div className="space-y-2">
4054
<Label htmlFor="name">Your Name</Label>
4155
<Input
@@ -56,6 +70,7 @@ export function DiscussionForm({ initialName = '', onSubmit, onCancel }: Discuss
5670
placeholder="Share your thoughts..."
5771
value={message}
5872
onChange={(e) => setMessage(e.target.value)}
73+
onKeyDown={handleTextareaKeyDown}
5974
required
6075
disabled={isSubmitting}
6176
className="w-full min-h-[100px]"

0 commit comments

Comments
 (0)