Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
572bc08
chore: μ•ˆμ“°λŠ” 파일 μ‚­μ œ
lgrin-byte Nov 29, 2024
acf5ffc
feat: λ Œλ”λ§ μš”μ†Œ μˆ˜μ •
lgrin-byte Nov 29, 2024
3554645
feat: ν…Œλ§ˆ λ°°κ²½ 이미지 μ»΄ν¬λ„ŒνŠΈ 생성
lgrin-byte Dec 1, 2024
0031402
feat: ν…Œλ§ˆ 이미지 λ‹€μ΄μ–Όλ‘œκ·Έ μΆ”κ°€ 및 ꡬ쑰 λ³€κ²½
lgrin-byte Dec 1, 2024
211ec35
feat: 이미지 미리보기 λͺ¨λ‹¬ 생성
lgrin-byte Dec 1, 2024
1fe8eb1
feat: μˆ˜μ •λœ 타이틀 μ„Ήμ…˜ μž‘μ—…
lgrin-byte Dec 1, 2024
e8a154d
fix: drawer μœ„μΉ˜ μˆ˜μ •
lgrin-byte Dec 1, 2024
85be44e
feat: 툴팁 μΆ”κ°€
lgrin-byte Dec 15, 2024
76eb72e
feat: μƒˆλ‘œμš΄ κΈ°λŠ₯ μ•ˆλ‚΄ λͺ¨λ‹¬ μΆ”κ°€
lgrin-byte Dec 15, 2024
697b377
feat: Timer Image Dialog μž‘μ—…
anyl92 Dec 15, 2024
4b664f0
refactor: λΌμš°νŒ… κ°œμ„ 
lgrin-byte Dec 25, 2024
a36dd25
fix: ν΄λΌμ΄μ–ΈνŠΈ λΉŒλ“œ μ—λŸ¬ μˆ˜μ •
lgrin-byte Dec 25, 2024
96768bf
feat: λ¦¬ν”„λ ˆμ‰¬ 토큰 κ°±μ‹  및 둜그인 정보 λ‘œμ»¬μŠ€ν† λ¦¬μ§€ -> μ„Έμ…˜μŠ€ν† λ¦¬μ§€ 이동
lgrin-byte Dec 25, 2024
88b977f
feat: 데이터 응닡값 μˆ˜μ •
lgrin-byte Dec 27, 2024
722eb03
feat: λ¦¬ν”„λ ˆμ‹œ ν† ν°λ§Œ μΏ ν‚€ λ‚˜λ¨Έμ§€ 정보 둜컬 μŠ€ν† λ¦¬μ§€μ— μ €μž₯
lgrin-byte Dec 29, 2024
dbf6319
Merge pull request #87 from Next-Room/feat/μ•ˆμ“°λŠ”-파일-μ‚­μ œ
lgrin-byte Dec 29, 2024
67b6e2d
Merge branch 'develop' into feat/add-refresh-token
lgrin-byte Dec 29, 2024
addb77e
Merge pull request #90 from Next-Room/feat/add-refresh-token
lgrin-byte Dec 29, 2024
09e73cb
Merge pull request #89 from Next-Room/feat/theme-image-preview-rinee
lgrin-byte Dec 29, 2024
f091888
fix: μ‚¬μš©ν•˜μ§€ μ•Šμ€ import 제거
lgrin-byte Dec 29, 2024
7c61fc8
Merge branch 'feat/theme-image-preview' into feat/refactor-router
lgrin-byte Dec 29, 2024
9322c60
Merge pull request #91 from Next-Room/feat/refactor-router
lgrin-byte Dec 29, 2024
da303f8
Merge branch 'develop' into feat/theme-image-preview
lgrin-byte Dec 29, 2024
79519d9
feat: 타이머 이미지 등둝 API
anyl92 Dec 29, 2024
bfca027
feat: λΌμš°νŒ… 둜직 λ‘œκ·ΈμΈλΆ€λΆ„ μΆ”κ°€ κ°œμ„ 
lgrin-byte Nov 29, 2024
c8c79c0
feat: 타이머 λ°°κ²½ μ½”λ“œ 정리 & 타이머 미리보기
anyl92 Dec 29, 2024
862ea79
Merge branch 'feat/theme-image-preview' into feat/theme-image-preview…
lgrin-byte Dec 29, 2024
ef00b85
feat: 타이머 이미지 μ‚­μ œ API
anyl92 Dec 29, 2024
638d81c
fix: 이미지 μ²¨λΆ€μ‹œ μž¬λ Œλ”λ§λ˜λŠ” 이슈 μˆ˜μ •
lgrin-byte Dec 29, 2024
8937a2a
style: 이미지 dimmed μΆ”κ°€, cover μ†μ„±μœΌλ‘œ μ„Έλ‘œκΈ°μ€€μœΌλ‘œ 맞좀 λ“± css μˆ˜μ •
anyl92 Dec 29, 2024
5e32212
fix: Hydration 뢈일치 μˆ˜μ •
lgrin-byte Jan 6, 2025
bfee9a9
feat: 툴팁 μΆ”κ°€
lgrin-byte Jan 6, 2025
e8a2d9e
fix: css μˆ˜μ •
anyl92 Jan 23, 2025
04fb87e
fix: 타이머 이미지 λ³€κ²½ μ‹œ λ¦¬λ Œλ”λ§λ˜λ„λ‘ μ—…λ°μ΄νŠΈ
anyl92 Jan 23, 2025
11de019
fix: μΉ΄ν…Œκ³ λ¦¬ 데이터 μΊμ‹±μœΌλ‘œ 타이머배경url μ—…λ°μ΄νŠΈ λ˜μ§€ μ•Šλ˜ 문제 ν•΄κ²°
anyl92 Jan 24, 2025
858e1b8
feat: 이미지 μ••μΆ• ν•¨μˆ˜μ— μ˜΅μ…˜κ°’ 인자둜 λ°›μ•„ μž¬μ‚¬μš©ν•  수 있게 λ³€κ²½
anyl92 Jan 24, 2025
97ba5d4
Merge pull request #93 from Next-Room/feat/theme-image-preview-logic
anyl92 Jan 24, 2025
d880058
feat: λ‘œκ·Έμ•„μ›ƒ λ²„νŠΌ 및 연동, 둜고 λ””μžμΈ css 미적용 μˆ˜μ •
anyl92 Jan 24, 2025
2bd83fe
feat: λ‘œκ·Έμ•„μ›ƒ λ²„νŠΌ λ…ΈμΆœ μ•„μ΄μ½˜ ν˜Έλ²„ μ‹œ λΉˆκ³΅κ°„ μ»€μ„œ κΉœλΉ‘μž„ μˆ˜μ •, 타이머 이미지 μ—…λ‘œλ“œ μ‹œ λ‘œλ”© μ•„μ΄μ½˜ μΆ”κ°€
anyl92 Jan 24, 2025
b101327
Merge pull request #88 from Next-Room/feat/theme-image-preview
anyl92 Jan 24, 2025
c7d7510
feat: μ—‘μ„ΈμŠ€ 토큰 없을 μ‹œ λ‘œκ·Έμ•„μ›ƒ μΆ”κ°€
lgrin-byte Jan 25, 2025
b4f78a1
Merge pull request #94 from Next-Room/feat/add-logout
lgrin-byte Jan 25, 2025
0055a3a
fix: λͺ¨λ‹¬λ³„ λ ˆμ΄μ•„μ›ƒ μ μš©μ„ μœ„ν•œ css, classname μˆ˜μ •, μƒˆ κΈ°λŠ₯ μžμ„Ένžˆλ³΄κΈ° μ—°κ²° 링크 μΆ”κ°€
anyl92 Jan 25, 2025
5b581ec
fix: 둜고 ν˜Έλ²„ μ‹œμ—λ§Œ 보더 λ…ΈμΆœλ˜λ„λ‘ μˆ˜μ •, 타이머 이미지 κ½‰μ°¨κ²Œ μˆ˜μ •
anyl92 Jan 25, 2025
8b9fe70
Merge pull request #95 from Next-Room/feat/timer-image-qa
anyl92 Jan 25, 2025
fe01ac5
fix: 401 μ—λŸ¬μ‹œ λ°”λ‘œ λ‘œκ·Έμ•„μ›ƒ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” 이슈 μˆ˜μ •
lgrin-byte Feb 4, 2025
3c4509b
Merge pull request #96 from Next-Room/fix/change-routing-logout
lgrin-byte Feb 5, 2025
076e90c
fix: νšŒμ›κ°€μž… 401μ—λŸ¬ μ˜ˆμ™Έμ²˜λ¦¬
lgrin-byte Feb 5, 2025
a9f81dc
Merge pull request #97 from Next-Room/fix/change-router
lgrin-byte Feb 5, 2025
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
6 changes: 0 additions & 6 deletions app/admin-old/page.tsx

