Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
37b6e1b
Release 2.0.0
klmhyeonwoo Dec 30, 2025
9efc640
fix: 모바일 메인 화면에 정상적으로 라우팅 접속이 되지 않는 현상
klmhyeonwoo Dec 30, 2025
3e6de5e
Merge pull request #773 from depromeet/bugfix/mobile-router
klmhyeonwoo Dec 30, 2025
371a902
fix: commonRoutes router fix
klmhyeonwoo Dec 30, 2025
3a8faf1
Merge pull request #775 from depromeet/bugfix/mobile-router
klmhyeonwoo Dec 30, 2025
a9ebe67
fix: native router
klmhyeonwoo Dec 30, 2025
2f91b29
fix: login common router
klmhyeonwoo Dec 30, 2025
d426760
fix: 네이티브 코드 원복
klmhyeonwoo Dec 30, 2025
c4dab93
Merge pull request #776 from depromeet/bugfix/mobile-router
klmhyeonwoo Dec 30, 2025
de4fd5c
fix: 적응형 라우터 수정
klmhyeonwoo Dec 30, 2025
40bfbc0
fix: 적응형 라우터 수정
klmhyeonwoo Dec 30, 2025
c87dd86
Merge pull request #777 from depromeet/bugfix/mobile-router
klmhyeonwoo Dec 30, 2025
410f197
fix: 스페이스 수정 > 이미지 변경이 되었음에도 버튼이 활성화되지 않는 현상 수정
klmhyeonwoo Jan 1, 2026
492b4af
feat: 스페이스 생성 > 신규 생성인 경우, 선택(기본 및 커스텀) 탭을 노출시키지 않도록 수정
klmhyeonwoo Jan 1, 2026
fab8d93
feat: ImageUploader의 onChange props 타입을 옵셔널하게 수정
klmhyeonwoo Jan 1, 2026
d00ccef
feat: ImageUploader의 onChange props 타입을 옵셔널하게 수정
klmhyeonwoo Jan 1, 2026
5396ff4
Merge pull request #779 from depromeet/bugfix/778
klmhyeonwoo Jan 1, 2026
84d7175
fix: 팀원삭제 api 변경사항 반영
supersett Jan 1, 2026
1dc9d66
Merge pull request #780 from depromeet/fix/team-delete-feature
supersett Jan 1, 2026
dac63e1
Merge pull request #787 from depromeet/develop
prgmr99 Jan 19, 2026
dc0c631
Merge pull request #790 from depromeet/develop
prgmr99 Jan 22, 2026
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
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ export function TemplateList() {

// * @see AddSpacePage.tsx - 첫 스페이스와 회고 생성시에 템플릿 선택 화면으로 이동할 때 URL 파라미터로 타입을 넘겨줘요
const type = searchParams.get("template_type") || "";
const isInitialCreateRetrospect = type === "new_space";

const DEFAULT_TAB = ["기본", "커스텀"] as const;

const { tabs, curTab, selectTab } = useTabs(DEFAULT_TAB);
Expand All @@ -50,7 +52,8 @@ export function TemplateList() {
return (
<>
{/* ---------- 템플릿 탭 UI ---------- */}
<TemplateListTab tabs={tabs} curTab={curTab} selectTab={selectTab} TabComp={TemplateListTabButton} />
{/* 스페이스 신규 생성일 경우에는 선택(기본 및 커스텀) 탭을 노출시키지 않는다. */}
{!isInitialCreateRetrospect && <TemplateListTab tabs={tabs} curTab={curTab} selectTab={selectTab} TabComp={TemplateListTabButton} />}

{/* ---------- 템플릿 카드 리스트 UI ---------- */}
<div
Expand Down
14 changes: 12 additions & 2 deletions apps/web/src/app/desktop/space/modify/ModifySpacePage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import { Spacing } from "@/component/common/Spacing";
import useModifySpace, { MODIFY_SPACE_ID_QUERY_KEY } from "@/hooks/app/space/useModifySpace";
import useDesktopBasicModal from "@/hooks/useDesktopBasicModal";
import { css } from "@emotion/react";
import { useState } from "react";
import { useSearchParams } from "react-router-dom";

// 데스크톱 환경에서는 해당 수정 페이지가 모달 안에 이식되어요
export default function ModifySpacePage() {
const [searchParams] = useSearchParams();
const [isChangedImage, setIsChangedImage] = useState(false);
const spaceId = searchParams.get(MODIFY_SPACE_ID_QUERY_KEY) as string;
const {
data,
Expand All @@ -28,7 +30,7 @@ export default function ModifySpacePage() {

const initialName = data?.name || "";
const initialIntroduction = data?.introduction || "";
const isUnchanged = name === initialName && introduction === initialIntroduction;
const isUnchanged = !isChangedImage && name === initialName && introduction === initialIntroduction;

if (isLoading || isPending) return <LoadingModal />;

Expand All @@ -41,7 +43,15 @@ export default function ModifySpacePage() {
height: 100%;
`}
>
<ImageUploader defaultImg={data?.bannerUrl} setImgFile={setImgFile} />
<ImageUploader
defaultImg={data?.bannerUrl}
setImgFile={setImgFile}
onChange={(file) => {
if (file && file instanceof File) {
setIsChangedImage(true);
}
}}
/>
<Spacing size={4} />
<InputLabelContainer id={"name"}>
<Label>프로젝트 명</Label>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ import { getDeviceType } from "@/utils/deviceUtils";
type ImageUploaderProps = {
defaultImg?: string;
setImgFile: React.Dispatch<React.SetStateAction<File | null>>;
onChange?: (file: File | undefined) => void;
};

export const ImageUploader = ({ defaultImg, setImgFile }: ImageUploaderProps) => {
export const ImageUploader = ({ defaultImg, setImgFile, onChange }: ImageUploaderProps) => {
const [imgUrl, setImgUrl] = useState(defaultImg || DefaultSpaceImgUrl);
const { isDesktop } = getDeviceType();

Expand All @@ -31,6 +32,7 @@ export const ImageUploader = ({ defaultImg, setImgFile }: ImageUploaderProps) =>
setImgFile(file);
};
}
onChange?.(file);
};

const handleImageClick = () => {
Expand Down
5 changes: 4 additions & 1 deletion apps/web/src/hooks/api/space/members/useApiKickMembers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const useApiKickMember = (spaceId: string) => {
const queryClient = useQueryClient();

const apiKickMember = async ({ spaceId, memberId }: { spaceId: string; memberId: string }) => {
const response = await api.patch(`/api/space/kick?spaceId=${spaceId}&memberId=${memberId}`);
const response = await api.patch(`/api/space/kick`, { spaceId, memberId });
return response;
};

Expand All @@ -18,6 +18,9 @@ export const useApiKickMember = (spaceId: string) => {
await queryClient.invalidateQueries({
queryKey: ["getMembers", spaceId],
});
await queryClient.invalidateQueries({
queryKey: ["getSpaceInfo", spaceId],
});
toast.success("해당 팀원을 추방시켰습니다.");
},
onError: (error) => {
Expand Down
18 changes: 8 additions & 10 deletions apps/web/src/router/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ const deviceSpecificRoutes: RouteChildren[] = [
auth: true,
deviceType: "desktop",
},

// 로그인 관련
{
path: "login",
Expand All @@ -147,7 +146,6 @@ const deviceSpecificRoutes: RouteChildren[] = [
auth: false,
deviceType: "desktop",
},

// 회고 작성 - 모바일
{
path: "write",
Expand Down Expand Up @@ -390,17 +388,17 @@ const router = ({ layoutType }: { layoutType: "mobile" | "desktop" }) => {
if (layoutType === "mobile") {
return createBrowserRouter([
{
path: "/*",
element: <Navigate to="/m" replace />,
path: "/desktop/*",
element: <Navigate to="/" replace />,
},
{
path: "/m",
path: "/",
element: <MobileGlobalLayout />,
errorElement: <Error />,
children: routerChildren,
},
{
path: "/",
path: "*",
element: <MobileGlobalLayout />,
errorElement: <Error />,
children: commonRoutes.map((route) => ({
Expand All @@ -412,17 +410,17 @@ const router = ({ layoutType }: { layoutType: "mobile" | "desktop" }) => {
} else {
return createBrowserRouter([
{
path: "/m/*",
element: <Navigate to="/" replace />,
path: "/*",
element: <Navigate to="/desktop" replace />,
},
{
path: "/",
path: "/desktop",
element: <DesktopGlobalLayout />,
errorElement: <Error />,
children: routerChildren,
},
{
path: "/",
path: "*",
element: <DesktopGlobalLayout />,
errorElement: <Error />,
children: commonRoutes.map((route) => ({
Expand Down
2 changes: 1 addition & 1 deletion packages/shared/constants/paths/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { getDeviceType } from "@/utils/deviceUtils";

export const createPaths = () => {
const { deviceType } = getDeviceType();
const prefix = deviceType === "mobile" ? "/m" : "";
const prefix = deviceType === "mobile" ? "" : "/desktop";

return {
login: () => `${prefix}/login` as const,
Expand Down