앱 간 드래그앤드롭
드래그앤드롭은 HTML 표준의 DataTransfer를 이용해 한 앱의 데이터를 다른 앱으로 전달합니다. Palantir의 drag/drop 통합점을 구현하면 Gotham, Foundry와 사용자 앱 사이에서 지원하는 표현을 교환할 수 있습니다.
DataTransfer와 payload
DataTransfer는 드래그 중 전달하는 데이터의 저장소이며 이 문맥에서 payload라고도 부릅니다. 텍스트나 이미지처럼 여러 종류의 데이터를 담습니다. 이 인터페이스는 클립보드 데이터 처리에도 쓰입니다.
dragstart에서 데이터를 넣고 drop에서 읽습니다. 유형별 데이터는 setData와 getData로 기록하거나 조회합니다. 하나의 payload에 같은 실체의 여러 표현을 넣을 수 있으므로 수신 앱은 자신이 이해하는 표현을 선택합니다.
미디어 유형
미디어 유형(MIME type)은 각 데이터가 무엇을 뜻하는지 나타냅니다. 예를 들어 text/plain 유형에 Hello 문자열을 담으면 일반 텍스트를 받는 영역이 이를 사용할 수 있습니다.
Palantir 전용 미디어 유형은 객체나 객체 집합 같은 플랫폼 개념을 나타냅니다. 일부 영역은 표준 미디어 유형도 지원하지만, Palantir 앱 간 연결에는 해당 전용 유형을 payload에 포함하는 편이 적합합니다.
| 전달 대상 | 계약 |
|---|---|
| Foundry 객체 RID 또는 Gotham 객체 ID | 객체 미디어 유형의 식별자 문자열 배열 |
| Foundry 객체 집합 | 객체 집합 미디어 유형의 임시 객체 집합 RID 배열 |
유형 이름만 바꾸어 서로 다른 객체 표현을 변환하지 않습니다. Foundry와 Gotham에서 같은 실체를 나타내는 표현을 찾으려면 type mapping과 보강을 사용합니다.
Drag zone
Drag zone은 사용자가 데이터를 끌기 시작하는 DOM 요소입니다. 요소가 발생시키는 dragstart를 처리하여 payload에 미디어 유형과 데이터를 기록합니다.
네트워크를 통해 추가 데이터를 준비해야 한다면 dragstart 전에 끝냅니다. DataTransfer의 쓰기 가능 범위는 해당 동기 이벤트 처리 안이므로 비동기 응답을 기다린 뒤에 기록할 수 없습니다.
Drop zone
Drop zone은 데이터를 놓는 DOM 요소입니다. 받을 유형을 제한할 수 있으며 dragenter와 dragover 중 유형을 보고 수용 여부를 표시합니다. 수용할 때 기본 동작을 취소하여 drop을 허용하고 drop handler에서 문자열을 읽습니다.
데이터 내용은 drop 안에서 동기적으로 확보합니다. 이후의 비동기 조회에는 확보한 문자열을 사용합니다. 파싱과 유형 검증을 마친 뒤 앱의 상태나 업무 기능에 전달합니다. 디자인 지침에 따라 유효/무효 상태와 처리 중 상태를 사용자에게 보여 줍니다.
구현 경로
- HTML 통합점은 drag source, drop target과 상태 강조를 완전한 브라우저 예제로 연결합니다.
- OSDK React 컴포넌트는 생성 client를 통해 객체 집합과 타입별 수신 처리를 연결합니다.
- Foundry/Gotham 보강 구현은 Data Bank 요청을 송신 전 또는 수신 후에 추가합니다.
새 통합에는 상호운용성이 개선된 최신 플랫폼 버전을 권장합니다. Workshop의 내장 위젯에서도 지원되는 유형의 드래그앤드롭을 구성할 수 있습니다.