This file was deleted.

20 changes: 14 additions & 6 deletions app/admin/(components)/CreateTheme/Container.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { FormEvent } from "react";

import "../../(style)/createTheme.modules.sass";
import { useRouter } from "next/navigation";

import { usePostTheme } from "@/mutations/postTheme";
import { useCreateThemeValue } from "@/components/atoms/createTheme.atom";
import { useSelectedThemeWrite } from "@/components/atoms/selectedTheme.atom";
import { setSelectedThemeId } from "@/utils/storageUtil";

import CreateThemeTitle from "./CreateThemeTitle";
import CreateThemeBody from "./CreateThemeBody";
Expand All @@ -13,7 +15,7 @@ export default function CreateTheme() {
const createTheme = useCreateThemeValue();
const setSelectedTheme = useSelectedThemeWrite();
const { mutateAsync: postTheme } = usePostTheme();

const router = useRouter();
const handleKeyDownSubmit = async (e: FormEvent) => {
e.preventDefault();
const isDisabled =
Expand All @@ -24,10 +26,16 @@ export default function CreateTheme() {
if (isDisabled) {
return;
}
const response = await postTheme(createTheme);
const { id } = response.data.data;
if (id) {
setSelectedTheme(createTheme);
try {
const response = await postTheme(createTheme);
const { id } = response.data.data;
router.push(`/admin?themeId=${encodeURIComponent(id)}`);
if (id) {
setSelectedTheme(createTheme);
setSelectedThemeId(id);
}
} catch (err) {
console.error("Login failed:", err);
}
};

Expand Down
72 changes: 50 additions & 22 deletions app/admin/(components)/Sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
import React from "react";
import React, { useEffect, useState } from "react";
import Image from "next/image";
import classNames from "classnames";
import { useRouter, useSearchParams } from "next/navigation";
import { useQueryClient } from "@tanstack/react-query";

import HintDialog from "@/components/common/Hint-Dialog-new/Dialog";
import HintDialog from "@/components/common/Dialog-new/Hint-Dialog-new/Dialog";
import {
logoProps,
plusDisableProps,
plusProps,
subscribeLinkURL,
} from "@/admin/(consts)/sidebar";
import {
getLoginInfo,
getSelectedThemeId,
getStatus,
removeAccessToken,
removeThemeId,
} from "@/utils/localStorage";
} from "@/utils/storageUtil";
import { useSelectedThemeReset } from "@/components/atoms/selectedTheme.atom";
import { useIsLoggedInWrite } from "@/components/atoms/account.atom";
import { useDrawerState } from "@/components/atoms/drawer.atom";
import useModal from "@/hooks/useModal";
import { QUERY_KEY } from "@/queries/getThemeList";

interface Theme {
id: number;
Expand All @@ -29,8 +31,6 @@ interface Theme {
}

interface Props {
adminCode: string;
shopName: string;
categories: Theme[];
selectedTheme: Theme;
handleClickSelected: (theme: Theme) => void;
Expand All @@ -39,32 +39,50 @@ interface Props {
export default function Sidebar(props: Props) {
const router = useRouter();
const resetSelectedTheme = useSelectedThemeReset();
// const setIsLoggedIn = useIsLoggedInWrite();
const queryClient = useQueryClient();

const [drawer, setDrawer] = useDrawerState();
const { open } = useModal();

const status = getStatus();
const searchParams = useSearchParams();
const selectedThemeId = getSelectedThemeId();
const params = new URLSearchParams(searchParams.toString()).toString();
const {
adminCode = "",
shopName = "",
categories,
handleClickSelected,
} = props;
const { categories, handleClickSelected } = props;
const [loginInfo, setLoginInfo] = useState({
adminCode: "",
shopName: "",
});

useEffect(() => {
const { adminCode, shopName } = getLoginInfo(); // getLoginInfo둜 κ°’ κ°€μ Έμ˜€κΈ°
setLoginInfo({ adminCode, shopName }); // μƒνƒœ μ—…λ°μ΄νŠΈ
}, []);

// const handleLogout = () => {
// removeAccessToken();
// setIsLoggedIn(false);
// };
const handleLogout = () => {
removeAccessToken();
resetSelectedTheme();
setLoginInfo({
adminCode: "",
shopName: "",
});
// router.push("/login");
window.location.href = "/login";
};
useEffect(() => {
if (selectedThemeId && selectedThemeId !== "0")
router.push(
`/admin?themeId=${encodeURIComponent(selectedThemeId)}
`
);
}, [selectedThemeId, params]);

const navigateToNewTheme = () => {
resetSelectedTheme();
router.push("/admin");
setDrawer({ ...drawer, isOpen: false });
};
const handleSelectTheme = (theme: Theme) => {
const handleSelectTheme = async (theme: Theme) => {
if (drawer.isOpen && !drawer.isSameHint) {
open(HintDialog, {
type: "put",
Expand All @@ -75,6 +93,7 @@ export default function Sidebar(props: Props) {
});
} else {
setDrawer({ ...drawer, isOpen: false });
await queryClient.invalidateQueries(QUERY_KEY);
handleClickSelected(theme);
}
};
Expand All @@ -93,9 +112,18 @@ export default function Sidebar(props: Props) {
<div className="sidebar">
<div className="sidebar__top">
<div className="sidebar__shop-info">
<Image {...logoProps} className="sidebar__shop-logo" />
<div className="sidebar__shop-info-img-box">
<Image {...logoProps} className="sidebar__shop-logo" />
<div />
<button
className="sidebar__shop-info-logout-btn"
onClick={handleLogout}
>
λ‘œκ·Έμ•„μ›ƒ
</button>
</div>
<span className="sidebar__shop-name">
{shopName?.replaceAll(`"`, "")}
{loginInfo.shopName?.replaceAll(`"`, "")}
</span>
</div>
<div className="sidebar__theme-title">우리 지점 ν…Œλ§ˆ</div>
Expand All @@ -111,7 +139,7 @@ export default function Sidebar(props: Props) {
<button
type="button"
className={classNames("sidebar__theme-button", {
selected: selectedThemeId === theme.id?.toString() && params,
selected: selectedThemeId === theme.id.toString(),
})}
onClick={() => handleSelectTheme(theme)}
>
Expand Down Expand Up @@ -159,7 +187,7 @@ export default function Sidebar(props: Props) {
<div className="sidebar__bottom">
<p className="sidebar__admin-code-title">κ΄€λ¦¬μž μ½”λ“œ</p>
<p className="sidebar__admin-code-value">
{adminCode?.replaceAll(`"`, "")}
{loginInfo.adminCode?.replaceAll(`"`, "")}
</p>
</div>
</div>
Expand Down
32 changes: 25 additions & 7 deletions app/admin/(components)/ThemeDrawer/helpers/imageHelpers.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,29 @@
import imageCompression from "browser-image-compression";

export const compressImage = async (file: File) => {
const options = {
maxSizeMB: 5,
maxWidthOrHeight: 1920,
useWebWorker: true,
};
export interface FileOptionsType {
maxSizeMB: number;
maxWidthOrHeight: number;
useWebWorker: boolean;
}
export const getCompressImage = async (
file: File,
options: FileOptionsType
) => {
const compressedFile = await compressImage(file, options);
try {
if (compressedFile.type !== "image/png") {
const pngFile = await convertToPng(compressedFile);
return pngFile;
} else {
return compressedFile;
}
} catch (error) {
console.error("Image compression failed", error);
return file;
}
};

const compressImage = async (file: File, options: FileOptionsType) => {
try {
const compressedFile = await imageCompression(file, options);
return compressedFile; // compressedFile λ°˜ν™˜
Expand All @@ -14,7 +32,7 @@ export const compressImage = async (file: File) => {
}
};

export const convertToPng = async (file: File): Promise<File> =>
const convertToPng = async (file: File): Promise<File> =>
new Promise<File>((resolve, reject) => {
const img = new Image();
const reader = new FileReader();
Expand Down
2 changes: 1 addition & 1 deletion app/admin/(components)/ThemeDrawer/hooks/useEditHint.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useState, useEffect, FormEvent, useRef } from "react";

import HintDialog from "@/components/common/Hint-Dialog-new/Dialog";
import HintDialog from "@/components/common/Dialog-new/Hint-Dialog-new/Dialog";
import {
InitialSelectedHint,
SelectedHintType,
Expand Down
23 changes: 8 additions & 15 deletions app/admin/(components)/ThemeDrawer/hooks/useImages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import {
import { useCreateHint } from "@/components/atoms/createHint.atom";
import { useSelectedHint } from "@/components/atoms/selectedHint.atom";
import { useToastWrite } from "@/components/atoms/toast.atom";
import { getStatus } from "@/utils/localStorage";
import { getStatus } from "@/utils/storageUtil";
import { subscribeLinkURL } from "@/admin/(consts)/sidebar";

import { compressImage, convertToPng } from "../helpers/imageHelpers";
import { getCompressImage } from "../helpers/imageHelpers";

const useImages = ({
imageType,
Expand Down Expand Up @@ -79,19 +79,12 @@ const useImages = ({
const files: File[] = [];
const file = e.target.files[0];
if (file.size > 5 * 1024 * 1024) {
try {
const compressedFile = await compressImage(file);

if (compressedFile.type !== "image/png") {
const pngFile = await convertToPng(compressedFile);
files.push(pngFile);
} else {
files.push(compressedFile);
}
} catch (error) {
console.error("Image compression failed", error);
files.push(file);
}
const options = {
maxSizeMB: 5,
maxWidthOrHeight: 1920,
useWebWorker: true,
};
files.push(await getCompressImage(file, options));
} else {
files.push(file);
}
Expand Down
6 changes: 3 additions & 3 deletions app/admin/(components)/ThemeInfo/Container.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import classNames from "classnames";
import "../../(style)/themeInfo.modules.sass";

import useModal from "@/hooks/useModal";
import Dialog from "@/components/common/Dialog-new/Dialog";
import Dialog from "@/components/common/Dialog-new/Theme-Dialog/Dialog";
import { useDrawerState } from "@/components/atoms/drawer.atom";

import ThemeDrawer from "../ThemeDrawer/Container";

import ThemeInfoTitle from "./ThemeInfoTitle";
import ThemeInfoBody from "./ThemeInfoBody";
import ThemeInfoHint from "./ThemeInfoHint";
import ThemeImage from "./ThemeTimerImage";

export default function ThemeInfo() {
const { open } = useModal();
Expand Down Expand Up @@ -46,7 +46,7 @@ export default function ThemeInfo() {
})}
>
<ThemeInfoTitle handleOpenModal={handleOpenModal} />
<ThemeInfoBody handleOpenModal={handleOpenModal} />
<ThemeImage />
<ThemeInfoHint handleHintCreate={handleHintCreate} />
{drawer.isOpen && (
<ThemeDrawer
Expand Down
40 changes: 0 additions & 40 deletions app/admin/(components)/ThemeInfo/ThemeInfoBody.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion app/admin/(components)/ThemeInfo/ThemeInfoHint.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import classNames from "classnames";

import { useGetHintList } from "@/queries/getHintList";
import { useSelectedThemeValue } from "@/components/atoms/selectedTheme.atom";
import HintDialog from "@/components/common/Hint-Dialog-new/Dialog";
import HintDialog from "@/components/common/Dialog-new/Hint-Dialog-new/Dialog";
import {
SelectedHintType,
useSelectedHint,
Expand Down
Loading
Loading