Skip to content

Commit b34781c

Browse files
committed
Rename ChatInitializedModal to AutoClosingModal and refactor ProgressModal to support optional cancellation and elapsed time display, improving UI component flexibility and checkpoint restoration feedback
1 parent 5a69565 commit b34781c

13 files changed

Lines changed: 280 additions & 201 deletions

File tree

packages/ui/src/components/editor/panel/modals/ChatInitializedModal/ChatInitializedModal.module.scss renamed to packages/ui/src/components/editor/panel/modals/AutoClosingModal/AutoClosingModal.module.scss

File renamed without changes.

packages/ui/src/components/editor/panel/modals/ChatInitializedModal/ChatInitializedModal.stories.tsx renamed to packages/ui/src/components/editor/panel/modals/AutoClosingModal/AutoClosingModal.stories.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { useState } from 'react'
2-
import { ChatInitializedModal } from './ChatInitializedModal'
2+
import { AutoClosingModal } from './AutoClosingModal'
33

44
export default {
5-
component: ChatInitializedModal
5+
component: AutoClosingModal
66
}
77

88
export const Default = () => {
@@ -13,7 +13,7 @@ export const Default = () => {
1313
}
1414

1515
return visible ? (
16-
<ChatInitializedModal
16+
<AutoClosingModal
1717
title="Chat has been initialized in the connected browser"
1818
duration={3000}
1919
on_close={handle_close}

packages/ui/src/components/editor/panel/modals/ChatInitializedModal/ChatInitializedModal.tsx renamed to packages/ui/src/components/editor/panel/modals/AutoClosingModal/AutoClosingModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState } from 'react'
2-
import styles from './ChatInitializedModal.module.scss'
2+
import styles from './AutoClosingModal.module.scss'
33
import { Button } from '../../Button'
44
import { Modal } from '../Modal'
55

@@ -9,7 +9,7 @@ type Props = {
99
on_close: () => void
1010
}
1111

12-
export const ChatInitializedModal: React.FC<Props> = (props) => {
12+
export const AutoClosingModal: React.FC<Props> = (props) => {
1313
const [is_filling, set_is_filling] = useState(false)
1414

1515
useEffect(() => {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './AutoClosingModal'

‎packages/ui/src/components/editor/panel/modals/ChatInitializedModal/index.ts‎

Lines changed: 0 additions & 1 deletion
This file was deleted.

‎packages/ui/src/components/editor/panel/modals/ProgressModal/ProgressModal.stories.tsx‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ export const Indeterminate = () => {
1717
) : null
1818
}
1919

20+
export const NonCancellable = () => {
21+
return <ProgressModal title="Restoring checkpoint..." progress={50} />
22+
}
23+
2024
export const WithProgress = () => {
2125
const [visible, set_visible] = useState(true)
2226
const [progress, set_progress] = useState(0)

‎packages/ui/src/components/editor/panel/modals/ProgressModal/ProgressModal.tsx‎

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ export type FileProgress = {
2121

2222
type Props = {
2323
title: string
24-
on_cancel: () => void
24+
on_cancel?: () => void
2525
progress?: number
2626
tokens_per_second?: number
2727
files?: FileProgress[]
28+
show_elapsed_time?: boolean
2829
}
2930

3031
const format_tokens_per_second = (tps: number): string => {
@@ -51,27 +52,41 @@ const get_status_text = (status: FileProgressStatus): string => {
5152
}
5253

5354
export const ProgressModal: React.FC<Props> = (props) => {
55+
const [is_visible, set_is_visible] = useState(false)
5456
const [elapsed_time, set_elapsed_time] = useState(0)
5557

5658
useEffect(() => {
57-
set_elapsed_time(0)
58-
const start_time = Date.now()
59-
const timer = setInterval(() => {
60-
set_elapsed_time((Date.now() - start_time) / 1000)
61-
}, 100)
59+
set_is_visible(false)
60+
const visibility_timer = setTimeout(() => {
61+
set_is_visible(true)
62+
}, 1000)
6263

63-
return () => clearInterval(timer)
64-
}, [props.title])
64+
let elapsed_time_timer: NodeJS.Timeout | undefined
65+
if (props.show_elapsed_time !== false) {
66+
set_elapsed_time(0)
67+
const start_time = Date.now()
68+
elapsed_time_timer = setInterval(() => {
69+
set_elapsed_time((Date.now() - start_time) / 1000)
70+
}, 100)
71+
}
6572

66-
return (
73+
return () => {
74+
clearTimeout(visibility_timer)
75+
clearInterval(elapsed_time_timer)
76+
}
77+
}, [props.title, props.show_elapsed_time])
78+
79+
return is_visible ? (
6780
<Modal
6881
title={props.title}
6982
content_max_height={props.files ? 'calc(100vh - 150px)' : undefined}
7083
content_slot={
7184
<>
72-
<div className={styles['elapsed-time']}>
73-
{elapsed_time.toFixed(1)}s
74-
</div>
85+
{props.show_elapsed_time !== false && (
86+
<div className={styles['elapsed-time']}>
87+
{elapsed_time.toFixed(1)}s
88+
</div>
89+
)}
7590

7691
{props.files ? (
7792
<div className={styles.content}>
@@ -161,7 +176,11 @@ export const ProgressModal: React.FC<Props> = (props) => {
161176
)}
162177
</>
163178
}
164-
footer_slot={<Button on_click={props.on_cancel}>Cancel</Button>}
179+
footer_slot={
180+
props.on_cancel ? (
181+
<Button on_click={props.on_cancel}>Cancel</Button>
182+
) : undefined
183+
}
165184
/>
166-
)
185+
) : null
167186
}

0 commit comments

Comments
 (0)