@operato/data-grist 7.0.60 → 7.0.65
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 +18 -0
- package/dist/src/record-view/record-view-body.js +52 -27
- package/dist/src/record-view/record-view-body.js.map +1 -1
- package/dist/src/types.d.ts +3 -0
- package/dist/src/types.js.map +1 -1
- package/dist/stories/default-filters.stories copy.d.ts +26 -0
- package/dist/stories/default-filters.stories copy.js +219 -0
- package/dist/stories/default-filters.stories copy.js.map +1 -0
- package/dist/stories/fixed-column.stories.js +5 -1
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grid-setting.stories.js +5 -1
- package/dist/stories/grid-setting.stories.js.map +1 -1
- package/dist/stories/grist-modes.stories.js +2 -1
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/stories/group-header.stories.js +2 -1
- package/dist/stories/group-header.stories.js.map +1 -1
- package/dist/stories/record-view.stories.d.ts +24 -0
- package/dist/stories/record-view.stories.js +125 -0
- package/dist/stories/record-view.stories.js.map +1 -0
- package/dist/stories/textarea.stories.js +2 -1
- package/dist/stories/textarea.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/record-view/record-view-body.ts +52 -27
- package/src/types.ts +3 -0
- package/stories/fixed-column.stories.ts +5 -1
- package/stories/grid-setting.stories.ts +5 -1
- package/stories/grist-modes.stories.ts +2 -1
- package/stories/group-header.stories.ts +2 -1
- package/stories/record-view.stories.ts +143 -0
- package/stories/textarea.stories.ts +2 -1
@@ -26,31 +26,10 @@ export class RecordViewBody extends LitElement {
|
|
26
26
|
padding: var(--spacing-large) var(--spacing-huge);
|
27
27
|
font-size: 16px; /* for ios safari */
|
28
28
|
flex: 1;
|
29
|
-
max-width:
|
29
|
+
max-width: 1300px;
|
30
30
|
box-sizing: border-box;
|
31
31
|
}
|
32
32
|
|
33
|
-
@media only screen and (max-width: 600px) {
|
34
|
-
div[content] {
|
35
|
-
grid-template-columns: 2fr 3fr;
|
36
|
-
padding: var(--spacing-medium);
|
37
|
-
}
|
38
|
-
}
|
39
|
-
|
40
|
-
@media only screen and (min-width: 1200px) {
|
41
|
-
div[content] {
|
42
|
-
grid-template-columns: 1fr 3fr 1fr 3fr;
|
43
|
-
}
|
44
|
-
}
|
45
|
-
|
46
|
-
@media only screen and (min-width: 1600px) {
|
47
|
-
div[content] {
|
48
|
-
grid-template-columns: 1fr 3fr 1fr 3fr;
|
49
|
-
width: 95%;
|
50
|
-
margin: auto;
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
33
|
label {
|
55
34
|
display: flex;
|
56
35
|
align-items: center;
|
@@ -63,6 +42,10 @@ export class RecordViewBody extends LitElement {
|
|
63
42
|
padding-right: var(--spacing-large);
|
64
43
|
}
|
65
44
|
|
45
|
+
label[wide] {
|
46
|
+
grid-column: 1 / 2;
|
47
|
+
}
|
48
|
+
|
66
49
|
label md-icon {
|
67
50
|
display: none;
|
68
51
|
}
|
@@ -86,17 +69,57 @@ export class RecordViewBody extends LitElement {
|
|
86
69
|
font: var(--record-view-font);
|
87
70
|
color: var(--record-view-color);
|
88
71
|
|
89
|
-
max-width:
|
72
|
+
max-width: 360px;
|
90
73
|
}
|
91
74
|
|
92
75
|
ox-grid-field[editing='true'] {
|
93
76
|
border: var(--record-view-edit-border);
|
94
77
|
}
|
95
78
|
|
79
|
+
ox-grid-field[wide] {
|
80
|
+
grid-column: 2 / 5;
|
81
|
+
width: 100%;
|
82
|
+
max-width: unset;
|
83
|
+
}
|
84
|
+
|
96
85
|
:first-child + ox-grid-field {
|
97
86
|
color: var(--record-view-focus-color);
|
98
87
|
font-weight: bold;
|
99
88
|
}
|
89
|
+
|
90
|
+
@media only screen and (max-width: 600px) {
|
91
|
+
div[content] {
|
92
|
+
grid-template-columns: 2fr 3fr;
|
93
|
+
padding: var(--spacing-medium);
|
94
|
+
}
|
95
|
+
|
96
|
+
label[wide] {
|
97
|
+
grid-column: 1 / 2;
|
98
|
+
}
|
99
|
+
|
100
|
+
ox-grid-field[wide] {
|
101
|
+
grid-column: 1 / 3;
|
102
|
+
width: 100%;
|
103
|
+
max-width: unset;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
107
|
+
@media only screen and (max-width: 1000px) {
|
108
|
+
div[content] {
|
109
|
+
grid-template-columns: 2fr 3fr;
|
110
|
+
padding: var(--spacing-medium);
|
111
|
+
}
|
112
|
+
|
113
|
+
label[wide] {
|
114
|
+
grid-column: 1 / 2;
|
115
|
+
}
|
116
|
+
|
117
|
+
ox-grid-field[wide] {
|
118
|
+
grid-column: 2 / 3;
|
119
|
+
width: 100%;
|
120
|
+
max-width: unset;
|
121
|
+
}
|
122
|
+
}
|
100
123
|
`
|
101
124
|
]
|
102
125
|
|
@@ -145,7 +168,7 @@ export class RecordViewBody extends LitElement {
|
|
145
168
|
return html`
|
146
169
|
<div content>
|
147
170
|
${columns.map((column, index) => {
|
148
|
-
let { editable, mandatory } = column.record
|
171
|
+
let { editable, mandatory, wide } = column.record
|
149
172
|
if (typeof editable === 'function') {
|
150
173
|
editable = editable.call(this, record[column.name], column, record, rowIndex, this)
|
151
174
|
}
|
@@ -153,9 +176,10 @@ export class RecordViewBody extends LitElement {
|
|
153
176
|
let dirtyFields = record['__dirtyfields__'] || {}
|
154
177
|
|
155
178
|
return html`
|
156
|
-
<label ?editable=${editable}
|
157
|
-
|
158
|
-
|
179
|
+
<label ?editable=${editable} ?wide=${wide}>
|
180
|
+
<span>${mandatory ? '*' : ''}${this._renderLabel(column)}</span>
|
181
|
+
<md-icon>edit</md-icon>
|
182
|
+
</label>
|
159
183
|
<ox-grid-field
|
160
184
|
.rowIndex=${rowIndex}
|
161
185
|
.column=${column}
|
@@ -163,6 +187,7 @@ export class RecordViewBody extends LitElement {
|
|
163
187
|
.value=${record[column.name]}
|
164
188
|
?dirty=${!!dirtyFields[column.name]}
|
165
189
|
?tabstop=${!!editable}
|
190
|
+
?wide=${wide}
|
166
191
|
></ox-grid-field>
|
167
192
|
`
|
168
193
|
})}
|
package/src/types.ts
CHANGED
@@ -501,6 +501,8 @@ export type DefaultValueFnConfig =
|
|
501
501
|
* @property {DefaultValueFnConfig|undefined} [defaultValue] - Configuration for specifying the default value for the field.
|
502
502
|
* It can be a predefined value generator function or a custom user-defined function (optional).
|
503
503
|
* @property {Object.<string, *>|undefined} [extended] - Additional extended properties that can be added as needed for specific field configurations (optional).
|
504
|
+
* @property {boolean} [wide] - Specifies if the field should occupy a larger width within the viewer or editor.
|
505
|
+
* When set to `true`, the field will attempt to span across multiple columns or occupy more space horizontally.
|
504
506
|
*/
|
505
507
|
export type RecordConfig = {
|
506
508
|
renderer: FieldRenderer
|
@@ -512,6 +514,7 @@ export type RecordConfig = {
|
|
512
514
|
options: any
|
513
515
|
rowOptionField?: string
|
514
516
|
defaultValue?: DefaultValueFnConfig
|
517
|
+
wide?: boolean
|
515
518
|
[extended: string]: any
|
516
519
|
}
|
517
520
|
|
@@ -248,6 +248,9 @@ const config = {
|
|
248
248
|
type: 'json5',
|
249
249
|
name: 'json5',
|
250
250
|
header: 'JSON5',
|
251
|
+
record: {
|
252
|
+
wide: true
|
253
|
+
},
|
251
254
|
width: 200
|
252
255
|
},
|
253
256
|
{
|
@@ -255,7 +258,8 @@ const config = {
|
|
255
258
|
name: 'thumbnail',
|
256
259
|
header: 'thumbnail',
|
257
260
|
record: {
|
258
|
-
editable: true
|
261
|
+
editable: true,
|
262
|
+
wide: true
|
259
263
|
},
|
260
264
|
width: 120
|
261
265
|
},
|
@@ -255,6 +255,9 @@ const config = {
|
|
255
255
|
type: 'json5',
|
256
256
|
name: 'json5',
|
257
257
|
header: 'JSON5',
|
258
|
+
record: {
|
259
|
+
wide: true
|
260
|
+
},
|
258
261
|
width: 200
|
259
262
|
},
|
260
263
|
{
|
@@ -262,7 +265,8 @@ const config = {
|
|
262
265
|
name: 'thumbnail',
|
263
266
|
header: 'thumbnail',
|
264
267
|
record: {
|
265
|
-
editable: true
|
268
|
+
editable: true,
|
269
|
+
wide: true
|
266
270
|
},
|
267
271
|
width: 120
|
268
272
|
},
|
@@ -0,0 +1,143 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import '../src/index.js'
|
3
|
+
import '../src/record-view/record-view-body.js'
|
4
|
+
|
5
|
+
import { html, TemplateResult } from 'lit'
|
6
|
+
import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'
|
7
|
+
|
8
|
+
import { CommonGristStyles } from '@operato/styles'
|
9
|
+
import { ColumnConfig, GristRecord } from '../src/types.js'
|
10
|
+
import { buildColumn } from '../src/configure/column-builder.js'
|
11
|
+
import { ZERO_RECORD } from '../src/index.js'
|
12
|
+
|
13
|
+
const columnsConfig: ColumnConfig[] = [
|
14
|
+
{
|
15
|
+
type: 'string',
|
16
|
+
name: 'id',
|
17
|
+
hidden: true
|
18
|
+
},
|
19
|
+
{
|
20
|
+
type: 'string',
|
21
|
+
name: 'name',
|
22
|
+
label: true,
|
23
|
+
header: 'name',
|
24
|
+
record: {
|
25
|
+
editable: true
|
26
|
+
},
|
27
|
+
filter: 'search',
|
28
|
+
sortable: true,
|
29
|
+
width: 120
|
30
|
+
},
|
31
|
+
{
|
32
|
+
type: 'string',
|
33
|
+
name: 'description',
|
34
|
+
header: 'description',
|
35
|
+
filter: 'search',
|
36
|
+
record: {
|
37
|
+
editable: true,
|
38
|
+
align: 'left'
|
39
|
+
},
|
40
|
+
width: 200
|
41
|
+
},
|
42
|
+
{
|
43
|
+
type: 'textarea',
|
44
|
+
name: 'textarea',
|
45
|
+
label: true,
|
46
|
+
header: 'textarea',
|
47
|
+
record: {
|
48
|
+
editable: true,
|
49
|
+
wide: true
|
50
|
+
},
|
51
|
+
filter: 'search',
|
52
|
+
sortable: true,
|
53
|
+
width: 130
|
54
|
+
},
|
55
|
+
{
|
56
|
+
type: 'datetime',
|
57
|
+
name: 'updatedAt',
|
58
|
+
header: 'updated at',
|
59
|
+
record: {
|
60
|
+
editable: true,
|
61
|
+
defaultValue: {
|
62
|
+
name: 'now'
|
63
|
+
}
|
64
|
+
},
|
65
|
+
filter: 'between',
|
66
|
+
sortable: true,
|
67
|
+
width: 180
|
68
|
+
},
|
69
|
+
{
|
70
|
+
type: 'datetime',
|
71
|
+
name: 'createdAt',
|
72
|
+
header: 'created at',
|
73
|
+
record: {
|
74
|
+
editable: false
|
75
|
+
},
|
76
|
+
sortable: true,
|
77
|
+
width: 180
|
78
|
+
}
|
79
|
+
].map((column: any) => buildColumn(column))
|
80
|
+
|
81
|
+
const record: GristRecord = ZERO_RECORD
|
82
|
+
|
83
|
+
export default {
|
84
|
+
title: 'ox-record-view-body',
|
85
|
+
component: 'ox-record-view-body',
|
86
|
+
argTypes: {
|
87
|
+
headerFilter: { control: 'boolean' }
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
interface Story<T> {
|
92
|
+
(args: T): TemplateResult
|
93
|
+
args?: Partial<T>
|
94
|
+
argTypes?: Record<string, unknown>
|
95
|
+
}
|
96
|
+
|
97
|
+
interface ArgTypes {
|
98
|
+
headerFilter: boolean
|
99
|
+
theme?: 'light' | 'dark'
|
100
|
+
}
|
101
|
+
|
102
|
+
const Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) => html`
|
103
|
+
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
|
104
|
+
|
105
|
+
<link href="/themes/light.css" rel="stylesheet" />
|
106
|
+
<link href="/themes/dark.css" rel="stylesheet" />
|
107
|
+
<link href="/themes/spacing.css" rel="stylesheet" />
|
108
|
+
<link href="/themes/grist-theme.css" rel="stylesheet" />
|
109
|
+
|
110
|
+
<link
|
111
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
|
112
|
+
rel="stylesheet"
|
113
|
+
/>
|
114
|
+
<link
|
115
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
|
116
|
+
rel="stylesheet"
|
117
|
+
/>
|
118
|
+
<link
|
119
|
+
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
|
120
|
+
rel="stylesheet"
|
121
|
+
/>
|
122
|
+
|
123
|
+
<style>
|
124
|
+
${MDTypeScaleStyles.cssText}
|
125
|
+
</style>
|
126
|
+
|
127
|
+
<style>
|
128
|
+
${CommonGristStyles.cssText}
|
129
|
+
</style>
|
130
|
+
|
131
|
+
<style>
|
132
|
+
ox-record-view-body {
|
133
|
+
height: 600px;
|
134
|
+
}
|
135
|
+
</style>
|
136
|
+
|
137
|
+
<ox-record-view-body .columns=${columnsConfig} .record=${record}> </ox-record-view-body>
|
138
|
+
`
|
139
|
+
|
140
|
+
export const Regular = Template.bind({})
|
141
|
+
Regular.args = {
|
142
|
+
headerFilter: true
|
143
|
+
}
|