From 8f5a573ebcf7613ac9224e120a4651d92ecb7212 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 4 Oct 2026 17:40:31 +0900 Subject: [PATCH] =?UTF-8?q?fix(M02):=20=EA=B0=80=EC=A0=B8=EC=98=AC=20?= =?UTF-8?q?=EA=B3=B3=20=E3=80=8C=EB=8B=A4=EB=A5=B8=20=EC=82=AC=EB=9E=8C?= =?UTF-8?q?=E3=80=8D=20=E2=80=94=20=EB=82=98=EB=8A=94=20=EB=BA=8C(?= =?UTF-8?q?=EA=B0=9C=EC=9D=B8=20=ED=83=AD)=20=C2=B7=20=EB=B9=88=20?= =?UTF-8?q?=EC=82=AC=EB=9E=8C=20=E3=80=8C=EB=B9=84=EC=96=B4=20=EC=9E=88?= =?UTF-8?q?=EC=9D=8C=E3=80=8D=20=C2=B7=20=EC=B2=98=EC=9D=8C=20=3D=20?= =?UTF-8?q?=EC=B2=AB=20=EB=B9=88=20=EC=95=84=EB=8B=8C=20=EC=82=AC=EB=9E=8C?= =?UTF-8?q?=20=C2=B7=20=EB=B9=88=20=EC=82=AC=EB=9E=8C=EC=9D=80=20=EB=B9=88?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 39-5 — 사람 목록 전부(39-6 E1~E4)에 맞춤. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt --- .../M02_MasterTemplete_ItemPick.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts b/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts index 54cc67a51..3ee87e241 100644 --- a/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts +++ b/M02_MasterTemplete/M02_MasterTemplete_ItemPick.ts @@ -20,7 +20,7 @@ import { type ListKind, } from "./M02_MasterTemplete_ItemList"; import { fetchCombos, type ComboSummary } from "./M02_MasterTemplete_Labor_Api"; -import { readableSources, type Source } from "./M02_MasterTemplete_Layer"; +import { ownOwner, readableSources, type Source } from "./M02_MasterTemplete_Layer"; import { leafName } from "./M02_MasterTemplete_TreePanel_Model"; import "./M02_MasterTemplete_TreePanel.css"; import "./M02_MasterTemplete_ItemPick.css"; @@ -29,6 +29,7 @@ const TEXT = { close: "닫기", person: "사람", noPeople: "다른 사람이 없음", + empty: "비어 있음", failed: "목록을 못 받음 — {value}", makeNew: "새로 만들기", makeCopy: "복사 생성", @@ -58,6 +59,8 @@ const PRACTICE_COLS: Col[] = [ ]; const why = (error: unknown): string => (error instanceof Error ? error.message : String(error)); +/** 층 폴더가 아직 없는 사람(서버 사람 목록 `비어있음` · 39-6) */ +const empty = (o: { owner: string }): boolean => !!(o as { 비어있음?: boolean }).비어있음; export interface PickerOptions { user: SessionUser | null; @@ -106,17 +109,24 @@ export function buildPicker(opt: PickerOptions): { root: HTMLElement } { let owner = tab.owner; let label = tab.label; if (tab.id === "people") { - owners ??= await fetchOwners("personal", opt.company); + // 나는 「개인」 탭 — 뺌 · 빈 사람은 「비어 있음」 · 처음 = 첫 빈 아닌 사람 + const me = ownOwner("personal", opt.user); + owners ??= (await fetchOwners("personal", opt.company)).filter((o) => o.owner !== me); if (mine !== seq) return; if (!owners.length) return list.message(TEXT.noPeople); if (!people.select.value) { people.setOptions( - owners.map((o) => ({ value: o.owner, text: o.name })), - owners[0].owner, + owners.map((o) => ({ + value: o.owner, + text: empty(o) ? `${o.name} · ${TEXT.empty}` : o.name, + })), + (owners.find((o) => !empty(o)) ?? owners[0]).owner, ); } owner = people.select.value; - label = `${tab.label} · ${owners.find((o) => o.owner === owner)?.name ?? owner}`; + const who = owners.find((o) => o.owner === owner); + label = `${tab.label} · ${who?.name ?? owner}`; + if (who && empty(who)) return list.show([], ITEM_COLS[opt.kind], () => {}); // 층 폴더 없음 } const rows = await loadItems(tab.layer, owner); if (mine !== seq) return;