Skip to content

Commit 81de25d

Browse files
committed
feat: add prompt history dialog component with search, filter, and management functionalities
1 parent 23328ec commit 81de25d

File tree

1 file changed

+29
-38
lines changed

1 file changed

+29
-38
lines changed

src/pages/generate/PromptHistoryDialog.tsx

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,7 @@ import {
1111
Text,
1212
VStack,
1313
} from "@chakra-ui/react";
14-
import {
15-
LuClock,
16-
LuSearch,
17-
LuStar,
18-
LuTrash2,
19-
LuX,
20-
} from "react-icons/lu";
14+
import { LuClock, LuSearch, LuStar, LuTrash2, LuX } from "react-icons/lu";
2115
import type { PromptHistoryItem } from "@/hooks/usePromptHistory";
2216
import { EmptyState } from "@/components/ui/empty-state";
2317
import { useI18n } from "@/hooks/useI18n";
@@ -86,7 +80,9 @@ function HistoryItem({
8680
</HStack>
8781
<HStack gap={1}>
8882
<IconButton
89-
aria-label={item.starred ? t("history.removeFromFavorites") : t("history.addToFavorites")}
83+
aria-label={item.starred
84+
? t("history.removeFromFavorites")
85+
: t("history.addToFavorites")}
9086
size="xs"
9187
variant="ghost"
9288
onClick={(e) => {
@@ -154,7 +150,7 @@ export function PromptHistoryDialog({
154150
onSelectPrompt(prompt);
155151
onClose();
156152
},
157-
[onSelectPrompt, onClose]
153+
[onSelectPrompt, onClose],
158154
);
159155

160156
return (
@@ -165,11 +161,10 @@ export function PromptHistoryDialog({
165161
modal={true}
166162
>
167163
<Dialog.Backdrop />
168-
<Dialog.Positioner zIndex={1400}>
164+
<Dialog.Positioner>
169165
<Dialog.Content
170166
maxW={{ base: "100vw", md: "600px" }}
171167
maxH={{ base: "100vh", md: "80vh" }}
172-
zIndex={1401}
173168
>
174169
<Dialog.Header>
175170
<HStack justify="space-between" w="full">
@@ -260,37 +255,35 @@ export function PromptHistoryDialog({
260255

261256
{/* 履歴リスト */}
262257
<Box flex="1" overflowY="auto" p={4}>
263-
{filteredHistory.length === 0 ? (
264-
<EmptyState
265-
icon={<LuClock />}
266-
title={
267-
searchQuery
258+
{filteredHistory.length === 0
259+
? (
260+
<EmptyState
261+
icon={<LuClock />}
262+
title={searchQuery
268263
? t("history.noSearchResults")
269264
: activeTab === "starred"
270265
? t("history.noStarred")
271-
: t("history.noHistory")
272-
}
273-
description={
274-
searchQuery
266+
: t("history.noHistory")}
267+
description={searchQuery
275268
? t("history.noSearchResultsDescription")
276269
: activeTab === "starred"
277270
? t("history.noStarredDescription")
278-
: t("history.noHistoryDescription")
279-
}
280-
/>
281-
) : (
282-
<VStack align="stretch" gap={2}>
283-
{filteredHistory.map((item) => (
284-
<HistoryItem
285-
key={item.id}
286-
item={item}
287-
onSelect={() => handleSelect(item.prompt)}
288-
onRemove={() => onRemove(item.id)}
289-
onToggleStar={() => onToggleStar(item.id)}
290-
/>
291-
))}
292-
</VStack>
293-
)}
271+
: t("history.noHistoryDescription")}
272+
/>
273+
)
274+
: (
275+
<VStack align="stretch" gap={2}>
276+
{filteredHistory.map((item) => (
277+
<HistoryItem
278+
key={item.id}
279+
item={item}
280+
onSelect={() => handleSelect(item.prompt)}
281+
onRemove={() => onRemove(item.id)}
282+
onToggleStar={() => onToggleStar(item.id)}
283+
/>
284+
))}
285+
</VStack>
286+
)}
294287
</Box>
295288

296289
{/* フッター */}
@@ -317,5 +310,3 @@ export function PromptHistoryDialog({
317310
</Dialog.Root>
318311
);
319312
}
320-
321-

0 commit comments

Comments
 (0)