+ {locker.lockerNumber}
+
+ );
+
+ if (isViewOnly) {
+ return (
+
+ {number}
+
+ );
+ }
+
return (
onSelect(locker.lockerNumber)}
type="button"
>
-
- {locker.lockerNumber}
-
+ {number}
);
}
-export default LockersLockerCell;
+export default LockersCell;
diff --git a/src/features/lockers/components/LockersEmptyState.tsx b/src/features/lockers/components/LockersEmptyState.tsx
new file mode 100644
index 0000000..ce69790
--- /dev/null
+++ b/src/features/lockers/components/LockersEmptyState.tsx
@@ -0,0 +1,30 @@
+import { Typography } from "@wanteddev/wds";
+
+import emptyEventsIllustration from "@/assets/icons/common/empty-events.svg";
+
+interface LockersEmptyStateProps {
+ title: string;
+}
+
+// Figma: 사물함 배정 상태 empty > Empty State (nodeId 3147:148336) — 행사 목록 Empty State와 같은
+// 그림에 타이틀만 있다(설명·버튼 없음). WDS FallbackView를 쓰지 않는 이유는 행사 목록과 같다.
+function LockersEmptyState({ title }: LockersEmptyStateProps) {
+ return (
+
+ {/* Figma 그림 자리 81px(size-20.25) */}
+
+
+
+
+ {title}
+
+
+ );
+}
+
+export default LockersEmptyState;
diff --git a/src/features/lockers/components/LockersLockerGrid.tsx b/src/features/lockers/components/LockersGrid.tsx
similarity index 81%
rename from src/features/lockers/components/LockersLockerGrid.tsx
rename to src/features/lockers/components/LockersGrid.tsx
index 945379f..8d6476a 100644
--- a/src/features/lockers/components/LockersLockerGrid.tsx
+++ b/src/features/lockers/components/LockersGrid.tsx
@@ -1,21 +1,22 @@
-import LockersLockerCell from "@/features/lockers/components/LockersLockerCell";
+import LockersCell from "@/features/lockers/components/LockersCell";
import type { LockersSectionLocker } from "@/features/lockers/constants/lockersSectionDetails";
-interface LockersLockerGridProps {
+interface LockersGridProps {
rows: (number | null)[][];
lockers: ReadonlyMap
;
selectedLockerNumber: number | null;
- onSelect: (lockerNumber: number) => void;
+ /** 없으면 보기 전용 — 칸을 누를 수 없다(내 사물함 화면) */
+ onSelect?: (lockerNumber: number) => void;
}
// Figma: Locker Grid (nodeId 2159:110832 외)
// layout에는 있는데 lockers에 없는 번호(서버 데이터가 어긋난 경우)는 빈 자리로 둔다.
-function LockersLockerGrid({
+function LockersGrid({
rows,
lockers,
selectedLockerNumber,
onSelect,
-}: LockersLockerGridProps) {
+}: LockersGridProps) {
const columnCount = Math.max(...rows.map((row) => row.length));
return (
@@ -39,7 +40,7 @@ function LockersLockerGrid({
}
return (
- ;
selectedLockerNumber: number | null;
- onSelect: (lockerNumber: number) => void;
+ /** 없으면 보기 전용 — 칸을 누를 수 없다(내 사물함 화면) */
+ onSelect?: (lockerNumber: number) => void;
}
type LockersLayoutBlockContext = Omit;
@@ -102,7 +103,7 @@ function LockersLayoutBlockView({
);
case "lockerGroup": {
const grid = (
-
+ }
+ label="내 사물함"
+ />
+
+ );
+ }
+
return (