@operato/data-grist 7.0.21 → 7.0.25
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/CHANGELOG.md +19 -0
- package/dist/src/data-grid/data-grid-body.js +3 -3
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.js +1 -1
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grid/data-grid.js +1 -1
- package/dist/src/data-grid/data-grid.js.map +1 -1
- package/dist/src/data-grist.js +1 -1
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/record-view/record-view-body.d.ts +2 -0
- package/dist/src/record-view/record-view-body.js +51 -30
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/stories/fixed-column.stories.js +1 -1
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/data-grid/data-grid-body.ts +3 -3
- package/src/data-grid/data-grid-header.ts +1 -1
- package/src/data-grid/data-grid.ts +1 -1
- package/src/data-grist.ts +1 -1
- package/src/record-view/record-view-body.ts +64 -39
- package/stories/fixed-column.stories.ts +1 -1
package/src/data-grist.ts
CHANGED
@@ -7,19 +7,30 @@ import { customElement, property } from 'lit/decorators.js'
|
|
7
7
|
import { ZERO_RECORD } from '../configure/zero-config'
|
8
8
|
import { ColumnConfig, GristRecord } from '../types'
|
9
9
|
import { recordViewBodyClickHandler } from './event-handlers/record-view-body-click-handler'
|
10
|
-
import { recordViewBodyKeydownHandler } from './event-handlers/record-view-body-keydown-handler'
|
11
10
|
|
12
11
|
@customElement('ox-record-view-body')
|
13
12
|
export class RecordViewBody extends LitElement {
|
14
13
|
static styles = [
|
15
14
|
css`
|
16
15
|
:host {
|
16
|
+
display: block;
|
17
|
+
font-size: 16px; /* for ios safari */
|
18
|
+
place-content: center;
|
19
|
+
}
|
20
|
+
|
21
|
+
div[content] {
|
17
22
|
display: grid;
|
18
|
-
grid-template-columns:
|
23
|
+
grid-template-columns: 1fr 2fr;
|
19
24
|
grid-auto-rows: min-content;
|
20
|
-
grid-gap: var(--record-view-gap);
|
21
|
-
padding: var(--record-view-padding);
|
22
|
-
|
25
|
+
grid-gap: var(--record-view-gap, 16px);
|
26
|
+
padding: var(--record-view-padding, 16px);
|
27
|
+
box-sizing: border-box;
|
28
|
+
}
|
29
|
+
|
30
|
+
@media screen and (min-width: 601px) {
|
31
|
+
ox-grid-field {
|
32
|
+
max-width: 300px;
|
33
|
+
}
|
23
34
|
}
|
24
35
|
|
25
36
|
label {
|
@@ -31,6 +42,7 @@ export class RecordViewBody extends LitElement {
|
|
31
42
|
font: var(--record-view-label-font);
|
32
43
|
color: var(--record-view-label-color);
|
33
44
|
text-align: right;
|
45
|
+
padding-right: var(--spacing-large);
|
34
46
|
}
|
35
47
|
|
36
48
|
label md-icon {
|
@@ -65,18 +77,6 @@ export class RecordViewBody extends LitElement {
|
|
65
77
|
color: var(--record-view-focus-color);
|
66
78
|
font-weight: bold;
|
67
79
|
}
|
68
|
-
|
69
|
-
@media only screen and (max-width: 800px) {
|
70
|
-
:host {
|
71
|
-
grid-template-columns: 2fr 3fr;
|
72
|
-
}
|
73
|
-
}
|
74
|
-
|
75
|
-
@media (min-width: 1800px) {
|
76
|
-
:host {
|
77
|
-
grid-template-columns: 2fr 3fr 2fr 3fr 2fr 3fr;
|
78
|
-
}
|
79
|
-
}
|
80
80
|
`
|
81
81
|
]
|
82
82
|
|
@@ -91,37 +91,62 @@ export class RecordViewBody extends LitElement {
|
|
91
91
|
|
92
92
|
this.setAttribute('tabindex', '0')
|
93
93
|
|
94
|
-
this.
|
94
|
+
this.addEventListener('keydown', this._onKeyDown)
|
95
95
|
this.renderRoot.addEventListener('click', recordViewBodyClickHandler.bind(this))
|
96
96
|
}
|
97
97
|
|
98
|
+
disconnectedCallback() {
|
99
|
+
super.disconnectedCallback()
|
100
|
+
this.removeEventListener('keydown', this._onKeyDown)
|
101
|
+
}
|
102
|
+
|
103
|
+
_onKeyDown(event: KeyboardEvent) {
|
104
|
+
if (event.key === 'Tab') {
|
105
|
+
const fields = Array.from(this.renderRoot.querySelectorAll('ox-grid-field[tabstop]'))
|
106
|
+
const focused = this.renderRoot.querySelector('ox-grid-field[editing]')
|
107
|
+
const focusedIndex = fields.findIndex(field => field === focused)
|
108
|
+
|
109
|
+
let nextIndex = focusedIndex + (event.shiftKey ? -1 : 1)
|
110
|
+
|
111
|
+
if (nextIndex >= fields.length || nextIndex < 0) {
|
112
|
+
return // Let the default behavior happen if it's the last or first element
|
113
|
+
}
|
114
|
+
|
115
|
+
event.preventDefault()
|
116
|
+
fields[nextIndex]?.dispatchEvent(new CustomEvent('click', { bubbles: true, composed: true }))
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
98
120
|
render() {
|
99
121
|
var columns = this.columns.filter(column => !column.hidden && column.type !== 'gutter')
|
100
122
|
var record = this.record
|
101
123
|
var rowIndex = this.rowIndex
|
102
124
|
|
103
125
|
return html`
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
126
|
+
<div content>
|
127
|
+
${columns.map((column, index) => {
|
128
|
+
let { editable, mandatory } = column.record
|
129
|
+
if (typeof editable === 'function') {
|
130
|
+
editable = editable.call(this, record[column.name], column, record, rowIndex, this)
|
131
|
+
}
|
132
|
+
|
133
|
+
let dirtyFields = record['__dirtyfields__'] || {}
|
134
|
+
|
135
|
+
return html`
|
136
|
+
<label ?editable=${editable}
|
137
|
+
><span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span> <md-icon>edit</md-icon></label
|
138
|
+
>
|
139
|
+
<ox-grid-field
|
140
|
+
.rowIndex=${rowIndex}
|
141
|
+
.column=${column}
|
142
|
+
.record=${record}
|
143
|
+
.value=${record[column.name]}
|
144
|
+
?dirty=${!!dirtyFields[column.name]}
|
145
|
+
?tabstop=${!!editable}
|
146
|
+
></ox-grid-field>
|
147
|
+
`
|
148
|
+
})}
|
149
|
+
</div>
|
125
150
|
`
|
126
151
|
}
|
127
152
|
|