fix(M02): 가져올 곳 「다른 사람」 — 나는 뺌(개인 탭) · 빈 사람 「비어 있음」 · 처음 = 첫 빈 아닌 사람 · 빈 사람은 빈 목록

39-5 — 사람 목록 전부(39-6 E1~E4)에 맞춤.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016PSXsvyDxjNmufteN5bqmt
This commit is contained in:
2026-10-04 17:40:31 +09:00
co-authored by Claude Opus 5.5
parent 789c78db2d
commit 8f5a573ebc
@@ -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<ComboSummary>[] = [
];
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;