Skip to content

Commit a417aca

Browse files
refactor: extract domain filter UI into DomainFilter component
1 parent e96df07 commit a417aca

File tree

2 files changed

+71
-45
lines changed

2 files changed

+71
-45
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import React from "react";
2+
import { Domain } from "@/types/data";
3+
4+
interface DomainFilterProps {
5+
domains: Domain[];
6+
newDomain: string;
7+
setNewDomain: React.Dispatch<React.SetStateAction<string>>;
8+
onAddDomain: (e: React.FormEvent) => void;
9+
onRemoveDomain: (domainToRemove: string) => void;
10+
}
11+
12+
export default function DomainFilter({
13+
domains,
14+
newDomain,
15+
setNewDomain,
16+
onAddDomain,
17+
onRemoveDomain,
18+
}: DomainFilterProps) {
19+
return (
20+
<div className="mt-4 domain_filters">
21+
<div className="flex gap-2 mb-4">
22+
<label htmlFor="domain_filters" className="agent_question">
23+
Filter by domain{" "}
24+
</label>
25+
<input
26+
type="text"
27+
value={newDomain}
28+
onChange={(e) => setNewDomain(e.target.value)}
29+
placeholder="Filter by domain (e.g., techcrunch.com)"
30+
className="input-static"
31+
onKeyPress={(e) => {
32+
if (e.key === "Enter") {
33+
e.preventDefault();
34+
onAddDomain(e);
35+
}
36+
}}
37+
/>
38+
<button
39+
type="button"
40+
onClick={onAddDomain}
41+
className="button-static"
42+
>
43+
Add Domain
44+
</button>
45+
</div>
46+
47+
<div className="flex flex-wrap gap-2">
48+
{domains.map((domain, index) => (
49+
<div key={index} className="domain-tag-static">
50+
<span className="domain-text-static">{domain.value}</span>
51+
<button
52+
type="button"
53+
onClick={() => onRemoveDomain(domain.value)}
54+
className="domain-button-static"
55+
>
56+
X
57+
</button>
58+
</div>
59+
))}
60+
</div>
61+
</div>
62+
);
63+
}

frontend/nextjs/components/Task/ResearchForm.tsx

Lines changed: 8 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import FileUpload from "../Settings/FileUpload";
33
import ToneSelector from "../Settings/ToneSelector";
44
import MCPSelector from "../Settings/MCPSelector";
55
import LayoutSelector from "../Settings/LayoutSelector";
6+
import DomainFilter from "./DomainFilter";
67
import { useAnalytics } from "../../hooks/useAnalytics";
78
import { ChatBoxSettings, Domain, MCPConfig } from '@/types/data';
89

@@ -164,51 +165,13 @@ export default function ResearchForm({
164165

165166
{/** TODO: move the below to its own component */}
166167
{(chatBoxSettings.report_source === "web" || chatBoxSettings.report_source === "hybrid") && (
167-
<div className="mt-4 domain_filters">
168-
<div className="flex gap-2 mb-4">
169-
<label htmlFor="domain_filters" className="agent_question">
170-
Filter by domain{" "}
171-
</label>
172-
<input
173-
type="text"
174-
value={newDomain}
175-
onChange={(e) => setNewDomain(e.target.value)}
176-
placeholder="Filter by domain (e.g., techcrunch.com)"
177-
className="input-static"
178-
onKeyPress={(e) => {
179-
if (e.key === 'Enter') {
180-
e.preventDefault();
181-
handleAddDomain(e);
182-
}
183-
}}
184-
/>
185-
<button
186-
type="button"
187-
onClick={handleAddDomain}
188-
className="button-static"
189-
>
190-
Add Domain
191-
</button>
192-
</div>
193-
194-
<div className="flex flex-wrap gap-2">
195-
{domains.map((domain, index) => (
196-
<div
197-
key={index}
198-
className="domain-tag-static"
199-
>
200-
<span className="domain-text-static">{domain.value}</span>
201-
<button
202-
type="button"
203-
onClick={() => handleRemoveDomain(domain.value)}
204-
className="domain-button-static"
205-
>
206-
X
207-
</button>
208-
</div>
209-
))}
210-
</div>
211-
</div>
168+
<DomainFilter
169+
domains={domains}
170+
newDomain={newDomain}
171+
setNewDomain={setNewDomain}
172+
onAddDomain={handleAddDomain}
173+
onRemoveDomain={handleRemoveDomain}
174+
/>
212175
)}
213176
</form>
214177
);

0 commit comments

Comments
 (0)