📝 오늘 한 일
✔️ hook으로 리팩토링 - 게시글 수정, 게시글 글쓰기, 개인액션 수정
✔️ 개인액션 수정 - 이미지 삭제버튼 변경
✔️ 이미지 드래그 앤 드랍
✔️ 상세모달창 로딩처리
- 사용처
- 개인액션 등록, 수정 페이지
- 커뮤니티 게시글 등록, 수정 모달창
- 참고 : https://guiyomi.tistory.com/148
// 이미지 미리보기 띄우기
const handleShowPreview = (e: React.ChangeEvent<HTMLInputElement>) => {
const file = e.target.files?.[0];
if (!file) {
return;
}
const imageUrl = URL.createObjectURL(file);
setUploadedFileUrls((prev) => [...prev, imageUrl]);
setFiles((prev) => [...prev, file]);
};
// 미리보기 이미지 삭제
const handleDeleteImage = (index: number) => {
setUploadedFileUrls((prev) => {
const updatedUrls = [...prev];
updatedUrls.splice(index, 1);
return updatedUrls;
});
setFiles((prev) => {
const updateFiles = [...prev];
updateFiles.splice(index, 1);
return updateFiles;
});
};
// 드래그 앤 드랍 상태
const [isDragging, setIsDragging] = useState(false);
// 드래그 앤 드랍 이벤트 핸들러
const handleDragStart = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(true);
};
// 드래그 중인 아이템이 요소 위로 이동할 때 발생하는 이벤트를 처리
// (기본적으로 브라우저의 기본 동작을 막음)
// (드래그한 아이템을 요소 위에 올렸을 때 특정 스타일을 적용, 드롭이 허용되는 영역임을 시각적으로 표시할 수 있음)
const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
};
const handleDragEnd = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(false);
};
const handleDrop = (e: React.DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(false);
// ⭐️ e.target.files가 아니라, dataTransfer라는 점 주의!
const files = e.dataTransfer.files;
if (!files || files.length === 0) {
return;
}
const file = files[0];
const imageUrl = URL.createObjectURL(file);
setUploadedFileUrls((prev) => [...prev, imageUrl]);
setFiles((prev) => [...prev, file]);
};
<div
className={`flex gap-2 w-full h-auto mb-8 ${
isDragging ? "border-blue-400" : "border-gray-300"
}`}
onDragEnter={handleDragStart}
onDragOver={handleDragOver}
onDragLeave={handleDragEnd}
onDrop={handleDrop}
>
{[...Array(4)].map((_, index) => (
<div
key={index}
>
// ... 생략
📝 2시간 가량의 회의내용
들어갈 이미지, 로고 전달 (월요일까지)
(추가) : 로딩 스피너 애니메이션 전달해주기로함
confirm창 디자인 수정해주세요
채팅기능 디자인 (수요일까지)
모바일 반응형 (다음주 월요일까지)
기업단체 한페이지에 8장 - 페이지네이션
커뮤니티 리스트 - 그리드로 수정
커뮤니티 게시글 - 디자인 수정 (그라데이션)
댓글 입력칸 - 아래로 이동 (스크롤 영역 외로)
인증글 올리면 포인트 축하 모달 뜨게