diff --git a/packages/libro-jupyter/src/file/file-create-modal.tsx b/packages/libro-jupyter/src/file/file-create-modal.tsx index 20862d3b..4f14c693 100644 --- a/packages/libro-jupyter/src/file/file-create-modal.tsx +++ b/packages/libro-jupyter/src/file/file-create-modal.tsx @@ -28,7 +28,7 @@ export const FileCreateModalComponent: React.FC> = }: ModalItemProps) => { const fileService = useInject(JupyterFileService); const viewManager = useInject(ViewManager); - const [fileType, setFileType] = useState(data.fileType); + const [fileType, setFileType] = useState(data?.fileType); const [fileView, setFileView] = useState(); const inputRef = useRef(null); const [form] = Form.useForm(); @@ -37,7 +37,10 @@ export const FileCreateModalComponent: React.FC> = await form.validateFields(); close(); try { - await fileService.newFile(values.fileName + (fileType || ''), new URI(data.path)); + await fileService.newFile( + values.fileName + (fileType || ''), + new URI(data?.path), + ); if (fileView) { fileView.model.refresh(); } @@ -50,7 +53,7 @@ export const FileCreateModalComponent: React.FC> = if (!value || !value.length) { throw new Error('请输入文件名'); } else { - const targetURI = new URI(data.path + value + (fileType || '')); + const targetURI = new URI(data?.path + value + (fileType || '')); const fileRes = await fileService.resolve(targetURI); if (fileRes.isFile) { throw new Error('文件名称已存在,请重新输入'); @@ -86,7 +89,7 @@ export const FileCreateModalComponent: React.FC> = >
创建位置:
- {data.path} + {data?.path}
文件类型:
diff --git a/packages/libro-jupyter/src/file/file-createdir-modal.tsx b/packages/libro-jupyter/src/file/file-createdir-modal.tsx index 5c8aec83..419caf99 100644 --- a/packages/libro-jupyter/src/file/file-createdir-modal.tsx +++ b/packages/libro-jupyter/src/file/file-createdir-modal.tsx @@ -27,7 +27,7 @@ export const FileCreateDirModalComponent: React.FC< await form.validateFields(); close(); try { - await fileService.newFileDir(values.dirName, new URI(data.path)); + await fileService.newFileDir(values.dirName, new URI(data?.path)); if (fileView) { fileView.model.refresh(); } @@ -40,7 +40,7 @@ export const FileCreateDirModalComponent: React.FC< if (!value || !value.length) { throw new Error('请输入文件夹名'); } else { - const targetURI = new URI(data.path + value); + const targetURI = new URI(data?.path + value); const fileRes = await fileService.resolve(targetURI); if (fileRes.isDirectory) { throw new Error('文件夹名称已存在,请重新输入'); @@ -75,7 +75,7 @@ export const FileCreateDirModalComponent: React.FC< width={524} >
创建位置:
- {data.path} + {data?.path}
> = await form.validateFields(); close(); try { - await fileService.rename(data.resource, values.rename); - - if (fileView) { - fileView.model.refresh(); + if (data && data.resource) { + await fileService.rename(data.resource, values.rename); + if (fileView) { + fileView.model.refresh(); + } } } catch { message.error('重命名文件/文件夹失败'); @@ -54,7 +55,7 @@ export const FileRenameModalComponent: React.FC> = if (!value || !value.length) { throw new Error('请输入文件夹名'); } else { - if (value === data.fileName) { + if (value === data?.fileName) { throw new Error('文件/文件夹名称已存在,请重新输入'); } } @@ -81,7 +82,7 @@ export const FileRenameModalComponent: React.FC> = name="rename" label="文件/文件夹名称" rules={[{ required: true, validator: validateRename }]} - initialValue={data.fileName} + initialValue={data?.fileName} > { } } + if (selectValue === 'RestartKernel') { + libroView.model.kernelConnecting = false; + if (libroView.model.restart) { + libroView.model.restart(); + } + } + const kernelInfoFromOtherKernelList = otherKernelList.filter( (k) => k.name === selectValue, ); diff --git a/packages/libro-kernel/src/kernelspec/manager.ts b/packages/libro-kernel/src/kernelspec/manager.ts index 41a97144..7d72de66 100644 --- a/packages/libro-kernel/src/kernelspec/manager.ts +++ b/packages/libro-kernel/src/kernelspec/manager.ts @@ -1,5 +1,6 @@ import { deepEqual, Poll } from '@difizen/libro-common'; import type { Event as ManaEvent } from '@difizen/mana-app'; +import { getOrigin } from '@difizen/mana-app'; import { Emitter, Deferred } from '@difizen/mana-app'; import { inject, singleton } from '@difizen/mana-app'; import { prop } from '@difizen/mana-app'; @@ -28,21 +29,6 @@ export class KernelSpecManager extends BaseManager implements KernelSpec.IManage */ constructor() { super(); - - // Initialize internal data. - this._ready = Promise.all([this.requestSpecs()]) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .then((_) => undefined) - // eslint-disable-next-line @typescript-eslint/no-unused-vars - .catch((_) => undefined) - .then(() => { - if (this.isDisposed) { - return; - } - this._isReady = true; - return; - }); - this._pollSpecs = new Poll({ auto: false, factory: () => this.requestSpecs(), @@ -55,10 +41,13 @@ export class KernelSpecManager extends BaseManager implements KernelSpec.IManage standby: 'when-hidden', // standby: options.standby ?? 'when-hidden', }); - void this.ready.then(() => { - void this._pollSpecs.start(); - return; - }); + // Initialize internal data. + this._ready = (async () => { + await this.serverManager.ready; + await getOrigin(this._pollSpecs).start(); + await getOrigin(this._pollSpecs).tick; + this._isReady = true; + })(); } /**