Skip to content

사이트: 제품 화면에 Document·Canvas·Tree·Board를 채우고 모든 데모가 위젯 바인딩을 쓴다 #454

Description

@developer-1px

배경

제품 화면은 Toolbar / Listbox / Grid만 있고, 바인딩이 OrderEditor / SheetEditor에 묶여 있어 다른 데모가 그대로 쓰지 못한다. Hands 일곱 중 Document, Object(Canvas), Tree, Kanban이 위젯이 없다. Database는 Grid와 같은 격자 어포던스다. 위젯이 좋은지는 모든 데모가 그 바인딩을 고치지 않고 쓰는지로 판정한다.

Goal Anchor

  • Outcome: 빠진 네 장르가 제품 화면에 정해진 위젯으로 있고, 그 바인딩을 모든 데모가 수정 없이 쓴다.
  • Done: 카탈로그에 Document / Canvas / Tree / Board가 있다. Toolbar / Listbox / Grid는 유지한다. Database 위젯 페이지는 없다. useEditing이 붙은 데모가 해당 위젯 바인딩을 위젯 코드 변경 없이 사용한다. 위젯은 편집 값만 읽고 그린다.
  • Don't: Database를 Grid와 따로 만들지 않는다. Button/Card를 위젯으로 두지 않는다. 위젯을 완성 편집기로 키우지 않는다. Hands를 대체하지 않는다. 데모별로 위젯을 포크하지 않는다. 새 위젯 역할을 발명하지 않는다.

Success Evidence

  • /widgets에 Document, Canvas, Tree, Board가 있고 Database 경로가 없다.
  • Order·Document가 같은 Listbox 바인딩을, Sheet·Database가 같은 Grid 바인딩을, 해당 데모가 Tree·Canvas·Board 바인딩을 위젯 소스 수정 없이 사용한다.
  • 위젯 바인딩에 OrderEditor / SheetEditor 같은 장르 타입 분기나 데모 전용 분기가 없다.
  • Hands 데모는 클립보드·삽입·열 이동을 그대로 가진다.

Canonical Mapping

  • Toolbar = canUndo / canRedo
  • Listbox = selected keys / focus
  • Grid = topology / selected cells (Sheet와 Database)
  • Document = 블록 줄 + text offset
  • Canvas = 평면 위 객체 선택
  • Tree = 보이는 계층 topology
  • Board = 열 × 카드
  • Database Hand = Grid (페이지 추가 없음)

Target Structure

제품 화면
|-- Toolbar
|-- Listbox
|-- Grid
|-- Document
|-- Canvas
|-- Tree
`-- Board

Guardrails

  • 재사용 단위는 바인딩(props)이다. Hands가 카탈로그 샘플 컴포넌트를 그대로 마운트해야 하는 것은 아니다.
  • useOrderWidget(OrderEditor) 형태는 검증 실패의 냄새다.
  • 위젯이 데모 하나를 위해 바뀌면 위젯이 잘못된 것이다. 데모가 바인딩을 호출하도록 바뀌는 것은 개밥먹기다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions