@operato/scene-table 8.0.0-beta.1 → 9.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/CHANGELOG.md +0 -870
- package/schema.graphql +0 -4549
- package/src/data-list/data-cell.ts +0 -79
- package/src/data-list/data-list-layout.ts +0 -117
- package/src/data-list/data-list.ts +0 -727
- package/src/helper-functions.ts +0 -189
- package/src/index.ts +0 -6
- package/src/table-cell.ts +0 -138
- package/src/table.ts +0 -1448
- package/src/templates/data-list.ts +0 -20
- package/src/templates/index.ts +0 -4
- package/src/templates/table.ts +0 -26
- package/src/types.ts +0 -51
- package/test/basic-test.html +0 -67
- package/test/index.html +0 -22
- package/test/unit/a-test-table.js +0 -72
- package/test/unit/test-table-find-merged-cell.js +0 -95
- package/test/unit/test-table-insert-column.js +0 -81
- package/test/unit/test-table-insert-row.js +0 -79
- package/test/unit/test-table-rows-columns.js +0 -47
- package/test/unit/util.js +0 -21
- package/tsconfig.json +0 -24
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import { Component, ComponentNature, RectPath, Style } from '@hatiolab/things-scene'
|
|
5
|
-
|
|
6
|
-
import { Table } from '../'
|
|
7
|
-
|
|
8
|
-
const NATURE: ComponentNature = {
|
|
9
|
-
mutable: false,
|
|
10
|
-
resizable: true,
|
|
11
|
-
rotatable: true,
|
|
12
|
-
properties: [
|
|
13
|
-
{
|
|
14
|
-
type: 'editor-table',
|
|
15
|
-
label: '',
|
|
16
|
-
name: '',
|
|
17
|
-
property: {
|
|
18
|
-
merge: false,
|
|
19
|
-
split: false
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
'value-property': 'value',
|
|
24
|
-
help: 'scene/component/data-cell'
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default class DataCell extends RectPath(Component) {
|
|
28
|
-
get nature() {
|
|
29
|
-
return NATURE
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
get value() {
|
|
33
|
-
return this.state.value
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
set value(value) {
|
|
37
|
-
this.setState({
|
|
38
|
-
value,
|
|
39
|
-
data: value
|
|
40
|
-
})
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
renderBorder(context: CanvasRenderingContext2D, x: number, y: number, to_x: number, to_y: number, style: Style) {
|
|
44
|
-
if (style && style.strokeStyle && style.lineWidth && style.lineDash) {
|
|
45
|
-
context.beginPath()
|
|
46
|
-
context.moveTo(x, y)
|
|
47
|
-
context.lineTo(to_x, to_y)
|
|
48
|
-
Component.drawStroke(context, style)
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
render(context: CanvasRenderingContext2D) {
|
|
53
|
-
var { left, top, width, height } = this.bounds
|
|
54
|
-
|
|
55
|
-
var { border } = this.state
|
|
56
|
-
border ||= {}
|
|
57
|
-
|
|
58
|
-
// Cell 채우기.
|
|
59
|
-
context.beginPath()
|
|
60
|
-
context.lineWidth = 0
|
|
61
|
-
context.rect(left, top, width, height)
|
|
62
|
-
this.drawFill(context)
|
|
63
|
-
|
|
64
|
-
// Border 그리기
|
|
65
|
-
var parent = this.parent as Table
|
|
66
|
-
var idx = parent.components.indexOf(this)
|
|
67
|
-
var columns = parent.columns || 1
|
|
68
|
-
|
|
69
|
-
this.renderBorder(context, left, top, left + width, top, border.top)
|
|
70
|
-
this.renderBorder(context, left, top + height, left, top, border.left)
|
|
71
|
-
if ((idx + 1) % columns == 0) {
|
|
72
|
-
/* if this filed is right most, draw right side border. */
|
|
73
|
-
this.renderBorder(context, left + width, top, left + width, top + height, border.right)
|
|
74
|
-
}
|
|
75
|
-
this.renderBorder(context, left + width, top + height, left, top + height, border.bottom)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
Component.register('data-cell', DataCell)
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import { Component, Container, Layout } from '@hatiolab/things-scene'
|
|
6
|
-
|
|
7
|
-
import DataCell from './data-cell'
|
|
8
|
-
import DataList from './data-list'
|
|
9
|
-
|
|
10
|
-
var DataListLayout = {
|
|
11
|
-
reflow: function (container: Container) {
|
|
12
|
-
var layoutConfig = container.getState('layoutConfig')
|
|
13
|
-
|
|
14
|
-
var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')
|
|
15
|
-
var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')
|
|
16
|
-
var widths = (layoutConfig && layoutConfig.widths) || container.getState('widths')
|
|
17
|
-
var heights = (layoutConfig && layoutConfig.heights) || container.getState('heights')
|
|
18
|
-
var { offset = { x: 0, y: 0 } } = container.state
|
|
19
|
-
|
|
20
|
-
var widths_sum = widths
|
|
21
|
-
? widths.filter((width: number, i: number) => i < columns).reduce((sum: number, width: number) => sum + width, 0)
|
|
22
|
-
: columns
|
|
23
|
-
var heights_sum = heights
|
|
24
|
-
? heights.filter((height: number, i: number) => i < rows).reduce((sum: number, height: number) => sum + height, 0)
|
|
25
|
-
: rows
|
|
26
|
-
|
|
27
|
-
var inside = container.textBounds
|
|
28
|
-
var paddingLeft = container.getState('paddingLeft') || 0
|
|
29
|
-
var paddingTop = container.getState('paddingTop') || 0
|
|
30
|
-
|
|
31
|
-
var width_unit = inside.width / widths_sum
|
|
32
|
-
var height_unit = inside.height / heights_sum
|
|
33
|
-
|
|
34
|
-
var x = offset.x
|
|
35
|
-
var y = offset.y
|
|
36
|
-
var components = container.components
|
|
37
|
-
|
|
38
|
-
components.forEach((component, idx) => {
|
|
39
|
-
let w = widths ? widths[idx % columns] : 1
|
|
40
|
-
let h = heights ? heights[0] : 1
|
|
41
|
-
|
|
42
|
-
let left = paddingLeft + x
|
|
43
|
-
let top = paddingTop + y
|
|
44
|
-
let width = width_unit * w
|
|
45
|
-
let height = height_unit * h
|
|
46
|
-
|
|
47
|
-
component.bounds = {
|
|
48
|
-
left,
|
|
49
|
-
top,
|
|
50
|
-
width,
|
|
51
|
-
height
|
|
52
|
-
}
|
|
53
|
-
component.set('rotation', 0)
|
|
54
|
-
|
|
55
|
-
if (idx % columns == columns - 1) {
|
|
56
|
-
x = 0
|
|
57
|
-
y += h * height_unit
|
|
58
|
-
} else {
|
|
59
|
-
x += w * width_unit
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
capturables: function (container: Container) {
|
|
65
|
-
return container.components
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
drawables: function (container: Container) {
|
|
69
|
-
return container.components
|
|
70
|
-
},
|
|
71
|
-
|
|
72
|
-
isStuck: function (component: Component) {
|
|
73
|
-
return true
|
|
74
|
-
},
|
|
75
|
-
|
|
76
|
-
/*
|
|
77
|
-
* 레이아웃별로, 키보드 방향키 등을 사용해서 네비게이션 할 수 있는 기능을 제공할 수 있다.
|
|
78
|
-
* 하나의 컴포넌트만 선택되어있고, 키보드 이벤트가 발생했을 때 호출되게 된다.
|
|
79
|
-
* keyNavigate 메쏘드가 정의되어 있지 않으면, 'Tab' 키에 대한 네비게이션만 작동한다.
|
|
80
|
-
* 'Tab'키에 의한 네비게이션은 모든 레이아웃에 공통으로 적용된다.
|
|
81
|
-
*/
|
|
82
|
-
keyNavigate: function (container: Container, component: Component, e: KeyboardEvent) {
|
|
83
|
-
var layoutConfig = container.getState('layoutConfig')
|
|
84
|
-
|
|
85
|
-
var columns = (layoutConfig && layoutConfig.columns) || container.getState('columns')
|
|
86
|
-
var rows = (layoutConfig && layoutConfig.rows) || container.getState('rows')
|
|
87
|
-
|
|
88
|
-
var { row, column } = (container as DataList).getRowColumn(component as DataCell)
|
|
89
|
-
|
|
90
|
-
switch (e.code) {
|
|
91
|
-
case 'ArrowUp':
|
|
92
|
-
if (row > 0) return container.getAt((row - 1) * columns + column)
|
|
93
|
-
break
|
|
94
|
-
case 'ArrowDown':
|
|
95
|
-
if (row < rows - 1) return container.getAt((row + 1) * columns + column)
|
|
96
|
-
break
|
|
97
|
-
case 'ArrowRight':
|
|
98
|
-
if (column < columns - 1) return container.getAt(row * columns + column + 1)
|
|
99
|
-
break
|
|
100
|
-
case 'ArrowLeft':
|
|
101
|
-
if (column > 0) return container.getAt(row * columns + column - 1)
|
|
102
|
-
break
|
|
103
|
-
default:
|
|
104
|
-
return component
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
|
|
108
|
-
/*
|
|
109
|
-
* 하위 컴포넌트를 영역으로 선택하는 경우에, 바운드에 join만 되어도 선택된 것으로 판단하도록 한다.
|
|
110
|
-
* joinType이 false이거나, 정의되어있지 않으면, 바운드에 포함되어야 선택된 것으로 판단한다.
|
|
111
|
-
*/
|
|
112
|
-
joinType: true
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
Layout.register('data-list', DataListLayout)
|
|
116
|
-
|
|
117
|
-
export default DataListLayout
|