Skip to content
Snippets Groups Projects
Commit 2225dc63 authored by Gaeon Kim's avatar Gaeon Kim
Browse files
parents 252a5d6e c478a7af
No related branches found
No related tags found
No related merge requests found
...@@ -3,7 +3,7 @@ import "@progress/kendo-theme-default/dist/all.css"; ...@@ -3,7 +3,7 @@ import "@progress/kendo-theme-default/dist/all.css";
import React, {useEffect, useState, useContext} from 'react'; import React, {useEffect, useState, useContext} from 'react';
import '@progress/kendo-react-intl'; import '@progress/kendo-react-intl';
import '@progress/kendo-react-scheduler'; import '@progress/kendo-react-scheduler';
//import { AppContext } from '../../pages/main'; import { AppContext } from '../../pages/main';
import { Scheduler, WeekView, DayView, MonthView, SchedulerEditItem} from '@progress/kendo-react-scheduler'; import { Scheduler, WeekView, DayView, MonthView, SchedulerEditItem} from '@progress/kendo-react-scheduler';
import calendar_styles from './calendar.module.css' import calendar_styles from './calendar.module.css'
...@@ -58,7 +58,7 @@ const MySchedulerApp = () => { ...@@ -58,7 +58,7 @@ const MySchedulerApp = () => {
const[scheduleListModalOpen, setScheduleListModalOpen]=useState(false); const[scheduleListModalOpen, setScheduleListModalOpen]=useState(false);
//const [isContent, setIsContent]=useState(' 상세 내용이 없습니다. '); //const [isContent, setIsContent]=useState(' 상세 내용이 없습니다. ');
const [date, setDate]=useState(defaultDate); const [date, setDate]=useState(defaultDate);
//const { setCount } = useContext(AppContext); const { setCount } = useContext(AppContext);
const openInModal=()=>{ const openInModal=()=>{
...@@ -115,7 +115,7 @@ const MySchedulerApp = () => { ...@@ -115,7 +115,7 @@ const MySchedulerApp = () => {
if(response.status===200){ if(response.status===200){
alert('중복된 일정이 존재합니다.'); alert('중복된 일정이 존재합니다.');
} }
//setCount( prevNum=> (prevNum+1)) setCount( prevNum => (prevNum+1))
}) })
.then(data => { .then(data => {
......
...@@ -53,14 +53,15 @@ function CreateRecruit({ isOpen, onClose }){ ...@@ -53,14 +53,15 @@ function CreateRecruit({ isOpen, onClose }){
})); }));
}; };
const handleSave = () => { const handleSave = (e) => {
e.preventDefault()
if(formData.data.timeCategory === "D"){ if(formData.data.timeCategory === "D"){
handleSubmit({ handleSubmit({
...formData, ...formData,
data: { data: {
...formData.data, ...formData.data,
startTime: `${timeData.startHour}:${timeData.startMinute}`, startTime: `${timeData.startHour || '00'}:${timeData.startMinute || '00'}`,
endTime: `${timeData.endHour}:${timeData.endMinute}`, endTime: `${timeData.endHour || '00'}:${timeData.endMinute || '00'}`,
} }
}); });
}else{ }else{
...@@ -106,6 +107,11 @@ function CreateRecruit({ isOpen, onClose }){ ...@@ -106,6 +107,11 @@ function CreateRecruit({ isOpen, onClose }){
} }
} }
if (formData.data.endTime < formData.data.startTime) {
alert('종료 시간은 시작 시간보다 늦어야 합니다.');
return;
}
try { try {
const jsonDataString = JSON.stringify(formData.data); const jsonDataString = JSON.stringify(formData.data);
const formDataToSend = new FormData(); const formDataToSend = new FormData();
......
...@@ -51,7 +51,8 @@ const ModifyRecruit=({isOpen, onClose, data})=>{ ...@@ -51,7 +51,8 @@ const ModifyRecruit=({isOpen, onClose, data})=>{
})); }));
}; };
const handleSave = () => { const handleSave = (e) => {
e.preventDefault()
if(formData.info.timeCategory === "D"){ if(formData.info.timeCategory === "D"){
modifyInfo({ modifyInfo({
...formData, ...formData,
...@@ -67,6 +68,44 @@ const ModifyRecruit=({isOpen, onClose, data})=>{ ...@@ -67,6 +68,44 @@ const ModifyRecruit=({isOpen, onClose, data})=>{
}; };
const modifyInfo = async (formData)=>{ const modifyInfo = async (formData)=>{
if(formData.info.title === ''){
alert('제목을 입력해주세요.');
return;
} else if(formData.info.timeCategory === ''){
alert('시간 지정 여부를 선택해주세요.');
return;
} else if(formData.info.content === ''){
alert('내용을 입력해주세요.');
return;
} else if(formData.info.peopleNum === ''){
alert('모집 인원을 입력해주세요.');
return;
} else if(formData.info.startDate === ''){
alert('시작 날짜를 입력해주세요.');
return;
} else if(formData.info.endDate === ''){
alert('종료 날짜를 입력해주세요.');
return;
}
if(formData.info.timeCategory === "D"){
if(timeData.startHour === null || timeData.endHour === null || timeData.startMinute === null || timeData.endMinute === null){
alert('시간을 선택해주세요.');
return;
}
}
if (formData.info.endTime < formData.info.startTime) {
alert('종료 시간은 시작 시간보다 늦어야 합니다.');
return;
}
if (data.state === "Closed"){
if(formData.info.peopleNum < data.peopleNum){
alert('모집 완료시 이전 인원보다 적은 인원으로 변경할 수 없습니다.');
return;
}
}
try{ try{
const jsonDataString = JSON.stringify(formData.info); const jsonDataString = JSON.stringify(formData.info);
const formDataToSend = new FormData(); const formDataToSend = new FormData();
......
...@@ -154,7 +154,11 @@ const RecruitDetail = ({ isOpen, onClose, data }) => { ...@@ -154,7 +154,11 @@ const RecruitDetail = ({ isOpen, onClose, data }) => {
</div> </div>
</div> </div>
)} )}
{data.state === "Recruiting" ? (
<button type="button" className={recruitDetailStyles.apply} onClick={applyInfo}>신청</button> <button type="button" className={recruitDetailStyles.apply} onClick={applyInfo}>신청</button>
):(
<button type="button" className={recruitDetailStyles.endApply} onClick={applyInfo} disabled>신청</button>
)}
</div> </div>
</div> </div>
</div> </div>
......
...@@ -309,3 +309,20 @@ ...@@ -309,3 +309,20 @@
background-color: #808DC2; background-color: #808DC2;
color: #FFFFFF; color: #FFFFFF;
} }
.endApply{
display: flex; /* Flexbox를 사용하여 자식 요소들을 가로로 배열합니다. */
align-items: center; /* 세로 방향에서 가운데 정렬. */
justify-content: center;
width: 81px;
height: 40px;
margin-left: 10px;
border: none;
font-size: 22px;
font-weight: bolder;
background-color: #b5b9c5;
color: #FFFFFF;
}
\ No newline at end of file
...@@ -5,8 +5,6 @@ import CreateRecruit from './recruit/createRecruit'; ...@@ -5,8 +5,6 @@ import CreateRecruit from './recruit/createRecruit';
import MyChannelModal from './channel/myChannelModal'; import MyChannelModal from './channel/myChannelModal';
import ExistingChannel from './channel/existingChannel'; import ExistingChannel from './channel/existingChannel';
function Search({ currentPage, onUrlGenerated, onFirstQueryString, onSecondQueryString }){ function Search({ currentPage, onUrlGenerated, onFirstQueryString, onSecondQueryString }){
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const [searchTerm, setSearchTerm] = useState(''); const [searchTerm, setSearchTerm] = useState('');
...@@ -54,8 +52,6 @@ function Search({ currentPage, onUrlGenerated, onFirstQueryString, onSecondQuery ...@@ -54,8 +52,6 @@ function Search({ currentPage, onUrlGenerated, onFirstQueryString, onSecondQuery
} }
}; };
const handleSearch = () => { const handleSearch = () => {
let searchURL = `${currentPage}/search`; let searchURL = `${currentPage}/search`;
let firstQueryString = '?'; let firstQueryString = '?';
......
import React, { useState } from "react";
//import createSubscribeStyles from './createSubscribe.module.css';
function CreateSubscribe({ isOpen, onClose }){
const [formData, setFormData] = useState({
data: {
},
image: null
});
const handleInputChange = (e) => {
const { name, value } = e.target;
setFormData((prevData) => ({
...prevData,
data: {
...prevData.data,
[name]: value,
},
}));
};
const handleImageChange = (e) => {
const imageFile = e.target.files[0];
setFormData((prevDate) => ({
...prevDate,
image: imageFile
}));
};
const handleSubmit = async (e) => {
e.preventDefault();
if(formData.data.title === ''){
alert('제목을 입력해주세요.');
return;
} else if(formData.data.content === ''){
alert('내용을 입력해주세요.');
return;
}
const jsonDataString = JSON.stringify(formData.data);
try {
const formDataToSend = new FormData();
formDataToSend.append('data', jsonDataString);
formDataToSend.append('image', formData.image);
const response = await fetch('/api/subscribes', {
method: 'POST',
body: formDataToSend,
});
if (response.ok) {
alert('채널이 성공적으로 생성되었습니다.');
window.location.reload();
} else {
alert('채널 생성에 실패하였습니다.');
}
} catch (error) {
console.error('Error:', error);
}
};
return(
<div>
{isOpen && (
<div className={createRecruitStyles.overlay}>
<div className={createRecruitStyles.modal}>
<button type="button" className={createRecruitStyles.x} onClick={onClose}>X</button>
<div className={createRecruitStyles.top}>
<div>채널 생성</div>
</div>
<form onSubmit={handleSubmit}>
<div className={createRecruitStyles.title}>
<label>제목*</label>
<input type="text" name="title" value={formData.data.title} onChange={handleInputChange} placeholder="제목을 입력하세요.(50자 이내)"/>
</div>
<div className={createRecruitStyles.content}>
<label>내용*</label>
<textarea name="content" value={formData.data.content} onChange={handleInputChange} placeholder="내용을 입력하세요."/>
</div>
<div className={createRecruitStyles.image}>
<label>이미지 첨부</label>
<input type="file" name="image" value={formData.data.image} onChange={handleImageChange} />
</div>
<div className={createRecruitStyles.button}>
<button type="submit" className={createRecruitStyles.save}>저장</button>
<button type="button" className={createRecruitStyles.cancel} onClick={onClose}>취소</button>
</div>
</form>
</div>
</div>
)}
</div>
)
}
export default CreateSubscribe;
\ No newline at end of file
import React, { useState } from 'react';
//import subscribeListStyles from '.subscribeList.module.css';
import InfiniteScroll from '../infiniteScroll';
function PageItem(props){
const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => {
setIsModalOpen(true);
};
const closeModal = () => {
setIsModalOpen(false);
};
return (
<div className='{subscribeListStyles.subscribe}'>
</div>
)
}
function SubscribeList(){
return(
<div className='{subscribeListStyles.SubscribeList}'>
<InfiniteScroll pagename='subscribes' />
</div>
)
}
export {SubscribeList, PageItem};
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment