24- React File Manager Chapter XXIV: Create Directory 작업 완료
13298 단어 typescriptmongezreactjavascript
createDirectory
작업이 제대로 작동하도록 모든 것이 준비되었습니다.createDirectory
작업에 토스트를 추가해 보겠습니다.// src/store/actions/file-manager/createDirectory.ts
import { toastLoading } from "design-system/components/Toast";
import Kernel from "../Kernel";
import fileManagerService from "../services/file-manager-service";
export default function createDirectory(kernel: Kernel) {
return function create(
directoryName: string,
directoryPath: string = kernel.currentDirectoryNode?.path as string,
) {
return new Promise((resolve, reject) => {
const loader = toastLoading(
"Creating directory...",
"We are creating your directory, please wait a moment.",
);
fileManagerService
.createDirectory(directoryName, directoryPath)
.then(response => {
loader.success("Success!", "Your directory has been created.");
resolve(response.data.node);
})
.catch(error => {
loader.error("Error", error.response.data.error);
reject(error);
});
});
};
}
그래서 컴포넌트에서 사용할 수 있도록 새로운 Promise를 반환하고,
toastLoading
함수를 사용하여 로딩 토스트를 보여주고, fileManagerService
를 사용하여 서버에 요청을 한 다음, loader
요청이 성공한 경우 성공 알림을 표시하고 요청이 실패한 경우 오류 알림을 표시합니다.요청이 완료되면 새로 생성된 디렉토리 노드로 약속을 해결한 다음 모달 디렉토리를 닫습니다.
// CreateDirectoryModal.tsx
import { Modal } from "@mantine/core";
import { Form, FormInterface } from "@mongez/react-form";
import SubmitButton from "design-system/components/Form/SubmitButton";
import TextInput from "design-system/components/Form/TextInput";
import React from "react";
import { useKernel } from "../../../hooks";
export type CreateDirectoryModalProps = {
open: boolean;
onClose: () => void;
};
export default function CreateDirectoryModal({
open,
onClose,
}: CreateDirectoryModalProps) {
const kernel = useKernel();
const submitForm = (e: React.FormEvent, form: FormInterface) => {
const directoryName = form.value("name");
kernel.actions
.createDirectory(directoryName)
// 👇🏻 close the modal after creating the directory
.then(() => {
onClose();
})
// 👇🏻 If an error occurred, then allow form to be resubmitted again for example to allow the user to change the directory name.
.catch(() => {
form.submitting(false);
});
};
return (
<Modal
title={<strong>{kernel.currentDirectoryNode?.path}</strong>}
opened={open}
trapFocus={false}
onClose={onClose}>
<Form onSubmit={submitForm}>
<h2>Create New Directory</h2>
<TextInput
name="name"
required
autoFocus
placeholder="Please Enter Directory Name"
/>
<div
style={{
textAlign: "end",
marginTop: "1.5rem",
}}>
<SubmitButton>Create</SubmitButton>
</div>
</Form>
</Modal>
);
}
이제 여기에 추가한 것은 모달이 더 이상 필요하지 않기 때문에 모달을 닫는
then
호출이며 오류가 발생한 경우 사용자가 양식을 다시 제출할 수 있도록 하는 catch
호출을 추가했습니다.커널 노드 트리
이제 새로 생성된 디렉토리를 주어진 경로 하위 트리에 추가해야 합니다.
그러나이 단계 전에 모든 파일과 디렉토리를 포함하는 큰 트리를 만들어야 합니다.
이를 통해 주어진 경로를 쉽게 찾고 새로 생성된 디렉토리를 추가할 수 있습니다.
다음 장
다음 장에서는 트리 기반 커널을 만들어 내부에 모든 노드를 주입합니다.
기사 저장소
Github Repository에서 챕터 파일을 볼 수 있습니다.
Don't forget the
main
branch has the latest updated code.
지금 어디 있는지 말해줘
이 시리즈를 저와 함께 후속 조치하는 경우 현재 위치와 어려움을 겪고 있는 부분을 알려주시면 최대한 도와드리겠습니다.
살람.
Reference
이 문제에 관하여(24- React File Manager Chapter XXIV: Create Directory 작업 완료), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hassanzohdy/24-react-file-manager-chapter-xxiv-completing-create-directory-action-18dn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)