@operato/data-grist 1.5.16 → 1.5.19

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/src/data-grid/data-grid-body.js +2 -1
  3. package/dist/src/data-grid/data-grid-body.js.map +1 -1
  4. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.d.ts +1 -2
  5. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js +4 -3
  6. package/dist/src/data-grid/event-handlers/data-grid-body-focus-change-handler.js.map +1 -1
  7. package/dist/src/editors/ox-grist-editor-textarea.d.ts +5 -0
  8. package/dist/src/editors/ox-grist-editor-textarea.js +15 -0
  9. package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -0
  10. package/dist/src/editors/registry.js +2 -0
  11. package/dist/src/editors/registry.js.map +1 -1
  12. package/dist/src/gutters/gutter-dirty.d.ts +1 -0
  13. package/dist/src/gutters/gutter-dirty.js +6 -1
  14. package/dist/src/gutters/gutter-dirty.js.map +1 -1
  15. package/dist/src/renderers/ox-grist-renderer-text copy.d.ts +2 -0
  16. package/dist/src/renderers/ox-grist-renderer-text copy.js +21 -0
  17. package/dist/src/renderers/ox-grist-renderer-text copy.js.map +1 -0
  18. package/dist/src/renderers/ox-grist-renderer-textarea.d.ts +2 -0
  19. package/dist/src/renderers/ox-grist-renderer-textarea.js +5 -0
  20. package/dist/src/renderers/ox-grist-renderer-textarea.js.map +1 -0
  21. package/dist/src/renderers/registry.js +2 -0
  22. package/dist/src/renderers/registry.js.map +1 -1
  23. package/dist/stories/textarea.stories.d.ts +36 -0
  24. package/dist/stories/textarea.stories.js +291 -0
  25. package/dist/stories/textarea.stories.js.map +1 -0
  26. package/dist/tsconfig.tsbuildinfo +1 -1
  27. package/package.json +3 -3
  28. package/src/data-grid/data-grid-body.ts +3 -1
  29. package/src/data-grid/event-handlers/data-grid-body-focus-change-handler.ts +5 -4
  30. package/src/editors/ox-grist-editor-textarea.ts +12 -0
  31. package/src/editors/registry.ts +2 -0
  32. package/src/gutters/gutter-dirty.ts +6 -1
  33. package/src/renderers/ox-grist-renderer-textarea.ts +7 -0
  34. package/src/renderers/registry.ts +2 -0
  35. package/stories/textarea.stories.ts +325 -0
