Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fe #147

Merged
merged 30 commits into from
Jul 23, 2024
Merged

Fe #147

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d0402fc
feat: 필터 생성 api 연동
kanghaeun Jul 22, 2024
8be068b
feat: 필터 조회 API 연동
kanghaeun Jul 22, 2024
957211b
fix: 잘못된 경로 및 CSS코드 수정
mlnwns Jul 23, 2024
cc69b60
Merge pull request #117 from JNU-econovation/feat/109/logout-rendering
mlnwns Jul 23, 2024
4ca8698
feat: 필터 수정 API 연동
kanghaeun Jul 23, 2024
1954dab
feat: 생성 API 수정
kanghaeun Jul 23, 2024
711dc6d
chore: 컴포넌트 분리에 따른 ICON 삭제
kanghaeun Jul 23, 2024
bda04c0
feat: 필터 삭제 API 연동
kanghaeun Jul 23, 2024
d956baa
Merge branch 'FE' of https://github.com/JNU-econovation/econo-error i…
kanghaeun Jul 23, 2024
8e0e6c4
Merge pull request #127 from JNU-econovation/feat/91/filter-crud
kanghaeun Jul 23, 2024
5517a43
fix: 로그인 기능 복구
mlnwns Jul 23, 2024
34f495c
Merge branch 'FE' into feat/116/ai-image
mlnwns Jul 23, 2024
724e78e
Merge pull request #131 from JNU-econovation/feat/116/ai-image
mlnwns Jul 23, 2024
de3098d
feat: 삭제,조회 헤더에 토큰 추가
kanghaeun Jul 23, 2024
7174bc2
feat: 필터 조회, 생성 api test
kanghaeun Jul 23, 2024
dfee98c
Merge pull request #138 from JNU-econovation/feat/129/filter-crud-test
kanghaeun Jul 23, 2024
d02765c
feat: 필터 조회,생성 헤더에 토큰 추가
kanghaeun Jul 23, 2024
fc596b2
feat: 필터수정 헤더 토큰 추가
kanghaeun Jul 23, 2024
98b55fb
feat: 필터 삭제 헤더 토큰 추가
kanghaeun Jul 23, 2024
03b4f5c
feat: 헤더에 토큰 추가
kanghaeun Jul 23, 2024
d7629ad
Merge branch 'FE' into feat/133/add-token-to-header
kanghaeun Jul 23, 2024
c698f03
Merge pull request #140 from JNU-econovation/feat/133/add-token-to-he…
kanghaeun Jul 23, 2024
80251ab
feat: 토큰 상태 추가
kanghaeun Jul 23, 2024
1c9dbda
feat: setToken 추가
kanghaeun Jul 23, 2024
9a30ec4
feat: 일정 조회 경로 수정
mlnwns Jul 23, 2024
294e282
feat: 생성 모달 개인 세부 필터 백엔드 연동
mlnwns Jul 23, 2024
056f5a0
feat: 사이드바 스크롤 기능 구현
mlnwns Jul 23, 2024
d527eeb
feat: get요청 헤더에 토큰 첨부
mlnwns Jul 23, 2024
2b9471c
Merge branch 'FE' into feat/134/filter-name-link
mlnwns Jul 23, 2024
bf6afd4
Merge pull request #143 from JNU-econovation/feat/134/filter-name-link
mlnwns Jul 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added FE/error/public/Profile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added FE/error/public/seed0838.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
74 changes: 0 additions & 74 deletions FE/error/src/axiosConfig.js
Original file line number Diff line number Diff line change
@@ -1,80 +1,6 @@
import axios from "axios";
import { useNavigate } from "react-router-dom";

// Axios 기본 설정
axios.defaults.baseURL = import.meta.env.VITE_ERROR_API;
axios.defaults.headers.common["Content-Type"] = "application/json";
axios.defaults.withCredentials = true;

let isRefreshing = false;
let refreshSubscribers = [];

const onRefreshed = (token) => {
refreshSubscribers.map((cb) => cb(token));
};

const addRefreshSubscriber = (cb) => {
refreshSubscribers.push(cb);
};

axios.interceptors.request.use(
(config) => {
const token = localStorage.getItem("slackToken");
if (token) {
config.headers["Authorization"] = `Bearer ${token}`;
}
return config;
},
(error) => {
return Promise.reject(error);
}
);

axios.interceptors.response.use(
(response) => {
return response;
},
async (error) => {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) {
if (isRefreshing) {
return new Promise((resolve) => {
addRefreshSubscriber((token) => {
originalRequest.headers["Authorization"] = "Bearer " + token;
resolve(axios(originalRequest));
});
});
}

originalRequest._retry = true;
isRefreshing = true;

const refreshToken = localStorage.getItem("refreshToken");

return new Promise((resolve, reject) => {
axios
.post("/auth/reissue", { refreshToken: refreshToken })
.then(({ data }) => {
const newToken = data.data.accessToken;
localStorage.setItem("slackToken", newToken);
axios.defaults.headers.common["Authorization"] =
"Bearer " + newToken;
originalRequest.headers["Authorization"] = "Bearer " + newToken;
onRefreshed(newToken);
resolve(axios(originalRequest));
})
.catch((err) => {
reject(err);
useNavigate().push("/login");
})
.finally(() => {
isRefreshing = false;
refreshSubscribers = [];
});
});
}
return Promise.reject(error);
}
);

