Slate Visualization 위젯
Visualization에는 Graph, Image Gallery, Map, Table, Toast와 Tree가 있습니다. 아래에서 선택과 hover 등 상호작용값을 따로 표시하며 나머지는 편집 설정입니다.
Graph
Graph는 nodes와 edges로 관계를 표시합니다.
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| defaultEdgeIcon / defaultNodeIcon | String | 아니요 | 기본 이미지 URL 또는 Blueprint 아이콘입니다. |
| directedEdgesEnabled | Boolean | 아니요 | 간선 끝에 대상 노드를 가리키는 화살표를 표시합니다. |
| edgeArrowSize | Number | 아니요 | 화살표의 픽셀 크기입니다. |
| edgeIconOffset / edgeLabelOffset | Number | 아니요 | 간선 중앙에서 아이콘/레이블을 옮깁니다. 방향은 레이블 수평 여부에 따라 달라집니다. |
| edgeIconSize | Number | 아니요 | 간선 아이콘의 픽셀 너비와 높이입니다. |
| edgeLabelHorizontal | Boolean | 아니요 | 레이블을 간선과 나란히 놓는 대신 수평으로 유지합니다. |
| edgeLength | Number | 아니요 | Flow와 Force Directed 배치에 사용하는 간선 길이입니다. |
| edges | IEdges | 아니요 | 간선 데이터입니다. |
| hideLabelsScale | Number | 아니요 | 읽기 어려운 작은 레이블을 숨길 확대 수준입니다. |
| nodeColorScaleRange | String[] | 아니요 | 노드 값의 색상 그라디언트입니다. |
| nodeLabelPosition / nodeLabelOffset | String / Number | 아니요 | 노드에 대한 레이블 위치와 중심으로부터의 간격입니다. |
| layout | 레이아웃 구성 | 아니요 | Force Directed, Flow Up/Down/Left/Right 또는 Manual을 선택합니다. |
| nodeDiameter / nodeIconSize | Number | 아니요 | 노드 원의 지름과 아이콘의 너비/높이입니다. |
| nodeMargin | Number | 아니요 | Flow와 Force Directed에서 노드 사이의 최소 간격입니다. |
| nodes | INodes | 예 | 노드 데이터입니다. |
| nodeSelectorDiameter | Number | 아니요 | 선택을 표시하는 원의 지름입니다. |
| selectedNodeIds | String[] | 아니요 | 현재 선택한 고유 노드 ID입니다. 상호작용값입니다. |
| zoomScaleRange | Number | 아니요 | 그래프에서 허용하는 확대 범위 설정입니다. |
Force Directed는 노드를 펼쳐 배치하고 Flow는 간선이 지정 방향으로 향하도록 배치합니다. Manual에서는 끌어서 바꾼 위치를 저장할 수 있지만 다른 배치에서 끌어 바꾼 위치는 저장하지 않습니다.
nodeColorScaleRange는 색 두 개 이상을 사용합니다. 값 [0,5,10]과 색 ["red","blue"]는 빨강, 보라, 파랑입니다. 생략하거나 두 색 미만이면 Blueprint @green4, @gold4와 @red4에 해당하는 #15B371, #F2B824, #F55656을 사용합니다.
IEdges와 INodes
| 모델과 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| IEdges.cssClasses / icons / labels | String[] | 아니요 | 간선의 class, 이미지 URL 또는 Blueprint 아이콘, 레이블입니다. |
| IEdges.sourceNodeIds / targetNodeIds | String[] | 예 | nodes.ids와 대응하는 출발/대상 노드 ID입니다. |
| INodes.colorScaleValues | Number[] | 아니요 | 색상 그라디언트에 사용할 값입니다. |
| INodes.cssClasses / icons / labels | String[] | 아니요 | 노드의 class, 아이콘과 레이블입니다. |
| INodes.ids | String[] | 예 | 고유 노드 ID입니다. |
| INodes.xPositions / yPositions | Number[] | 예 | Manual 배치의 좌표입니다. 값이 빠진 노드는 격자로 배치하며 끌기 상호작용으로 바뀝니다. |
구성 예
graph가 노드와 간선 배열 및 이미지 URL들을 반환하는 동적 예입니다.
{
"camera": {
"ratio": null,
"x": null,
"y": null
},
"edges": {
"sourceNodeIds": "{{graph.sourceNodeIds}}",
"targetNodeIds": "{{graph.targetNodeIds}}"
},
"nodes": {
"icons": "{{graph.iconUrls}}",
"ids": "{{graph.ids}}",
"labels": "{{graph.ids}}",
"xPositions": "{{graph.xPositions}}",
"yPositions": "{{graph.yPositions}}"
},
"selectedNodeIds": [
"n18"
]
}
정적 다섯 노드 예입니다. defaultNodeIcon의 이미지 경로는 해당 Slate 환경에서 접근 가능한 리소스로 준비합니다.
{
"camera": {
"ratio": null,
"x": null,
"y": null
},
"defaultNodeIcon": "resources/map-people.svg",
"edges": {
"ids": [
"e1",
"e2",
"e3",
"e4",
"e5"
],
"labels": [
"e1",
"e2",
"e3",
"e4",
"e5"
],
"sourceNodeIds": [
"n1",
"n2",
"n3",
"n4",
"n5"
],
"targetNodeIds": [
"n2",
"n3",
"n4",
"n5",
"n1"
]
},
"layout": {
"type": "layered"
},
"nodes": {
"ids": [
"n1",
"n2",
"n3",
"n4",
"n5"
],
"labels": [
"n1",
"n2",
"n3",
"n4",
"n5"
],
"xPositions": [
100,
30.9,
-80.9,
-80.9,
30.9
],
"yPositions": [
0,
95.1,
58.78,
-58.78,
-95.1
]
},
"selectedNodeIds": [
"n1"
]
}
기본 구성은 다음과 같습니다.
{
"camera": {
"ratio": null,
"x": null,
"y": null
},
"edges": {
"sourceNodeIds": [],
"targetNodeIds": []
},
"nodes": {
"ids": [],
"xPositions": [],
"yPositions": []
},
"selectedNodeIds": []
}
Image Gallery
필수 imageUrls는 이미지 URL의 String 배열입니다. 선택적인 captions는 각 이미지의 설명 String 배열입니다.
Map
Slate Map은 Leaflet 기반이며 Mapbox 배경 지도를 사용합니다. 배경인 base/tile layer와 업무 데이터를 표현하는 overlay/feature layer를 나누며 feature layer에는 raster와 vector 타일을 사용할 수 있습니다.
지도 용어
| 용어 | 의미 |
|---|---|
| Map tile | 배경 영상입니다. 업무 객체의 속성이나 선택 데이터와 구분합니다. Misc에서 지도 전체에 구성하며 한 번에 배경 종류 하나를 표시합니다. |
| Feature | 데이터에 연결된 점이나 도형입니다. |
| Raster | 픽셀 격자로 표현하는 영상입니다. |
| Vector | 점과 선으로 도형을 표현하므로 크기가 달라져도 형태를 유지합니다. |
| Vector tile | 벡터 도형 데이터를 담은 타일입니다. |
| Tile server | 필요한 타일을 동적으로 제공하는 서버입니다. |
| Map tile source | 배경 타일을 제공하는 소스이며 타일 서버의 한 종류입니다. |
레이어
| 유형 | 데이터와 동작 |
|---|---|
| Location | 위도와 경도 쌍의 점을 원 또는 아이콘으로 표시합니다. |
| Heat map / Heat grid | 점의 분포를 계산합니다. Heat map은 밀도를 연속 색상으로, Heat grid는 버킷별 셀로 표시합니다. |
| Shape | GeoJSON 도형을 SVG로 표시하며 처음 로드할 때 도형을 한꺼번에 읽습니다. Slate 서버에서 GeoJSON을 제공할 수 있습니다. |
| Vector | 별도 타일 서버가 필요합니다. 보이는 영역의 타일을 동적으로 가져오고 canvas에 그리므로 Shape보다 많은 feature를 다룰 수 있습니다. |
| Choropleth | 다각형의 값에 색상 척도를 적용합니다. 주별 인구밀도나 우편번호별 사회 취약성 지수 같은 값입니다. |
| Raven | 해당 연동이 필요하면 Palantir 담당자와 구성합니다. |
배경과 규모
Property의 Misc > Tile Layer에서 dark, light, satellite, street와 default 등의 배경을 고릅니다. All을 선택하면 지도 안의 Layer Selector에서 종류를 바꿀 수 있습니다.
Shape는 약 1,000 feature 부근에서, Location은 약 5,000~10,000점에서 성능 저하가 나타날 수 있습니다. 이는 고정된 최대 입력 수가 아니라 성능을 검토할 규모입니다. 큰 Shape는 geometry를 단순화하거나 Vector로 제공하는 방식을 고려합니다.
정적 지도에는 이동과 확대를 끌 수 있습니다. feature만 표시하려면 배경 레이어도 제거할 수 있습니다.
레이어 예와 스타일
개별 marker에 class를 부여하고 앱의 Less 스타일에서 색을 정할 수 있습니다.
.city { stroke: @cyan3; fill: @cyan5; }
.town { stroke: @pink3; fill: @pink5; }
.village { stroke: @lime3; fill: @lime5; }
레이어 이름 또는 .layer${layerIndex}로 그 레이어의 마커와 군집을 함께 꾸밀 수도 있습니다. 유효한 CSS class인 레이어 이름만 class로 추가됩니다.
.cities {
background-color: @blue5;
fill: @blue5;
stroke: @blue2;
border-color: @blue2;
}
.layer1 {
background-color: @green5;
fill: @green5;
stroke: @green2;
border-color: @green2;
}
지도 속성
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| autoZoom | Boolean | 예 | 지도 데이터에 맞춰 자동 확대합니다. |
| bounds | IBounds | 예 | 현재 보이는 경계입니다. 설정과 상호작용으로 바뀝니다. |
| crs | String | 아니요 | EPSG3395(타원체 Mercator), EPSG3857(구면 Mercator), EPSG4326(위경도의 등간격 표현)입니다. |
| fixedBoundsEnabled | Boolean | 아니요 | 이동과 확대에 따른 경계 변경을 제어합니다. |
| zoomControlEnabled | Boolean | 아니요 | 왼쪽 위 확대 조작을 표시합니다. |
| layerSelectorEnabled | Boolean | 아니요 | 오른쪽 위 레이어 메뉴를 표시합니다. |
| layers | ILayerModel[] | 아니요 | 레이어 목록입니다. |
| maxBounds | IBounds | 아니요 | 사용자가 이동하고 확대할 수 있는 최대 경계입니다. |
| minMaxZoomLevel | Number | 아니요 | 확대 범위를 설정합니다. 수준 0은 지구 전체, 18은 개별 주택 정도의 범위입니다. |
| zoomLevel | Number | 예 | 현재 확대 수준입니다. 상호작용값입니다. |
| selection | IMapSelection | 예 | 선택 도형과 ID입니다. 상호작용값입니다. |
| tileLayerEnabled | Boolean | 예 | 배경 타일 표시 여부입니다. |
| tileUrlsEnabled | Boolean | 예 | 사용자 타일 URL을 사용합니다. tileLayerEnabled도 켜져 있어야 하며 레이어 선택기를 켜면 사용자 URL도 선택지에 추가됩니다. |
| tileLayer | String | 예 | 배경 타일 종류입니다. |
| tileUrlLabels | String(JSON 배열) | 아니요 | 사용자 타일 이름들입니다. 없으면 Custom, Custom (1) 등의 이름을 사용합니다. |
| tileUrls | String(JSON 배열) | 아니요 | 사용자 타일 URL 목록입니다. |
| shapeSelectionEnabled | Boolean | 예 | 끌기 선택 도구를 사용합니다. Cmd/Ctrl을 누르면 선택을 추가할 수 있습니다. |
| selectionType | String | 아니요 | Area는 selection.areas의 지속 도형을, Data는 Location marker의 직접 선택과 selection.ids 갱신을 사용합니다. |
타일 URL의 형식 예는 https://{s}.example.com/blah/{z}/{x}/{y}.png입니다. 이는 실제 서비스 주소로 바꿔야 하며 s는 선택적인 하위 도메인, z는 확대 수준, x/y는 타일 좌표입니다.
공통 경계와 선택
| 모델 | 필드와 계약 |
|---|---|
| IBaseLayerOptions | 선택적인 name(String)은 레이어 선택기 이름입니다. Location/Shape는 없으면 CSS 선택기를 이름으로 사용합니다. Raven에 지정하면 Raven이 제공한 모든 레이어 이름을 덮어씁니다. |
| ILatLng | 필수 latitude/longitude(Number)입니다. 설정 또는 상호작용으로 바뀝니다. |
| IBounds | 필수 northEast와 southWest(ILatLng)입니다. 설정 또는 상호작용으로 바뀝니다. |
| IMapSelection | 선택적 areas는 사각형/원 도형 배열, 필수 ids는 선택한 Location marker의 String 배열입니다. |
| IRectangleShape | 필수 type은 rectangle이며 bounds는 IBounds입니다. |
| ICircleShape | 필수 type은 circle, center는 ILatLng, radius는 미터 단위 Number, bounds는 원 전체를 감싸는 가장 작은 사각형 경계입니다. |
선택 도형의 필드는 사용자 상호작용으로 바뀝니다. ILayerModel은 필수 type과 해당 레이어에 맞는 options 객체를 갖습니다. 유형은 Choropleth, Location, Heat map/Heat grid, Shape, Vector 또는 Raven의 설정에 맞춥니다.
Location options
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| clustering | Boolean | 예 | 점을 군집으로 표시합니다. |
| cssClasses | String[] | 아니요 | 마커별 CSS class입니다. |
| ids | String[] | 예 | 선택 때 selection.ids로 내보낼 ID입니다. |
| latitudes / longitudes | Number[] | 예 | 점의 위도와 경도입니다. |
| weights | Number[] | 아니요 | 군집 레이블에 집계할 가중치이며 기본값은 1입니다. |
| markerType | String | 아니요 | circle 또는 icon입니다. |
| markerRadius | Number | 아니요 | 원 마커 반지름입니다. |
Shape options
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| cssClasses | String[] | 아니요 | GeoJSON 도형과 마커의 class입니다. |
| ids | String[] | 예 | GeoJSON ID와 대응하며 개별 feature에 class를 연결할 때 사용합니다. |
| markerType / markerRadius | String / Number | 아니요 | circle/icon 마커와 원 반지름입니다. |
| shapeSource | Any | 아니요 | Server Resource 또는 Raw를 선택합니다. |
| shapeGeoJson | Any | 아니요 | Raw일 때 사용하는 GeoJSON입니다. 함수나 질의 결과를 권장합니다. |
| shapeUrl | String | 아니요 | Server Resource일 때 사용하는 파일 URL입니다. 예는 resources/map/us-states.geojson입니다. |
큰 GeoJSON을 앱에 직접 저장하면 앱 크기 한도에 영향을 주므로 Server Resource나 질의를 사용합니다.
Choropleth options
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| colorScaleOptions | IColorScaleOptions | 아니요 | 사용자 색상 척도입니다. |
| ids | String[] | 예 | GeoJSON ID와 대응하며 선택 ID로도 반환합니다. |
| layerSource | String | 예 | GeoJSON 또는 Vector Tile 소스를 선택합니다. |
| shapeSource / shapeGeoJson / shapeUrl | Any / Any / String | 아니요 | Shape와 같은 Raw/Server Resource 조건을 따릅니다. |
| values | Number[] | 예 | 각 영역의 값입니다. |
| vectorTileOptions | IVectorTileOptions | Vector Tile 사용 시 | 벡터 타일 설정입니다. |
IColorScaleOptions의 필수 필드는 다음과 같습니다.
| 필드 | 자료형 | 의미 |
|---|---|---|
| colorScaleTypes | String | 값에서 색으로 대응시키는 척도입니다. |
| colors | String(JSON 색상 배열) | 두 색 이상의 보간 범위입니다. hex 또는 CSS 색 이름을 사용합니다. |
| defaultColor | String | 값이 null인 요소의 색입니다. |
| opacity | String | 0은 투명, 1은 불투명인 척도 설정입니다. |
| linearity | String | 1은 선형이며 작은 값은 낮은 값 구간의 색 차이를 늘립니다. |
예를 들어 값 [0,25,100]과 색 ["red","yellow","green"]이면 빨강, 주황, 초록으로 나타냅니다.
Heat map options
필수 latitudes, longitudes와 values는 Number 배열입니다. 선택적 scaleRadiusEnabled의 기본값은 true입니다. 확대에 따라 radius를 조정하면 지도 척도의 값으로 사용하며 기본 radius는 2입니다. 조정하지 않으면 픽셀 단위이며 기본 radius는 20입니다.
Heat grid options
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| latitudes / longitudes / values | Number[] | 예 | 점 좌표와 값입니다. |
| feature | String | 아니요 | 셀을 그리는 형태입니다. |
| colorScale | Number | 아니요 | 셀의 색상 척도 설정입니다. |
| granularity | Number | 아니요 | 셀 크기입니다. |
| opacityRange | Number[] | 아니요 | 최소/최대 불투명도입니다. |
| colorScaleLinearity | 척도 계수 | 아니요 | 1.0은 선형, 0.5는 제곱근 척도입니다. |
| radiusScale | Number[] | 아니요 | 원 feature의 반지름 범위입니다. 최소와 최대가 같으면 모두 같은 크기입니다. |
Vector options
IVectorTileLayerOptions의 baseStyle, clickStyle과 hoverStyle은 선택적인 IVectorTileStyleOptions입니다. vectorTileOptions는 필수입니다.
| IVectorTileOptions 필드 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| featureIdKey | String | 아니요 | 고유 feature ID로 사용할 속성입니다. 기본값은 id입니다. |
| layerName | String | 예 | 서버가 타일에 제공한 여러 레이어 중 표시할 레이어 이름입니다. |
| vectorTileUrl | String | 예 | x, y, z 좌표 자리에 대응하는 {x}, {y}, {z}를 포함한 서버 URL입니다. |
| featureIdWhitelist | String[] | 아니요 | 문자열이나 정규식 목록입니다. 비어 있지 않으면 어느 항목과도 맞지 않는 featureIdKey를 숨깁니다. |
IVectorTileStyleOptions의 모든 필드는 선택 사항입니다. color(String)는 모든 feature와 outline의 색, radius(Number)는 점의 반지름, size(Number)는 선과 outline의 두께입니다. outline은 다각형 경계의 color와 size를 담은 객체입니다.
Raven options
필수 serverUri는 Raven 서버 URI이며 slate.yml의 script와 image CSP에 해당 도메인을 명시적으로 허용해야 합니다. 선택적 filter는 필수 propertyName과 propertyValue String을 갖습니다. 예를 들어 City 속성의 Medford 값을 필터링할 수 있습니다.
Table
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| columnData | 열 이름별 Any[] 객체 | 예 | 표 데이터입니다. 질의 결과를 연결할 수 있습니다. |
| columnOptions | 열 이름별 IColumnOption 객체 | 예 | 열별 표시 설정입니다. |
| columnOrder | String[] | 예 | 표시할 열의 부분집합과 순서입니다. 빈 배열이면 순서가 비결정적일 수 있습니다. 끌기 재정렬을 켜면 상호작용으로 갱신됩니다. |
| gridOptions | IGridOptions | 예 | 표 조작 설정입니다. |
| selectedRowKeys | Any[] | 예 | 사용자가 선택한 행의 키입니다. |
| selectionIdentityColumnId | String | 아니요 | 행을 고유하게 식별하는 columnData의 열 ID입니다. 그 열의 값이 selectedRowKeys에 들어갑니다. |
| serverEnabled | Boolean | 예 | 기본 false는 로드한 데이터만 클라이언트에서 정렬/페이징합니다. true이면 질의가 페이지와 정렬 조건을 실제로 적용해야 합니다. |
| bodyTooltip / headerTooltip | String | 아니요 | HTML을 지원하며 생략하거나 null이면 표시하지 않습니다. |
| tooltipPosition | Blueprint.Position | 아니요 | tooltip 위치입니다. |
| tooltipsEnabled | Boolean | 예 | tooltip 사용 여부입니다. |
| transpose | Boolean | 아니요 | 행과 열을 바꿔 표시합니다. |
| clickEvents | String[] | 예 | 표가 노출하는 클릭 이벤트 이름들입니다. |
클라이언트 방식은 서버 호출이 적지만 데이터를 먼저 모두 읽어야 하므로 메모리를 더 사용합니다. 서버 방식에서 pageSize가 10이면 질의도 최대 10행만 반환해야 합니다.
열과 grid 옵션
| 모델 | 필드와 조건 |
|---|---|
| IColumnOption | 선택적 horizontalAlignment(String)는 left/center/right, name(String)은 표시 이름, width(Number)는 너비입니다. |
| IGridOptions | 선택적 enableSelection, enableSorting, enableColumnReordering(Boolean), pagingOptions, selectionOptions와 sortOptions입니다. 선택/정렬 옵션에는 해당 enable 설정도 켜야 합니다. |
| ISelectionOptions | 선택적 checkbox, multiSelect와 selectionRequired(Boolean)입니다. selectionRequired는 마지막 선택 해제를 막되 초기 미선택 상태에서는 첫 선택 이후부터 적용합니다. |
| ISortOptions | 필수 columnId(String)와 isAscending(Boolean)이며 사용자 정렬 상태입니다. |
열 끌기 재정렬을 켜도 체크박스 열은 고정되며 이동할 수 없습니다.
hover와 페이징
ITableHover는 필수 columnIndex(Number, 0부터 시작), displayValue(String), isHeader(String)를 갖습니다. ITablePagingOptions는 필수 currentOffset(Number, 0부터 시작하는 현재 페이징 위치), pageSize(Number), 선택적 totalServerItems(Number)를 갖습니다. currentOffset은 상호작용값이고 다른 두 값은 편집 설정입니다.
동적 표
query1이 id, name, address, phone_number와 score 열을 반환하는 예입니다. 서버 페이지당 최대 10행을 가져오고 전체 결과 수는 100으로 구성한 예제입니다.
{
"columnData": "{{query1}}",
"columnOptions": {
"id": {
"name": "ID",
"width": 50
},
"name": {
"name": "Full Name"
},
"address": {
"name": "Home Address"
},
"phone_number": {
"name": "Phone Number"
},
"score": {
"name": "Score",
"horizontalAlignment": "right"
}
},
"columnOrder": [
"id",
"name",
"address",
"phone_number",
"score"
],
"gridOptions": {
"enableSelection": true,
"enableSorting": true,
"pagingOptions": {
"currentOffset": 0,
"pageSize": 10,
"totalServerItems": 100
},
"selectionOptions": {
"checkbox": false,
"multiSelect": true
},
"sortOptions": {
"columnId": "score",
"isAscending": false
}
},
"selectedRowKeys": [],
"selectionIdentityColumnId": "id",
"serverEnabled": true,
"tooltipsEnabled": false
}
정적 표와 기본값
{
"columnData": {
"staticOptions": [
"option1",
"option2",
"option3"
]
},
"columnOptions": {},
"columnOrder": [],
"gridOptions": {
"enableSelection": true,
"selectionOptions": {
"checkbox": true,
"multiSelect": false
}
},
"selectedRowKeys": [],
"selectionIdentityColumnId": "staticOptions",
"serverEnabled": false,
"tooltipsEnabled": false
}
{
"columnOptions": {},
"columnOrder": [],
"gridOptions": {},
"selectedRowKeys": [],
"selectionIdentityColumnId": "Metric",
"serverEnabled": false,
"tooltipsEnabled": false
}
항공편 표 만들기
Visualization > Table을 추가하고 이름을 w_flightTable로 정합니다. Legacy Foundry 질의 q_allFlights의 열 데이터를 Data의 "{{q_allFlights}}"에 연결합니다. 이 값은 유효한 JSON 문자열 안에 Handlebars 참조를 둔 형식이며 Slate가 결과 객체로 해석합니다.
Add all columns로 열 표시 설정을 엽니다. flight_id는 숨기되 데이터에는 남겨 행 선택 키로 사용합니다. 다른 열에는 Title을 정하고 timestamp 열에 Moment 형식을 지정합니다.
Misc에서 Allow Selection과 Enable Sorting을 켜고 Key column ID를 flight_id로 지정합니다.
Server Paging/Sorting을 끄면 이미 로드한 행만 정렬하고 나눕니다. 처음 질의가 10행만 가져왔다면 그 10행만 대상입니다. 브라우저에서 다룰 수 있는 약 5,000~10,000행은 사용자의 탭 자원에 따라 달라집니다.
서버 페이징과 정렬
Enable Paging과 Server Paging/Sorting을 켜고 예를 들어 Page Size를 20으로 정합니다. q_allFlights의 LIMIT과 OFFSET에 표의 값을 연결합니다.
SELECT
flight_id,
carrier_code,
tail_num,
origin,
dest,
dep_ts_utc,
arr_ts_utc,
distance,
actual_elapsed_time
FROM "foundry_sync"."{{v_flightTable}}"
LIMIT {{w_flightTable.gridOptions.pagingOptions.pageSize}}
OFFSET {{w_flightTable.gridOptions.pagingOptions.currentOffset}}
전체 결과 수는 q_flightCount 질의로 구합니다.
SELECT
COUNT(flight_id) as num_flights
FROM "foundry_sync"."{{v_flightTable}}"
Server Total에는 다음을 연결합니다.
{{q_flightCount.num_flights.[0]}}
예제 데이터의 last-mile-flights는 73,946행으로 약 75,000행이며 flights는 약 420만 행입니다. 실제 앱에서는 count 질의가 반환한 값을 사용합니다.
정렬도 서버에 반영하도록 ORDER BY에 columnId와 isAscending을 연결합니다. 단순한 분기는 if 블록으로, 복잡한 로직은 Slate 함수로 처리합니다. 전체 질의는 다음과 같습니다.
SELECT
flight_id,
carrier_code,
tail_num,
origin,
dest,
dep_ts_utc,
arr_ts_utc,
distance,
actual_elapsed_time
FROM "foundry_sync"."{{v_flightTable}}"
ORDER BY {{w_flightTable.gridOptions.sortOptions.columnId}}
{{#if w_flightTable.gridOptions.sortOptions.isAscending}}
ASC
{{else}}
DESC
{{/if}}
LIMIT {{w_flightTable.gridOptions.pagingOptions.pageSize}}
OFFSET {{w_flightTable.gridOptions.pagingOptions.currentOffset}}
이 예제는 FOUNDRY 동기화 소스의 SQL입니다. 외부 SQL 소스에는 별도의 보안 helper 규칙을 적용합니다.
Text 위젯으로 All Flights 또는 Last Mile Flights 제목을 만들고 표 왼쪽 위에 배치합니다. Ctrl, macOS에서는 Cmd를 사용해 표와 제목을 함께 선택하거나 영역으로 선택하여 정렬할 수 있습니다.
Toast
| 속성 | 자료형 | 필수 | 역할 |
|---|---|---|---|
| actionText | String | 예 | 동작 버튼의 문구입니다. |
| hasAction | Boolean | 예 | 동작 버튼을 표시합니다. |
| intent | 강조 설정 | 예 | 시각적 강조 색상입니다. 기본 JSON은 -1을 사용합니다. |
| message | String | 예 | 알림 문구입니다. |
| timeout | Number | 예 | 자동 닫힘까지의 밀리초입니다. 0 이하이면 자동으로 닫지 않습니다. |
open과 close 액션으로 열고 닫습니다. 완전히 열리면 didOpen, 완전히 닫히면 didClose가 발생합니다. click은 Toast의 동작 버튼을 눌렀을 때의 이벤트입니다.
{
"actionText": "Toast Example",
"hasAction": false,
"intent": -1,
"message": "Toast Message",
"timeout": 600
}
{
"actionText": "Action!",
"hasAction": false,
"intent": -1,
"message": "Message",
"timeout": 3000
}
Tree
필수 contents는 Blueprint ITreeNode 구조를 사용하는 계층 JSON, selected는 선택한 노드 ID의 JSON 값입니다. 필수 selectionType은 none, single 또는 multiple입니다.
기본 구성은 다음처럼 자식 노드와 초기 선택 상태를 포함합니다.
{
"contents": [
{
"childNodes": [
{
"id": 3,
"label": "bar 1"
},
{
"id": 4,
"label": "bar 2"
}
],
"iconName": "folder-close",
"id": 1,
"label": "bars"
},
{
"id": 2,
"label": "foo"
}
],
"searchText": "",
"selectedNodes": [],
"selectionType": "single"
}