@@ -0,0 +1,325 @@
1
+ import '../src/index.js'
2
+ import '../src/filters/filters-form.js'
3
+ import '../src/sorters/sorters-control.js'
4
+ import '../src/record-view/record-creator.js'
5
+ import '@operato/popup/ox-popup-list.js'
6
+ import '@material/mwc-icon'
7
+
8
+ import { html, TemplateResult } from 'lit'
9
+
10
+ import {
11
+ ColumnConfig,
12
+ FetchHandler,
13
+ GristClassifier,
14
+ GristEventHandlerSet,
15
+ GristRecord,
16
+ ValidationCallback
17
+ } from '../src/types.js'
18
+
19
+ const fetchHandler: FetchHandler = async ({ page, limit }) => {
20
+ var total = 3
21
+ var start = (page! - 1) * limit!
22
+
23
+ await new Promise(resolve => setTimeout(resolve, 500))
24
+
25
+ return {
26
+ total,
27
+ records: Array(limit! * page! > total ? total % limit! : limit)
28
+ .fill('')
29
+ .map((item, idx) => {
30
+ return {
31
+ id: String(idx),
32
+ name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
33
+ description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
34
+ textarea: `
35
+ long long long text
36
+ long long long text
37
+ long long long text
38
+ long long long text
39
+ long long long text white-space: pre-wrap;white-space: pre-wrap;white-space: pre-wrap;
40
+ long long long text
41
+ long long long text
42
+ long long long text
43
+ long long long text
44
+ long long long text
45
+ `,
46
+ createdAt: Date.now(),
47
+ updatedAt: Date.now()
48
+ }
49
+ })
50
+ }
51
+ }
52
+
53
+ const config = {
54
+ list: {
55
+ thumbnail: 'thumbnail',
56
+ fields: ['name', 'description'],
57
+ details: ['role', 'email']
58
+ },
59
+ columns: [
60
+ {
61
+ type: 'gutter',
62
+ gutterName: 'dirty'
63
+ },
64
+ {
65
+ type: 'gutter',
66
+ gutterName: 'sequence'
67
+ },
68
+ {
69
+ type: 'gutter',
70
+ gutterName: 'row-selector',
71
+ multiple: true
72
+ },
73
+ {
74
+ type: 'gutter',
75
+ gutterName: 'button',
76
+ icon: 'add',
77
+ title: 'add',
78
+ handlers: {
79
+ click: 'record-copy'
80
+ }
81
+ },
82
+ {
83
+ type: 'string',
84
+ name: 'id',
85
+ hidden: true
86
+ },
87
+ {
88
+ type: 'string',
89
+ name: 'name',
90
+ label: true,
91
+ header: 'name',
92
+ record: {
93
+ editable: true
94
+ },
95
+ filter: 'search',
96
+ sortable: true,
97
+ width: 120
98
+ },
99
+ {
100
+ type: 'string',
101
+ name: 'description',
102
+ header: 'description',
103
+ filter: 'search',
104
+ record: {
105
+ editable: true,
106
+ align: 'left'
107
+ },
108
+ width: 200
109
+ },
110
+ {
111
+ type: 'textarea',
112
+ name: 'textarea',
113
+ label: true,
114
+ header: 'textarea',
115
+ record: {
116
+ editable: true
117
+ },
118
+ filter: 'search',
119
+ sortable: true,
120
+ width: 130
121
+ },
122
+ {
123
+ type: 'datetime',
124
+ name: 'updatedAt',
125
+ header: 'updated at',
126
+ record: {
127
+ editable: true,
128
+ defaultValue: {
129
+ name: 'now'
130
+ }
131
+ },
132
+ filter: 'between',
133
+ sortable: true,
134
+ width: 180
135
+ },
136
+ {
137
+ type: 'datetime',
138
+ name: 'createdAt',
139
+ header: 'created at',
140
+ record: {
141
+ editable: false
142
+ },
143
+ sortable: true,
144
+ width: 180
145
+ }
146
+ ],
147
+ rows: {
148
+ selectable: {
149
+ multiple: false
150
+ },
151
+ handlers: {
152
+ focus: 'select-row'
153
+ }
154
+ },
155
+ sorters: [
156
+ {
157
+ name: 'name',
158
+ desc: true
159
+ },
160
+ {
161
+ name: 'email'
162
+ }
163
+ ],
164
+ pagination: {
165
+ pages: [20, 30, 50, 100, 200]
166
+ }
167
+ }
168
+
169
+ export default {
170
+ title: 'textarea in ox-grist',
171
+ component: 'ox-grist',
172
+ argTypes: {
173
+ config: { control: 'object' },
174
+ mode: { control: 'select', options: ['GRID', 'LIST', 'CARD'] },
175
+ urlParamsSensitive: { control: 'boolean' }
176
+ }
177
+ }
178
+
179
+ interface Story<T> {
180
+ (args: T): TemplateResult
181
+ args?: Partial<T>
182
+ argTypes?: Record<string, unknown>
183
+ }
184
+
185
+ interface ArgTypes {
186
+ config: object
187
+ mode: string
188
+ urlParamsSensitive: boolean
189
+ fetchHandler: object
190
+ }
191
+
192
+ const Template: Story<ArgTypes> = ({
193
+ config,
194
+ mode = 'GRID',
195
+ urlParamsSensitive = false,
196
+ fetchHandler
197
+ }: ArgTypes) => html` <link
198
+ href="https://fonts.googleapis.com/css?family=Material+Icons&display=block"
199
+ rel="stylesheet"
200
+ />
201
+ <link href="/themes/app-theme.css" rel="stylesheet" />
202
+ <link href="/themes/oops-theme.css" rel="stylesheet" />
203
+ <link href="/themes/grist-theme.css" rel="stylesheet" />
204
+
205
+ <style>
206
+ [slot='headroom'] {
207
+ display: flex;
208
+ flex-direction: row;
209
+ align-items: center;
210
+ padding: var(--padding-default) var(--padding-wide);
211
+ background-color: var(--theme-white-color);
212
+ box-shadow: var(--box-shadow);
213
+
214
+ --mdc-icon-size: 24px;
215
+ }
216
+ #sorters mwc-icon,
217
+ #modes mwc-icon {
218
+ --mdc-icon-size: 18px;
219
+ }
220
+ #sorters {
221
+ margin-left: auto;
222
+ margin-right: var(--margin-default);
223
+ padding-left: var(--padding-narrow);
224
+ border-bottom: var(--border-dark-color);
225
+ position: relative;
226
+ color: var(--secondary-color);
227
+ font-size: var(--fontsize-default);
228
+ user-select: none;
229
+ }
230
+
231
+ #sorters > * {
232
+ padding: var(--padding-narrow);
233
+ vertical-align: middle;
234
+ }
235
+
236
+ #modes > * {
237
+ padding: var(--padding-narrow);
238
+ opacity: 0.5;
239
+ color: var(--primary-text-color);
240
+ cursor: pointer;
241
+ }
242
+
243
+ #modes > mwc-icon[active] {
244
+ border-radius: 9px;
245
+ background-color: rgba(var(--primary-color-rgb), 0.05);
246
+ opacity: 1;
247
+ color: var(--secondary-text-color);
248
+ cursor: default;
249
+ }
250
+
251
+ #modes > mwc-icon:hover {
252
+ opacity: 1;
253
+ color: var(--secondary-text-color);
254
+ }
255
+
256
+ #add {
257
+ width: 50px;
258
+ text-align: right;
259
+ }
260
+
261
+ #add button {
262
+ background-color: var(--status-success-color);
263
+ border: 0;
264
+ border-radius: 50%;
265
+ padding: 5px;
266
+ width: 36px;
267
+ height: 36px;
268
+ cursor: pointer;
269
+ }
270
+
271
+ #add button:hover {
272
+ background-color: var(--focus-background-color);
273
+ box-shadow: var(--box-shadow);
274
+ }
275
+
276
+ #add button mwc-icon {
277
+ font-size: 2em;
278
+ color: var(--theme-white-color);
279
+ }
280
+
281
+ #filters {
282
+ display: flex;
283
+ justify-content: center;
284
+ align-items: center;
285
+ }
286
+
287
+ #filters * {
288
+ margin-right: var(--margin-default);
289
+ }
290
+
291
+ @media only screen and (max-width: 460px) {
292
+ #filters {
293
+ flex-direction: column;
294
+ }
295
+
296
+ #modes {
297
+ display: none;
298
+ }
299
+ }
300
+ </style>
301
+
302
+ <ox-grist
303
+ .config=${config}
304
+ .mode=${mode}
305
+ .fetchHandler=${fetchHandler}
306
+ ?url-params-sensitive=${urlParamsSensitive}
307
+ @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}
308
+ >
309
+ <div slot="headroom">
310
+ <div id="filters">
311
+ <ox-filters-form autofocus></ox-filters-form>
312
+ </div>
313
+
314
+ <ox-record-creator id="add" light-popup>
315
+ <button><mwc-icon>add</mwc-icon></button>
316
+ </ox-record-creator>
317
+ </div>
318
+ </ox-grist>`
319
+
320
+ export const Regular = Template.bind({})
321
+ Regular.args = {
322
+ config,
323
+ fetchHandler,
324
+ mode: 'GRID'
325
+ }