@@ -118,12 +118,21 @@ type Ipynb = {
118118 metadata : { kernelspec : KernelSpec } ;
119119} ;
120120
121+ function ensureExtension ( filename , ext ) {
122+ if ( ! filename ) return filename ;
123+ if ( ! filename . endsWith ( "." + ext ) ) {
124+ return filename + "." + ext ;
125+ }
126+ return filename ;
127+ }
128+
121129interface Props {
122130 project_id : string ;
123131 onSuccess : ( ) => void ;
124132 ext : Ext ;
125133 docName : string ;
126134 show : boolean ;
135+ filename ?: string ;
127136}
128137
129138function AIGenerateDocument ( {
@@ -132,6 +141,7 @@ function AIGenerateDocument({
132141 project_id,
133142 ext,
134143 docName,
144+ filename : filename0 ,
135145} : Props ) {
136146 const projectActions = useActions ( { project_id } ) ;
137147 const current_path = useTypedRedux ( { project_id } , "current_path" ) ;
@@ -145,7 +155,12 @@ function AIGenerateDocument({
145155 const [ saving , setSaving ] = useState < boolean > ( false ) ;
146156 const [ error , setError ] = useState < string > ( "" ) ;
147157 const [ preview , setPreview ] = useState < string | null > ( null ) ;
148- const [ filename , setFilename ] = useState < string > ( "" ) ;
158+ const [ filename , setFilename ] = useState < string > (
159+ ensureExtension ( filename0 ?? "" , ext ) ,
160+ ) ;
161+ useEffect ( ( ) => {
162+ setFilename ( ensureExtension ( filename0 ?? "" , ext ) ) ;
163+ } , [ filename0 ] ) ;
149164 const promptRef = useRef < HTMLElement > ( null ) ;
150165
151166 const [ kernelSpecs , setKernelSpecs ] = useState < KernelSpec [ ] | null | string > (
@@ -452,6 +467,9 @@ function AIGenerateDocument({
452467 }
453468
454469 function updateFilename ( fnNext : string ) {
470+ if ( filename ) {
471+ return ;
472+ }
455473 const fn = sanitizeFilename ( fnNext , ext ) ;
456474 const timestamp = getTimestamp ( ) ;
457475 setFilename ( `${ fn } -${ timestamp } .${ ext } ` ) ;
@@ -741,7 +759,6 @@ function AIGenerateDocument({
741759 }
742760
743761 function renderDialog ( ) {
744- const empty = prompt . trim ( ) == "" ;
745762 return (
746763 < >
747764 < Paragraph strong >
@@ -754,7 +771,7 @@ function AIGenerateDocument({
754771 />
755772 </ Paragraph >
756773 { renderJupyterKernelSelector ( ) }
757- < Paragraph type = { empty ? "danger" : undefined } >
774+ < Paragraph >
758775 Provide a detailed description of the { docName } document you want to
759776 create:
760777 </ Paragraph >
@@ -767,7 +784,6 @@ function AIGenerateDocument({
767784 placeholder = { PLACEHOLDER }
768785 value = { prompt }
769786 disabled = { querying }
770- status = { empty ? "error" : undefined }
771787 onChange = { ( { target : { value } } ) => setPrompt ( value ) }
772788 onPressEnter = { ( e ) => {
773789 if ( e . shiftKey ) {
@@ -899,7 +915,7 @@ function AIGenerateDocument({
899915 setPreview ( null ) ;
900916 } }
901917 >
902- < Icon name = "arrow-left" /> Discard
918+ Cancel
903919 </ Button >
904920 < Button
905921 type = "primary"
@@ -959,12 +975,14 @@ export function AIGenerateDocumentModal({
959975 setShow,
960976 project_id,
961977 ext,
978+ filename,
962979} : {
963980 show : boolean ;
964981 setShow : ( val : boolean ) => void ;
965982 project_id : string ;
966983 style ?: CSS ;
967984 ext : Props [ "ext" ] ;
985+ filename ?: string ;
968986} ) {
969987 const docName = file_options ( `x.${ ext } ` ) . name ?? `${ capitalize ( ext ) } ` ;
970988
@@ -986,6 +1004,7 @@ export function AIGenerateDocumentModal({
9861004 onSuccess = { ( ) => setShow ( false ) }
9871005 ext = { ext }
9881006 docName = { docName }
1007+ filename = { filename }
9891008 />
9901009 </ Modal >
9911010 ) ;
@@ -996,11 +1015,13 @@ export function AIGenerateDocumentButton({
9961015 style,
9971016 mode = "full" ,
9981017 ext,
1018+ filename,
9991019} : {
10001020 project_id : string ;
10011021 style ?: CSS ;
10021022 mode ?: "full" | "flyout" ;
10031023 ext : Props [ "ext" ] ;
1024+ filename ?: string ;
10041025} ) {
10051026 const [ show , setShow ] = useState < boolean > ( false ) ;
10061027
@@ -1046,6 +1067,7 @@ export function AIGenerateDocumentButton({
10461067 show = { show }
10471068 setShow = { setShow }
10481069 project_id = { project_id }
1070+ filename = { filename }
10491071 />
10501072 </ >
10511073 ) ;
0 commit comments