인라인 편집
보이는 글자를 그 자리에서 고치는 칸입니다. 저장은 한 번만 일어나고, 실패해도 친 글을 잃지 않습니다.
보기는 평범한 글자이고 손을 올리거나 포커스가 오면 면과 연필이 나타납니다. 편집은 같은 자리 · 같은 크기의 입력칸이라 줄이 흔들리지 않습니다. 저장 · 취소 단추는 편집 중에만 보입니다. Enter 직후의 blur 가 다시 저장하지 않고, Esc 로 물린 입력칸이 사라지며 나는 blur 가 저장으로 바뀌지 않습니다. 의존성이 없습니다.
- import
- import { InlineEdit } from "@uyoolabs/ui/ui";
- 쓰는 곳
- 한 칸 · 자주 고치는 값(채널 주제 · 프로젝트 이름 · 키 · 대화 이름 · 문서 제목 · 표 셀). 권한이 없으면 readOnly 로 같은 자리에 글자만 둡니다.
- 쓰지 않는 경우
- 둘 이상을 같이 고치면 폼 + 저장 바(C-Form)를 씁니다. 보기를 링크처럼 밑줄로 꾸미지 않습니다(이동과 편집이 헷갈립니다). blur 로 조용히 버리지 않습니다. 편집칸 크기를 보기와 다르게 하지 않습니다. 상태 · 담당처럼 ‘고르는 값’은 Select · Combobox 를 셀 자리에 엽니다.
InlineEdit
Enter 를 눌러 편집합니다
Enter 를 눌러 편집합니다
Enter 를 눌러 편집합니다
Enter 를 눌러 편집합니다
| 키 | 동작 |
|---|---|
| Enter·Space·F2 | 보기에서 편집으로. 포커스는 입력칸, 글자는 모두 골라 둔다 |
| Enter | 저장. 한 · 일 조합 중이면 확정만 한다(isComposing 가드) |
| ⌘/Ctrl+Enter | 여러 줄의 저장. Enter 는 줄바꿈 |
| Esc | 원래 값으로 보기. 조합 중 Esc 는 조합만 물린다. 바깥 대화상자 · 드로어는 닫히지 않는다 |
| Tab | 칸을 떠나면 저장하고 다음 칸으로(submitOnBlur). 빈 값으로 떠나면 원래 값 |
| 저장 · 취소 뒤 | 포커스는 보기 버튼으로. 실패 · 검증 오류면 입력칸에 남는다 |
props
소스의 타입과 JSDoc 에서 생성한 표입니다. 컴포넌트를 고치면 pnpm gen 으로 다시 만듭니다.
InlineEdit
| prop | 타입 | 기본값 | 설명 |
|---|---|---|---|
| value | string | — | 원본값(제어) |
| defaultValue | string | "" | 처음 값(비제어) |
| displayValue | ReactNode | — | 보기 상태에 보일 글자. 없으면 value. 편집은 늘 value(원본)를 연다 — 표시용 글이 원본을 덮지 않는다 |
| onSave필수 | (next: string) => void | Promise<void> | — | 바뀐 값을 받는다. Promise 면 끝날 때까지 저장 중이다. throw · reject 하면 편집을 남기고 친 글을 지킨다 |
| onCancel | () => void | — | |
| validate | (next: string) => string | undefined | — | 오류 문장을 돌려주면 저장하지 않는다. 기본 검사(빈 값 · maxLength) 뒤에 부른다 |
| label필수 | string | — | 접근성 이름(‘프로젝트 이름’). 보이지 않아도 필수다 |
| placeholder | string | — | 빈 값 보기(‘설명 추가’ + 더하기 아이콘) |
| size | "sm" | "md" | "lg" | "md" | sm 28 표 셀 · md 본문 · lg 20/600 제목 |
| multiline | boolean | false | 여러 줄. Enter 는 줄바꿈, ⌘/Ctrl+Enter 가 저장이다 |
| maxLength | number | — | |
| required | boolean | true | 빈 값이면 저장하지 않는다 |
| trim | boolean | true | 앞뒤 공백을 지워 견주고 보낸다 |
| submitOnBlur | boolean | true | 칸을 떠나면 저장한다(빈 값으로 떠나면 원래 값으로 돌아간다) |
| optimistic | boolean | false | true 면 저장을 기다리지 않고 바로 보기로 돌아가 새 값을 보인다. 실패하면 되돌리고 오류 문장(목록 행 이름 바꾸기) |
| readOnly | boolean | false | 권한 없음. 글자만 보인다(버튼 · 면 · 연필 · 포커스 없음) |
| selectOnEdit | boolean | true | 편집에 들어갈 때 글자를 모두 고른다(결정 #53). false 면 커서를 끝에 둔다 |
| showActions | boolean | true | 편집 중에 저장 · 취소 단추를 보인다(결정 #53: 편집 중에만) |
| editing | boolean | — | 편집 상태(제어) |
| onEditingChange | (editing: boolean) => void | — | |
| lang | "ko" | "en" | "ja" | "ko" | |
| labels | Partial<InlineEditLabels> | — | |
| className | string | — |