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] FEAT: topNav 다크모드 토글 추가 #1649 #1690

Merged
merged 57 commits into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
90924d2
[FE] FEAT: admin TopNavDomainGroup 우측 상단에 toggle 버튼 추가 #1649
gykoh42 Jun 30, 2024
10d7b0a
[FE] FEAT: ToggleContainer right 속성 조정 #1649
gykoh42 Jun 30, 2024
123f69d
[FE] FEAT: ToggleSwitch 클릭시 localStorage 값 update 하는 로직 추가 #1649
gykoh42 Jun 30, 2024
c6cc4ab
[FE] FEAT: ToggleSwitch 대신 DarkModeToggleSwitch 로 대체 #1649
gykoh42 Jul 2, 2024
5e5f59e
[FE] FEAT: DarkModeToggleSwitch 구현 #1649
gykoh42 Jul 2, 2024
dc5c993
[FE] REFACT: DisplayStyleCard.container.tsx 리팩토링#1649
jnkeniaem Jul 2, 2024
3cbb2c1
[FE] FEAT: ToggleKnob 크기 및 left 속성 조정 #1649
gykoh42 Jul 14, 2024
ff63c15
[FE] FEAT: 다크모드 토글을 위한 moonAdmin.svg 추가 #1649
gykoh42 Jul 14, 2024
5ce56b8
[FE] FEAT: 다크모드 토글을 위한 sunAdmin.svg 추가 #1649
gykoh42 Jul 14, 2024
bd01622
[FE] FEAT: 다크모드 토글에 아이콘 적용 #1649
gykoh42 Jul 14, 2024
3a4a27b
[FE] FEAT: 다크모드 토글에 아이콘 색상 변경 #1649
gykoh42 Jul 14, 2024
c11e56f
[FE] FIX: admin coin그래프 깨지는 버그 수정 #1649
Minkyu01 Jul 14, 2024
319bb33
[FE] FEAT: sunAdmin.svg 색상 변경 #1649
gykoh42 Jul 14, 2024
957002f
[FE] FIX: TopNavDomainGroup 에 올바르지 않은 로고 색상 적용되는 문제 해결 #1649
gykoh42 Jul 16, 2024
a63da51
[FE] FEAT: DisplayStyleCard.container 파일 dev 브랜치 파일로 복구 #1649
gykoh42 Jul 22, 2024
22593b5
[FE] FEAT: DarkModeToggleSwitch 의 초기값을 기기 설정값으로 적용하는 로직 추가 #1649
gykoh42 Jul 22, 2024
392abb3
[FE] FEAT: TopNavDomainGroup 에 수정한 DarkModeToggleSwitch 추가 #1649
gykoh42 Jul 22, 2024
35ef96c
[FE] FIX: 토글 버튼으로 화면 모드 설정한 상태에서 기기 설정으로 모드 변경시 토글 버튼을 두번 클릭해야 값이 변경되…
gykoh42 Jul 22, 2024
03219d3
[FE] FEAT: tmp push
gykoh42 Aug 1, 2024
c420d0e
[FE] Chore: tmp push
gykoh42 Sep 3, 2024
1ae685a
[FE] FEAT: displayStyleState 추가 #1649
gykoh42 Sep 9, 2024
05459aa
[FE] FEAT: recoil로 토글 스위치와 프로필 버튼 통합 #1649
gykoh42 Sep 9, 2024
e4e88ce
[FE] FEAT: DisplayStyleCard 및 DisplayStyleCard container 에 props 받아지도…
gykoh42 Sep 10, 2024
274efd7
[FE] FEAT: useRecoilState 적용 #1649
gykoh42 Sep 10, 2024
bba18dc
[FE] FEAT: useEffect 에 body 부분 바꾸는 로직 추가 #1649
gykoh42 Sep 10, 2024
0b7e061
[FE] FIX: DarkModeToggleSwitch 버그 해결 및 코드 리팩토링 #1649
gykoh42 Sep 24, 2024
6cd7b0a
[FE] FEAT: 컨벤션에 맞도록 컴포넌트명 수정 #1649
gykoh42 Sep 25, 2024
8a64ec8
[FE] FEAT: toggleType이 DEVICE 일때만 darkMode 상태가 업데이트 되도록 구현 #1649
gykoh42 Sep 25, 2024
60dfde7
[FE] FIX: 화면 새로고침 시 displayStyleType 의 초깃값으로 인해 다크 모드 토글 노브가 깜빡이는 문제 …
gykoh42 Sep 25, 2024
140aae1
[FE] FEAT: 불필요한 출력문 삭제 #1649
gykoh42 Sep 25, 2024
1c02d72
[FE] REMOVE: sunAdmin, moonAdmin 아이콘 삭제 #1649
gykoh42 Sep 25, 2024
c1c17b9
[FE] FEAT: 토글 스위치에 포함된 아이콘 파일명 변경 #1649
gykoh42 Sep 25, 2024
56ae503
[FE] FEAT: 일관성 유지를 위해 key 값 명칭 변경 #1649
gykoh42 Sep 25, 2024
93da392
[FE] displayStyleSate 의 타입을 string 에서 DisplayStyleToggleType 으로 변경 #1649
gykoh42 Sep 25, 2024
8c84ec4
[FE] FEAT: 불필요한 import 문 삭제 #1649
gykoh42 Sep 25, 2024
5b5f2c4
[FE] FEAT: IToggleItemSeparated 의 key 값 수정에 따른 코드 수정 #1649
gykoh42 Sep 25, 2024
8ac486d
[FE] FEAT: toggleType 의 타입 재정의에 따른 불필요한 코드 삭제 #1649
gykoh42 Sep 25, 2024
2680023
[FE] REFACTOR: useEffect 중복 로직 삭제 및 코드 간소화 #1649
gykoh42 Sep 25, 2024
fb6b9cb
[FE] FIX: AdminSlackNoti 페이지에 다크모드 적용시 텍스트 색상이 흰색으로 바뀌지 않는 버그 해결 #1649
gykoh42 Sep 26, 2024
c430816
[FE] REFACTOR: DarkModeToggleSwitch 코드 리팩토링 #1649
gykoh42 Sep 26, 2024
eb933b5
[FE] FEAT: DisplayStyleCard.container 에 불필요한 handleButtonClick props …
gykoh42 Sep 30, 2024
d9d38ad
[FE] FEAT: DisplayStyleCard.container 에 불필요한 handleButtonClick props …
gykoh42 Sep 30, 2024
1fae244
[FE] FEAT: 불필요한 의존성 삭제 및 함수명 변경 #1649
gykoh42 Oct 22, 2024
547fe37
[FE] FEAT: getSavedToggleType 대신 savedDisplayStyleToggle 을 export 해서 …
gykoh42 Oct 22, 2024
abbdaff
[FE] FIX: device 모드일 때 토글을 두번 클릭해야 모드가 바뀌는 버그 해결 #1649
gykoh42 Oct 22, 2024
b1415b8
[FE] FEAT: currentSectionNameState 추가 #1649
gykoh42 Oct 25, 2024
601939e
Merge branch 'dev' into fe/dev/feat_admin_dark/#1649
gykoh42 Oct 25, 2024
dfa5d9b
[FE] Chore: 임시 커밋 #1649
gykoh42 Nov 30, 2024
c21ce67
[FE] FIX: 토글 변경 후 까비와 수지회를 이동할 시 토글 적용 안되는 버그 해결 #1649
gykoh42 Dec 17, 2024
9c57158
Merge branch 'dev' of github.com:innovationacademy-kr/Cabi into fe/de…
gykoh42 Dec 17, 2024
35de4ca
[FE] FIX: 초기 깜빡임 문제 해결을 위한 getDisplayStyleFromLocalStorage 함수 도입 #1649
gykoh42 Dec 19, 2024
4301c42
[FE] FIX: updateBodyDisplayStyle 생성 & 적용 #1649
jnkeniaem Dec 19, 2024
15bba7a
[FE] FIX: updateLocalStorageDisplayStyleToggle 생성 & 적용 #1649
jnkeniaem Dec 19, 2024
fb0c171
[FE] FIX: isDeviceDarkMode 생성 & 적용 #1649
jnkeniaem Dec 19, 2024
6d0b837
[FE] FEAT: 가독성을 위해 displayStyleToggle 을 toggleType 으로 변경 #1649
gykoh42 Dec 19, 2024
ad9486c
[FE] REFACTOR: 반복되는 로직 utils 파일과 custom hook 으로 분리 #1649
gykoh42 Dec 19, 2024
9038ebd
[FE] REFACTOR: 반복되는 로직 custom hook 에 추가 #1649
gykoh42 Dec 19, 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
3 changes: 3 additions & 0 deletions frontend/src/Cabinet/assets/images/moonIcon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions frontend/src/Cabinet/assets/images/sunIcon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const CoinUseLineChart = ({
if (totalCoinUseData === undefined) {
return null;
}

const formattedData = [
{
id: "issuedCoin",
Expand All @@ -39,7 +40,7 @@ const CoinUseLineChart = ({
(data) => data.id === coinToggleType
);

const yMin = Math.min(...filteredData[0].data.map((d) => d.y));
const yMin = 0;
const yMax = Math.max(...filteredData[0].data.map((d) => d.y));

// NOTE : y축 scale을 log로 표현하기 위해 Y scale을 설정
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { useEffect, useState } from "react";
import { useEffect } from "react";
import { useRecoilState } from "recoil";
import { displayStyleState } from "@/Cabinet/recoil/atoms";
import DisplayStyleCard from "@/Cabinet/components/Card/DisplayStyleCard/DisplayStyleCard";
import {
DisplayStyleToggleType,
Expand All @@ -7,80 +9,53 @@ import {

// 로컬스토리지의 display-style-toggle 값에 따라 DisplayStyleType 반환
export const getInitialDisplayStyle = (
savedDisplayStyleToggle: DisplayStyleToggleType,
displayStyleToggle: DisplayStyleToggleType,
darkModeQuery: MediaQueryList
) => {
// 라이트 / 다크 버튼
if (savedDisplayStyleToggle === DisplayStyleToggleType.LIGHT)
): DisplayStyleType => {
//라이트 / 다크 버튼
if (displayStyleToggle === DisplayStyleToggleType.LIGHT) {
return DisplayStyleType.LIGHT;
else if (savedDisplayStyleToggle === DisplayStyleToggleType.DARK)
return DisplayStyleType.DARK;
// 디바이스 버튼
if (darkModeQuery.matches) {
} else if (displayStyleToggle === DisplayStyleToggleType.DARK) {
return DisplayStyleType.DARK;
// 디바이스 버튼
} else {
return darkModeQuery.matches
? DisplayStyleType.DARK
: DisplayStyleType.LIGHT;
}
return DisplayStyleType.LIGHT;
};

const DisplayStyleCardContainer = () => {
const savedDisplayStyleToggle =
(localStorage.getItem("display-style-toggle") as DisplayStyleToggleType) ||
DisplayStyleToggleType.DEVICE;
var darkModeQuery = window.matchMedia("(prefers-color-scheme: dark)");
const initialDisplayStyle = getInitialDisplayStyle(
savedDisplayStyleToggle,
darkModeQuery
);
const [darkMode, setDarkMode] = useState<DisplayStyleType>(
initialDisplayStyle as DisplayStyleType
);
const [toggleType, setToggleType] = useState<DisplayStyleToggleType>(
savedDisplayStyleToggle
);

const setColorsAndLocalStorage = (toggleType: DisplayStyleToggleType) => {
setToggleType(toggleType);
localStorage.setItem("display-style-toggle", toggleType);
};
const darkModeQuery = window.matchMedia("(prefers-color-scheme: dark)");
const [toggleType, setToggleType] = useRecoilState(displayStyleState);

const handleDisplayStyleButtonClick = (displayStyleToggleType: string) => {
if (toggleType === displayStyleToggleType) return;
setToggleType(
displayStyleToggleType as React.SetStateAction<DisplayStyleToggleType>
);
setColorsAndLocalStorage(displayStyleToggleType as DisplayStyleToggleType);
const handleButtonClick = (key: DisplayStyleToggleType) => {
if (toggleType === key) return;
gykoh42 marked this conversation as resolved.
Show resolved Hide resolved
setToggleType(key);
localStorage.setItem("display-style-toggle", key);
};

useEffect(() => {
darkModeQuery.addEventListener("change", (event) =>
setDarkMode(
event.matches ? DisplayStyleType.DARK : DisplayStyleType.LIGHT
)
);
}, []);

useEffect(() => {
document.body.setAttribute("display-style", darkMode);
}, [darkMode]);

useEffect(() => {
if (toggleType === DisplayStyleToggleType.LIGHT) {
setDarkMode(DisplayStyleType.LIGHT);
} else if (toggleType === DisplayStyleToggleType.DARK) {
setDarkMode(DisplayStyleType.DARK);
} else {
setDarkMode(
darkModeQuery.matches ? DisplayStyleType.DARK : DisplayStyleType.LIGHT
);
}
const applyDisplayStyle = () => {
const newDarkMode = getInitialDisplayStyle(toggleType, darkModeQuery);
document.body.setAttribute("display-style", newDarkMode);
};

applyDisplayStyle();

const handleSystemThemeChange = () => {
if (toggleType === DisplayStyleToggleType.DEVICE) {
applyDisplayStyle();
}
};

darkModeQuery.addEventListener("change", handleSystemThemeChange);
return () => {
darkModeQuery.removeEventListener("change", handleSystemThemeChange);
};
}, [toggleType]);
gykoh42 marked this conversation as resolved.
Show resolved Hide resolved

return (
<DisplayStyleCard
displayStyleToggle={toggleType}
handleDisplayStyleButtonClick={handleDisplayStyleButtonClick}
/>
);
return <DisplayStyleCard handleButtonClick={handleButtonClick} />;
};

export default DisplayStyleCardContainer;
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
import React from "react";
import { useRecoilState } from "recoil";
import styled from "styled-components";
import { displayStyleState } from "@/Cabinet/recoil/atoms";
import Card from "@/Cabinet/components/Card/Card";
import { CardContentWrapper } from "@/Cabinet/components/Card/CardStyles";
import { ReactComponent as MonitorMobileIcon } from "@/Cabinet/assets/images/monitorMobile.svg";
import { ReactComponent as MoonIcon } from "@/Cabinet/assets/images/moon.svg";
import { ReactComponent as SunIcon } from "@/Cabinet/assets/images/sun.svg";
import { DisplayStyleToggleType } from "@/Cabinet/types/enum/displayStyle.type.enum";

interface DisplayStyleProps {
displayStyleToggle: DisplayStyleToggleType;
handleDisplayStyleButtonClick: (DisplayStyleToggleType: string) => void;
}

interface IToggleItemSeparated {
name: string;
key: string;
key: DisplayStyleToggleType;
icon: React.ComponentType<React.SVGProps<SVGSVGElement>>;
}

interface DisplayStyleCardProps {
handleButtonClick: (key: DisplayStyleToggleType) => void;
}

const toggleList: IToggleItemSeparated[] = [
{
name: "라이트",
Expand All @@ -35,42 +37,39 @@ const toggleList: IToggleItemSeparated[] = [
},
];

const DisplayStyleCard = ({
displayStyleToggle,
handleDisplayStyleButtonClick,
}: DisplayStyleProps) => {
const DisplayStyleCard: React.FC<DisplayStyleCardProps> = ({
handleButtonClick,
}) => {
const [displayStyleToggle] = useRecoilState(displayStyleState);

return (
<>
<DisplayStyleCardWrapper>
<Card
title={"화면 스타일"}
gridArea={"displayStyle"}
width={"350px"}
height={"183px"}
>
<>
<CardContentWrapper>
<ButtonsWrapperStyled>
{toggleList.map((item) => {
const DisplayStyleIcon = item.icon;
return (
<ButtonStyled
key={item.key}
id={`${item.key}`}
isClicked={displayStyleToggle === item.key}
onClick={() => handleDisplayStyleButtonClick(item.key)}
>
{DisplayStyleIcon && <DisplayStyleIcon />}
{item.name}
</ButtonStyled>
);
})}
</ButtonsWrapperStyled>
</CardContentWrapper>
</>
</Card>
</DisplayStyleCardWrapper>
</>
<DisplayStyleCardWrapper>
<Card
title={"화면 스타일"}
gridArea={"displayStyle"}
width={"350px"}
height={"183px"}
>
<CardContentWrapper>
<ButtonsWrapperStyled>
{toggleList.map((item) => {
const DisplayStyleIcon = item.icon;
return (
<ButtonStyled
key={item.key}
id={`${item.key}`}
isClicked={displayStyleToggle === item.key}
onClick={() => handleButtonClick(item.key)}
>
<DisplayStyleIcon />
{item.name}
</ButtonStyled>
);
})}
</ButtonsWrapperStyled>
</CardContentWrapper>
</Card>
</DisplayStyleCardWrapper>
);
};

Expand Down
Loading
Loading