export default axios;
8 changes: 7 additions & 1 deletion FE/error/src/components/DeleteEvent.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,15 @@ const DeleteEvent = ({
onRequestClose,
handleUpdateDeleteData,
}) => {
const storedToken = localStorage.getItem("slackToken");

const calendarDelete = () => {
axios
.delete("/api/calendar/" + selectID)
.delete(`/api/calendar/${selectID}`, {
headers: {
Authorization: `Bearer ${storedToken}`,
},
})
.then(() => {
handleUpdateDeleteData(selectID);
handleDelete();
Expand Down
12 changes: 6 additions & 6 deletions FE/error/src/components/EconoCalendar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,10 @@ const EconoCalendar = ({ isLoggedIn, setIsLoggedIn }) => {

const uri = isUserLoggedIn
? "/api/calendar/all"
: "/api/calendar/public/all";
const config = isUserLoggedIn
? { headers: { Authorization: `Bearer ${storedToken}` } }
: {};
: "/api/calendar/all/public";

axios
.get(uri, config)
.get(uri, { headers: { Authorization: `Bearer ${storedToken}` } })
.then((res) => {
const fetchedEvents = res.data.data.map((event) => ({
title: event.eventName,
Expand Down Expand Up @@ -292,7 +289,7 @@ const CalendarContainer = styled.div`
background-color: #fff;
border-color: #cbcbcb;
color: #595959;
margin-right: 0.7rem;
margin-right: 1rem;
}
.fc-event-title-container {
height: 1.3rem;
Expand All @@ -301,4 +298,7 @@ const CalendarContainer = styled.div`
font-size: 0.95rem;
margin-left: 0.3rem;
}
.fc-direction-ltr .fc-toolbar > * > :not(:first-child) {
margin-left: 0.5rem;
}
`;
60 changes: 57 additions & 3 deletions FE/error/src/components/SideBar/ProfileBar.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,66 @@
import styled from "styled-components";
import { useState } from "react";
import { HiPencil } from "react-icons/hi2";
import { useNavigate } from "react-router-dom";

const ProfileBar = () => {
return <StyledProfileFrame></StyledProfileFrame>;
const [isHovered, setIsHovered] = useState(false);
const navigate = useNavigate();

const handleProfileClick = () => {
navigate("/profile");
};

return (
<StyledProfileFrame>
<ProfileImageContainer
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
onClick={handleProfileClick}
>
<ProfileImage src="seed0838.png" alt="Profile" />
{isHovered && (
<EditIconOverlay>
<HiPencil />
</EditIconOverlay>
)}
</ProfileImageContainer>
</StyledProfileFrame>
);
};

export default ProfileBar;

const StyledProfileFrame = styled.div`
width: 20rem;
height: 18.4375rem;
width: 15.625rem;
height: 15rem;
align-items: center;
display: flex;
flex-direction: column;
margin-bottom: 0.6rem;
`;

const ProfileImageContainer = styled.div`
position: relative;
cursor: pointer;
`;

const ProfileImage = styled.img`
margin-top: 1.25rem;
width: 13rem;
`;

const EditIconOverlay = styled.div`
position: absolute;
top: 1rem;
left: 0;
right: 0;
bottom: 0;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
color: white;
font-size: 2rem;
`;
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import styled from "styled-components";
import FilterCreateModal from "../../../utils/filterUtils/FilterCreateModal";
import FilterList from "../../../utils/filterUtils/FilterList";

const IndividualFilter = ({ filterLists, addNewFilter }) => {
const IndividualFilter = ({
filterLists,
addNewFilter,
updateDeleteFilter,
}) => {
const [individualFilterIsOpen, setindividualFilterIsOpen] = useState(false);
const [filterListsIsOpen, setFilterListsIsOpen] = useState(true);
const createIndividualFilter = () => {
Expand All @@ -16,6 +20,7 @@ const IndividualFilter = ({ filterLists, addNewFilter }) => {
const handleArrowDown = () => {
setFilterListsIsOpen(!filterListsIsOpen);
};

return (
<>
<StyledIndividualFilterFrame>
Expand Down Expand Up @@ -60,7 +65,12 @@ const IndividualFilter = ({ filterLists, addNewFilter }) => {
/>
</StyledDetailIcon>
</StyledIndividualFilterFrame>
{filterListsIsOpen && <FilterList filterLists={filterLists} />}
{filterListsIsOpen && (
<FilterList
filterLists={filterLists}
updateDeleteFilter={updateDeleteFilter}
/>
)}
</>
);
};
Expand Down
27 changes: 16 additions & 11 deletions FE/error/src/components/scheduleCheck/CheckCalendar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ const CheckCalendar = ({
handleUpdateDeleteData,
}) => {
const [event, setEvent] = useState({});
const storedToken = localStorage.getItem("slackToken");

function createDate(title, startDate, endDate, place, info, type, color) {
const specificEvent = {
Expand All @@ -42,17 +43,21 @@ const CheckCalendar = ({
return;
}

axios.get("/api/calendar/" + selectID).then((res) => {
createDate(
res.data.data.eventName,
res.data.data.eventStartDate,
res.data.data.eventEndDate,
res.data.data.eventPlace,
res.data.data.eventInfo,
res.data.data.eventType,
res.data.data.filterColor
);
});
axios
.get("/api/calendar/" + selectID, {
headers: { Authorization: `Bearer ${storedToken}` },
})
.then((res) => {
createDate(
res.data.data.eventName,
res.data.data.eventStartDate,
res.data.data.eventEndDate,
res.data.data.eventPlace,
res.data.data.eventInfo,
res.data.data.eventType,
res.data.data.filterColor
);
});
}, [selectID]);

function date(startDate, endDate) {
Expand Down
Loading
Loading