Skip to content

Commit 54f1df4

Browse files
authored
Merge pull request #39 from govtechmy/feature/SSD-667-search-unidentified-speaker
SSSD-667 - search show unknown speaker
2 parents de68ef1 + 93886b7 commit 54f1df4

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

dashboards/home/keyword/index.tsx

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,15 @@ const Keyword = ({
6767

6868
const house = dewan ? String(dewan) : "";
6969
const start =
70-
tarikh_mula !== undefined && !Array.isArray(tarikh_mula)
70+
tarikh_mula && !Array.isArray(tarikh_mula)
7171
? parseISO(tarikh_mula)
7272
: undefined;
7373
const end =
74-
tarikh_akhir !== undefined && !Array.isArray(tarikh_akhir)
74+
tarikh_akhir && !Array.isArray(tarikh_akhir)
7575
? parseISO(tarikh_akhir)
7676
: undefined;
77-
const diff = start && end ? differenceInCalendarDays(start, end) : 0;
77+
const diff =
78+
start && end ? Math.abs(differenceInCalendarDays(start, end)) : 0;
7879

7980
const [loading, setLoading] = useState<boolean>(false);
8081
const [range, setRange] = useState<number[]>([0, timeseries.date.length - 1]);
@@ -92,9 +93,9 @@ const Keyword = ({
9293
const data = response.data;
9394

9495
// Check if the API returned a server error flag
95-
if (data.error && data.errorType === "server_error") {
96-
router.push(router.locale === "en-GB" ? "/en-GB/500" : "/500");
97-
return;
96+
if (data?.error && data?.errorType === "server_error") {
97+
await router.push(router.locale === "en-GB" ? "/en-GB/500" : "/500");
98+
return null;
9899
}
99100

100101
return data;
@@ -104,17 +105,26 @@ const Keyword = ({
104105
}
105106
};
106107

107-
const barmeter_data = top_speakers
108-
? top_speakers.map(s => {
108+
const barmeter_data = useMemo(() => {
109+
if (!top_speakers) return [];
110+
111+
return top_speakers
112+
.map(s => {
109113
const id = Object.keys(s)[0];
110-
const speaker = speakers.find(
111-
e => String(e.new_author_id) === id
112-
)?.name;
113-
const total = s[id];
114+
const speaker = speakers.find(e => String(e.new_author_id) === id);
115+
116+
if (!speaker?.name) return null;
117+
118+
const rawValue = Number(s[id]);
119+
const safeValue = Number.isFinite(rawValue) ? rawValue : 0;
114120

115-
return { x: speaker ?? "", y: total };
121+
return {
122+
x: speaker.name,
123+
y: safeValue,
124+
};
116125
})
117-
: [];
126+
.filter((item): item is { x: string; y: number } => item !== null);
127+
}, [top_speakers, speakers]);
118128

119129
useEffect(() => {
120130
setLoading(false);
@@ -125,32 +135,29 @@ const Keyword = ({
125135
}, [timeseries]);
126136

127137
useEffect(() => {
138+
if (!keywordQuery) {
139+
setSuggestion("");
140+
return;
141+
}
142+
128143
const fetchSuggestion = async () => {
129-
if (keywordQuery.length > 0) {
130-
try {
131-
const result = await getAutocomplete(keywordQuery);
144+
try {
145+
const result = await getAutocomplete(keywordQuery);
132146

133-
// If result is undefined, it means we redirected to 500 page
134-
if (!result) return;
147+
// If result is undefined, it means we redirected to 500 page
148+
if (!result) return;
135149

136-
if (result.suggestions && result.suggestions.length > 0) {
137-
setSuggestion(result.suggestions[0]);
138-
} else {
139-
setSuggestion("");
140-
}
141-
} catch (error) {
142-
console.error("Error fetching autocomplete:", error);
143-
setSuggestion("");
144-
}
145-
} else {
150+
setSuggestion(result.suggestions?.[0] ?? "");
151+
} catch (error) {
152+
console.error("Error fetching autocomplete:", error);
146153
setSuggestion("");
147154
}
148155
};
149156

150157
const debounceTimeout = setTimeout(fetchSuggestion, 200);
151158

152159
return () => clearTimeout(debounceTimeout);
153-
}, [keywordQuery, router]);
160+
}, [keywordQuery]);
154161

155162
return (
156163
<Container className="divide-y divide-border">

0 commit comments

Comments
 (0)