wip(z01): 총칙 기본 감춤 잣대화 — 병합 전 임시 보관
This commit is contained in:
@@ -156,17 +156,33 @@ def _facets(kind: str) -> dict[str, dict[str, str]]:
|
||||
return {_key(i): {key: str(i.get(key) or "") for key in FILTER_KEYS} for i in items}
|
||||
|
||||
|
||||
def _role_names() -> dict[str, str]:
|
||||
"""줄 구실 이름 — `axis_policy.json`(데스크탑 서브 잣대) 한 곳에서."""
|
||||
def _policy() -> dict[str, Any]:
|
||||
"""줄 구실 잣대 — `axis_policy.json`(데스크탑 서브) 한 곳에서."""
|
||||
path = FOLDER / "axis_policy.json"
|
||||
if not path.is_file():
|
||||
return {}
|
||||
roles = _read(str(path), path.stat().st_mtime_ns).get("roles") or {}
|
||||
return {key: str(role.get("name_ko") or key) for key, role in roles.items()}
|
||||
return _read(str(path), path.stat().st_mtime_ns) if path.is_file() else {}
|
||||
|
||||
|
||||
def _role_names() -> dict[str, str]:
|
||||
"""거르기 상자에 뜰 이름. 목록에서는 「총칙」이 아니라 「공종 아님 · 규정·기준」으로 적는다."""
|
||||
roles = _policy().get("roles") or {}
|
||||
return {
|
||||
key: str(role.get("list_label") or role.get("name_ko") or key)
|
||||
for key, role in roles.items()
|
||||
}
|
||||
|
||||
|
||||
def _default_of(key: str) -> str:
|
||||
"""이 가름의 기본값 — **잣대가 정한다**(화면도 서버도 스스로 가르지 않음).
|
||||
|
||||
총칙 줄은 표가 붙어 목록에 섞여 뜨지만 공종이 아니라 규정·기준이다. 기본은 안 보이되
|
||||
상자를 고르면 보인다 — ⚠ **지운 것이 아니라 감춘 것**이다(2026-09-17 브레인).
|
||||
"""
|
||||
wanted = _policy().get("list_default") or {}
|
||||
return str(wanted.get("value") or ALL) if wanted.get("filter") == key else ALL
|
||||
|
||||
|
||||
def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
||||
"""거르기 상자 — 값이 둘 이상 갈리는 가름만 · 기본은 「전부」(안 거름)."""
|
||||
"""거르기 상자 — 값이 둘 이상 갈리는 가름만. 기본값은 **잣대**가 정한다(`list_default`)."""
|
||||
facets = _facets(kind)
|
||||
labels = {"division": ("부문", {}), "axis_role": ("줄 구실", _role_names())}
|
||||
out = []
|
||||
@@ -179,13 +195,14 @@ def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
||||
if len(values) < 2:
|
||||
continue
|
||||
label, names = labels[key]
|
||||
default = _default_of(key)
|
||||
out.append(
|
||||
{
|
||||
"key": key,
|
||||
"label": label,
|
||||
"options": [{"value": ALL, "label": "전부", "rows": len(rows)}]
|
||||
+ [{"value": v, "label": names.get(v, v), "rows": counts[v]} for v in values],
|
||||
"default": ALL,
|
||||
"default": default if default in values else ALL,
|
||||
}
|
||||
)
|
||||
return out
|
||||
@@ -194,9 +211,15 @@ def filters(kind: str, rows: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
||||
def apply_filters(
|
||||
kind: str, rows: list[dict[str, Any]], picked: dict[str, str]
|
||||
) -> list[dict[str, Any]]:
|
||||
"""고른 값으로 거른다. **안 고른 가름은 잣대의 기본값**을 쓴다.
|
||||
|
||||
⚠ 기본값을 서버가 매기는 까닭 — 화면만 기본값을 알면 「상자엔 공종이라 떠 있는데 목록엔
|
||||
총칙이 섞여 있는」 어긋남이 난다. 「전부」는 빈 값을 **적어 보내면** 된다.
|
||||
"""
|
||||
facets = _facets(kind)
|
||||
for key, value in picked.items():
|
||||
if key in FILTER_KEYS and value != ALL:
|
||||
for key in FILTER_KEYS:
|
||||
value = picked[key] if key in picked else _default_of(key)
|
||||
if value != ALL:
|
||||
rows = [r for r in rows if facets.get(r["@id"], {}).get(key) == value]
|
||||
return rows
|
||||
|
||||
|
||||
Reference in New Issue
Block a user