ImportProgress
첫 가져오기 진행을 날짜로 표시. 떠나도 계속됨.
- 출시 화면에서 사용
개요
미리보기
Import
Scanned back to Oct 3
Keeps going if you leave.
Google Calendar
Announcements sent
- None yet
예시
상태
시작
Import
Started scanning.
Keeps going if you leave.
Google Calendar
Announcements sent
- None yet
첫 결과
Import
Scanned back to Oct 3
First records are in. Scanned back to Oct 3
Keeps going if you leave.
Google Calendar
Announcements sent
- None yet
읽는 중
Import
Scanned back to Oct 3
Keeps going if you leave.
Google Calendar
Announcements sent
- None yet
일부 실패
Import
Some dates couldn’t be scanned. What we got is kept.
Google Calendar
Couldn’t read Sep 2–Sep 20. The 128 we got are kept.
Announcements sent
- None yet
완료
Import
Scanned all 30 days.
Google Calendar
Announcements sent
- None yet
10초 넘음
Import
Scanned back to Oct 3
Keeps going if you leave.
We’ll gather everything here when it’s done.
Google Calendar
Announcements sent
- None yet
돌아옴 · 변화 있음
Import
Scanned all 30 days.
Google Calendar
Announcements sent
- None yet
돌아옴 · 변화 없음
Import
Scanned back to Oct 3
Keeps going if you leave.
Google Calendar
Announcements sent
- None yet
쓰임 예
90일 · Gmail
Import
Scanned all 90 days.
Gmail
Announcements sent
- None yet
이렇게 · 이렇게 하지 않기
- 이렇게 진행은 퍼센트가 아니라 “10월 3일까지 읽음”처럼 날짜로 말한다. 시작, 첫 결과, 일부 실패, 완료 때만 알린다.
- 이렇게 떠났다 돌아오면 서버의 지금 상태를 바로 그린다. 놓친 알림을 몰아서 재생하지 않는다.
- 이렇게 하지 않기 진행을 퍼센트·건수 경쟁·체크 목록으로 표현하지 않는다. 접근할 수 없는 과거 자료를 복원한다고 약속하지 않는다. 시스템 동사는 “읽음”만 쓴다.
토큰과 속성
| 이름 | 타입 | 기본값 | 설명 |
|---|---|---|---|
phase? | 'starting' | 'first-results' | 'running' | 'partial' | 'done' | running | 서버의 phase(로컬 저장소를 쓰지 않음). |
readUntil? | string (YYYY-MM-DD) | 2026-10-03 | 지금까지 읽은 가장 오래된 날짜. 퍼센트 없음. |
service? | 'gmail' | 'calendar' | 'drive' | 'slack' | 'notion' | calendar | 읽는 서비스. |
days? | 30 | 90 | 30 | 첫 가져오기 기간(“지난 30일을 모두 읽었어요”). |
slow? | boolean | false | 10초 넘음: “끝나면 여기 모아둘게요.”를 더한다. |
phaseWhenLeft? | ImportPhase | 'none' | none | returning: 떠날 때의 phase. 돌아오면 서버 phase를 즉시 그리고(Skeleton·처음부터 다시 없음) 바뀐 것 하나만 한 번 알린다. none = 실시간. |
children? | ReactNode | — | 문장 아래 슬롯(partial일 때 PartialFailureRow). |
onAnnounce? | (message: string, politeness: 'polite' | 'assertive') => void | — | 공용 알림기(기본 announce()). 시작·첫 결과·일부 실패·완료만, 10초에 최대 1회(완료·일부 실패는 미뤄서라도 알림). |
| 그 밖의 속성 | — | — | <section> 속성(id, aria-*)이 전달된다. 결과 목록의 aria-busy는 목록이 가진다. |
접근성
키보드: 초점을 옮기지 않는다. 대화형 요소는 슬롯의 PartialFailureRow뿐.
- 알림은 공용 LiveAnnouncer(announce) 하나로 보낸다. 날짜 진행과 행 추가는 알리지 않는다. 미리보기 아래 “보낸 알림” 목록이 횟수를 증명한다.
- 계약의 role="status"는 공용 LiveAnnouncer로 대체했다(라이브 영역 중복 방지, round-4 로그).