@operato/data-grist 0.3.28 → 0.4.2
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 +43 -0
- package/demo/data-grist-test.html +49 -114
- package/demo/index.html +20 -2
- package/dist/src/data-consumer.d.ts +1 -0
- package/dist/src/data-consumer.js.map +1 -1
- package/dist/src/data-grist.d.ts +2 -1
- package/dist/src/data-grist.js +25 -0
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-provider.d.ts +1 -2
- package/dist/src/data-provider.js +4 -0
- package/dist/src/data-provider.js.map +1 -1
- package/dist/src/data-report.d.ts +1 -0
- package/dist/src/data-report.js +3 -0
- package/dist/src/data-report.js.map +1 -1
- package/dist/src/editors/registry.d.ts +1 -1
- package/dist/src/editors/registry.js +1 -1
- package/dist/src/editors/registry.js.map +1 -1
- package/dist/src/handlers/move-down.d.ts +3 -0
- package/dist/src/handlers/move-down.js +26 -0
- package/dist/src/handlers/move-down.js.map +1 -0
- package/dist/src/handlers/move-up.d.ts +3 -0
- package/dist/src/handlers/move-up.js +26 -0
- package/dist/src/handlers/move-up.js.map +1 -0
- package/dist/src/handlers/record-copy.d.ts +3 -0
- package/dist/src/handlers/record-copy.js +23 -0
- package/dist/src/handlers/record-copy.js.map +1 -0
- package/dist/src/handlers/registry.js +7 -1
- package/dist/src/handlers/registry.js.map +1 -1
- package/dist/src/record-view/record-creator.js.map +1 -1
- package/dist/src/record-view/record-view.js +0 -2
- package/dist/src/record-view/record-view.js.map +1 -1
- package/dist/src/types.d.ts +8 -6
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -10
- package/src/data-consumer.ts +1 -0
- package/src/data-grist.ts +32 -1
- package/src/data-provider.ts +8 -3
- package/src/data-report.ts +4 -0
- package/src/editors/registry.ts +4 -3
- package/src/handlers/move-down.ts +44 -0
- package/src/handlers/move-up.ts +44 -0
- package/src/handlers/record-copy.ts +38 -0
- package/src/handlers/registry.ts +7 -1
- package/src/record-view/record-view.ts +0 -2
- package/src/types.ts +13 -7
- package/themes/grist-theme.css +5 -6
- package/yarn-error.log +17496 -0
- package/custom-elements.json +0 -12924
- package/dist/test/data-grist.test.d.ts +0 -1
- package/dist/test/data-grist.test.js +0 -24
- package/dist/test/data-grist.test.js.map +0 -1
- package/test/data-grist.test.ts +0 -35
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,49 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
### [0.4.2](https://github.com/hatiolab/operato/compare/v0.4.1...v0.4.2) (2022-03-06)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* [#1320](https://github.com/hatiolab/operato/issues/1320) record-view max-height style ([3b1de33](https://github.com/hatiolab/operato/commit/3b1de33d461b59ee95cef199a67ad441b091c1a0))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### :rocket: New Features
|
|
15
|
+
|
|
16
|
+
* add @operato/app module to support productivity for web application ([217d1f2](https://github.com/hatiolab/operato/commit/217d1f2d99ff75dcd8da1293814653f4758c04b8))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### [0.4.1](https://github.com/hatiolab/operato/compare/v0.4.0...v0.4.1) (2022-03-02)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### :bug: Bug Fix
|
|
24
|
+
|
|
25
|
+
* grist padding style ([0cc4030](https://github.com/hatiolab/operato/commit/0cc40309ee0e2437e81f7970a13d861c5ab4dd60))
|
|
26
|
+
* lodash => lodash-es, remove underscore ([08cbef1](https://github.com/hatiolab/operato/commit/08cbef1e63e28c96e7341bce1910ae7baed889e2))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### :rocket: New Features
|
|
30
|
+
|
|
31
|
+
* added data-grist cloneSelectedRecords() method ([de390ba](https://github.com/hatiolab/operato/commit/de390babb956cbc1119c6129a80aed239d69728f))
|
|
32
|
+
* added data-grist event handlers - record move up/down, record copy ([cf66a91](https://github.com/hatiolab/operato/commit/cf66a91c0801a285eb745e9abf58374e6722c991))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [0.4.0](https://github.com/hatiolab/operato/compare/v0.3.28...v0.4.0) (2022-02-22)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### :bug: Bug Fix
|
|
40
|
+
|
|
41
|
+
* build problem because testing framework confilct with lit 2.2.0 ([596deda](https://github.com/hatiolab/operato/commit/596dedaa29a537c5ec92a2449e8cd08a0b11bfde))
|
|
42
|
+
* data-grist sorting fault related pagination problem in card/list mode ([6a29842](https://github.com/hatiolab/operato/commit/6a2984270b495b139bbf31e8a5719db533e0a426))
|
|
43
|
+
* defined --ox-grist-padding style property ([e76fba0](https://github.com/hatiolab/operato/commit/e76fba05badc7f81278790bed6ad7f5857a8f9a8))
|
|
44
|
+
* grist padding style ([302b8f9](https://github.com/hatiolab/operato/commit/302b8f942c8f04aa02dd777b723732ca95abf0ee))
|
|
45
|
+
* upgrade lit@2.2.0 ([d80e4a4](https://github.com/hatiolab/operato/commit/d80e4a4de260b3a0f7aa35f1086d0f2235cb5d01))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
6
49
|
### [0.3.28](https://github.com/hatiolab/operato/compare/v0.3.27...v0.3.28) (2022-02-08)
|
|
7
50
|
|
|
8
51
|
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
import '../dist/src/record-view/record-creator.js'
|
|
55
55
|
import '@operato/popup/ox-popup-list.js'
|
|
56
56
|
import '@material/mwc-icon'
|
|
57
|
+
import { CommonGristStyles } from '@operato/styles'
|
|
57
58
|
|
|
58
59
|
const fetchHandler = async ({ page, limit, sorters = [] }) => {
|
|
59
60
|
var total = 120993
|
|
@@ -144,6 +145,22 @@
|
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
},
|
|
148
|
+
{
|
|
149
|
+
type: 'gutter',
|
|
150
|
+
gutterName: 'button',
|
|
151
|
+
icon: 'add',
|
|
152
|
+
handlers: {
|
|
153
|
+
click: 'record-copy'
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'gutter',
|
|
158
|
+
gutterName: 'button',
|
|
159
|
+
icon: 'arrow_downward',
|
|
160
|
+
handlers: {
|
|
161
|
+
click: 'move-down'
|
|
162
|
+
}
|
|
163
|
+
},
|
|
147
164
|
{
|
|
148
165
|
type: 'string',
|
|
149
166
|
name: 'id',
|
|
@@ -233,13 +250,10 @@
|
|
|
233
250
|
label: true,
|
|
234
251
|
header: 'role',
|
|
235
252
|
record: {
|
|
236
|
-
options: ['admin', 'worker', 'tester'],
|
|
253
|
+
options: ['', 'admin', 'worker', 'tester'],
|
|
237
254
|
editable: true
|
|
238
255
|
},
|
|
239
|
-
filter:
|
|
240
|
-
options: ['admin', 'worker', 'tester', 'xyz', 'VERY'],
|
|
241
|
-
multiple: true /* this case, operator should be 'in' */
|
|
242
|
-
},
|
|
256
|
+
filter: true,
|
|
243
257
|
sortable: true,
|
|
244
258
|
width: 120
|
|
245
259
|
},
|
|
@@ -333,91 +347,13 @@
|
|
|
333
347
|
|
|
334
348
|
class GristDemo extends LitElement {
|
|
335
349
|
static styles = [
|
|
350
|
+
CommonGristStyles,
|
|
336
351
|
css`
|
|
337
352
|
:host {
|
|
338
353
|
display: flex;
|
|
339
354
|
flex-direction: column;
|
|
340
355
|
}
|
|
341
356
|
|
|
342
|
-
ox-grist {
|
|
343
|
-
flex: 1;
|
|
344
|
-
overflow-y: auto;
|
|
345
|
-
|
|
346
|
-
--grid-record-emphasized-background-color: red;
|
|
347
|
-
--grid-record-emphasized-color: yellow;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
[slot='headroom'] {
|
|
351
|
-
display: flex;
|
|
352
|
-
flex-direction: row;
|
|
353
|
-
align-items: center;
|
|
354
|
-
padding: var(--padding-default) var(--padding-wide);
|
|
355
|
-
border-top: 2px solid rgba(0, 0, 0, 0.2);
|
|
356
|
-
background-color: var(--theme-white-color);
|
|
357
|
-
box-shadow: var(--box-shadow);
|
|
358
|
-
|
|
359
|
-
--mdc-icon-size: 24px;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
#sorters {
|
|
363
|
-
margin-left: auto;
|
|
364
|
-
position: relative;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
#sorters > * {
|
|
368
|
-
padding: var(--padding-narrow);
|
|
369
|
-
margin-right: var(--margin-default);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
#modes > * {
|
|
373
|
-
padding: var(--padding-narrow);
|
|
374
|
-
opacity: 0.5;
|
|
375
|
-
color: var(--primary-text-color);
|
|
376
|
-
cursor: pointer;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
#modes > mwc-icon[active] {
|
|
380
|
-
border-radius: 9px;
|
|
381
|
-
background-color: rgba(var(--primary-color-rgb), 0.05);
|
|
382
|
-
opacity: 1;
|
|
383
|
-
color: var(--secondary-text-color);
|
|
384
|
-
cursor: default;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
#modes > mwc-icon:hover {
|
|
388
|
-
opacity: 1;
|
|
389
|
-
color: var(--secondary-text-color);
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
#add {
|
|
393
|
-
width: 50px;
|
|
394
|
-
text-align: right;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
#add button {
|
|
398
|
-
background-color: var(--status-success-color);
|
|
399
|
-
border: 0;
|
|
400
|
-
border-radius: 50%;
|
|
401
|
-
padding: 5px;
|
|
402
|
-
width: 36px;
|
|
403
|
-
height: 36px;
|
|
404
|
-
cursor: pointer;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
#add button:hover {
|
|
408
|
-
background-color: var(--focus-background-color);
|
|
409
|
-
box-shadow: var(--box-shadow);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
#add button mwc-icon {
|
|
413
|
-
font-size: 2em;
|
|
414
|
-
color: var(--theme-white-color);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
#filters * {
|
|
418
|
-
margin-right: var(--margin-default);
|
|
419
|
-
}
|
|
420
|
-
|
|
421
357
|
#tailer {
|
|
422
358
|
display: flex;
|
|
423
359
|
flex-direction: row;
|
|
@@ -425,18 +361,12 @@
|
|
|
425
361
|
}
|
|
426
362
|
|
|
427
363
|
#tailer a {
|
|
428
|
-
padding: 0 var(--padding-
|
|
364
|
+
padding: 0 var(--padding-default) 0 var(--padding-default);
|
|
429
365
|
margin: 0 var(--margin-narrow);
|
|
430
|
-
border-
|
|
366
|
+
border-right: 1px solid rgba(0, 0, 0, 0.1);
|
|
431
367
|
font-size: var(--fontsize-default);
|
|
432
368
|
color: var(--primary-color);
|
|
433
369
|
}
|
|
434
|
-
|
|
435
|
-
@media only screen and (max-width: 460px) {
|
|
436
|
-
#modes {
|
|
437
|
-
display: none;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
370
|
`
|
|
441
371
|
]
|
|
442
372
|
|
|
@@ -446,8 +376,8 @@
|
|
|
446
376
|
}
|
|
447
377
|
}
|
|
448
378
|
|
|
449
|
-
get
|
|
450
|
-
return this.
|
|
379
|
+
get grist() {
|
|
380
|
+
return this.renderRoot.querySelector('ox-grist')
|
|
451
381
|
}
|
|
452
382
|
|
|
453
383
|
render() {
|
|
@@ -455,10 +385,31 @@
|
|
|
455
385
|
|
|
456
386
|
return html`
|
|
457
387
|
<ox-grist .config=${config} .mode=${mode} auto-fetch .fetchHandler=${fetchHandler}>
|
|
458
|
-
<
|
|
388
|
+
<div id="filters" slot="headroom">
|
|
389
|
+
<ox-filters-form @filters-change=${e => console.log('changed', e.detail)}></ox-filters-form>
|
|
390
|
+
</div>
|
|
459
391
|
|
|
460
392
|
<div slot="headroom" id="headroom">
|
|
393
|
+
<div id="tailer">
|
|
394
|
+
<a href="./report-test.html">Report Test</a>
|
|
395
|
+
<a
|
|
396
|
+
href="#"
|
|
397
|
+
@click=${() => {
|
|
398
|
+
this.renderRoot.querySelector('ox-grist').reset()
|
|
399
|
+
}}
|
|
400
|
+
>Reset</a
|
|
401
|
+
>
|
|
402
|
+
<a
|
|
403
|
+
href="#"
|
|
404
|
+
@click=${() => {
|
|
405
|
+
this.renderRoot.querySelector('ox-grist').fetch(true)
|
|
406
|
+
}}
|
|
407
|
+
>Fetch</a
|
|
408
|
+
>
|
|
409
|
+
</div>
|
|
410
|
+
|
|
461
411
|
<div id="sorters">
|
|
412
|
+
Sort
|
|
462
413
|
<mwc-icon
|
|
463
414
|
@click=${e => {
|
|
464
415
|
const target = e.currentTarget
|
|
@@ -467,7 +418,7 @@
|
|
|
467
418
|
top: target.offsetTop + target.offsetHeight
|
|
468
419
|
})
|
|
469
420
|
}}
|
|
470
|
-
>
|
|
421
|
+
>expand_more</mwc-icon
|
|
471
422
|
>
|
|
472
423
|
<ox-popup id="sorter-control">
|
|
473
424
|
<ox-sorters-control> </ox-sorters-control>
|
|
@@ -480,27 +431,11 @@
|
|
|
480
431
|
<mwc-icon @click=${() => (this.mode = 'CARD')} ?active=${mode == 'CARD'}>apps</mwc-icon>
|
|
481
432
|
</div>
|
|
482
433
|
|
|
483
|
-
<div id="tailer">
|
|
484
|
-
<a href="./report-test.html">Report Test</a>
|
|
485
|
-
<a
|
|
486
|
-
href="#"
|
|
487
|
-
@click=${() => {
|
|
488
|
-
this.renderRoot.querySelector('ox-grist').reset()
|
|
489
|
-
}}
|
|
490
|
-
>Reset</a
|
|
491
|
-
>
|
|
492
|
-
<a
|
|
493
|
-
href="#"
|
|
494
|
-
@click=${() => {
|
|
495
|
-
this.renderRoot.querySelector('ox-grist').fetch(true)
|
|
496
|
-
}}
|
|
497
|
-
>Fetch</a
|
|
498
|
-
>
|
|
499
|
-
</div>
|
|
500
|
-
|
|
501
434
|
<ox-record-creator id="add" light-popup>
|
|
502
435
|
<button><mwc-icon>add</mwc-icon></button>
|
|
503
436
|
</ox-record-creator>
|
|
437
|
+
|
|
438
|
+
<button @click=${e => this.grist.cloneSelectedRecords()}><mwc-icon>add</mwc-icon></button>
|
|
504
439
|
</div>
|
|
505
440
|
</ox-grist>
|
|
506
441
|
`
|
package/demo/index.html
CHANGED
|
@@ -145,6 +145,22 @@
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
},
|
|
148
|
+
{
|
|
149
|
+
type: 'gutter',
|
|
150
|
+
gutterName: 'button',
|
|
151
|
+
icon: 'add',
|
|
152
|
+
handlers: {
|
|
153
|
+
click: 'record-copy'
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'gutter',
|
|
158
|
+
gutterName: 'button',
|
|
159
|
+
icon: 'arrow_downward',
|
|
160
|
+
handlers: {
|
|
161
|
+
click: 'move-down'
|
|
162
|
+
}
|
|
163
|
+
},
|
|
148
164
|
{
|
|
149
165
|
type: 'string',
|
|
150
166
|
name: 'id',
|
|
@@ -360,8 +376,8 @@
|
|
|
360
376
|
}
|
|
361
377
|
}
|
|
362
378
|
|
|
363
|
-
get
|
|
364
|
-
return this.
|
|
379
|
+
get grist() {
|
|
380
|
+
return this.renderRoot.querySelector('ox-grist')
|
|
365
381
|
}
|
|
366
382
|
|
|
367
383
|
render() {
|
|
@@ -418,6 +434,8 @@
|
|
|
418
434
|
<ox-record-creator id="add" light-popup>
|
|
419
435
|
<button><mwc-icon>add</mwc-icon></button>
|
|
420
436
|
</ox-record-creator>
|
|
437
|
+
|
|
438
|
+
<button @click=${e => this.grist.cloneSelectedRecords()}><mwc-icon>add</mwc-icon></button>
|
|
421
439
|
</div>
|
|
422
440
|
</ox-grist>
|
|
423
441
|
`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-consumer.js","sourceRoot":"","sources":["../../src/data-consumer.ts"],"names":[],"mappings":"","sourcesContent":["import { FetchHandler, GristData } from './types'\n\nexport interface DataConsumer extends EventTarget {\n data: any\n _data: GristData\n checkDirties(): void\n fetchHandler?: FetchHandler\n showSpinner(): void\n hideSpinner(): void\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-consumer.js","sourceRoot":"","sources":["../../src/data-consumer.ts"],"names":[],"mappings":"","sourcesContent":["import { FetchHandler, GristData } from './types'\n\nexport interface DataConsumer extends EventTarget {\n data: any\n _data: GristData\n mode: 'GRID' | 'LIST' | 'CARD' | 'REPORT'\n checkDirties(): void\n fetchHandler?: FetchHandler\n showSpinner(): void\n hideSpinner(): void\n}\n"]}
|
package/dist/src/data-grist.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { DataList } from './data-list/data-list';
|
|
|
10
10
|
import { FetchHandler, GristConfig, GristData, GristRecord, SortersConfig } from './types';
|
|
11
11
|
export declare class DataGrist extends LitElement implements DataConsumer {
|
|
12
12
|
static styles: import("lit").CSSResult[];
|
|
13
|
-
mode:
|
|
13
|
+
mode: 'GRID' | 'LIST' | 'CARD';
|
|
14
14
|
config: any;
|
|
15
15
|
data: GristData;
|
|
16
16
|
selectedRecords?: GristRecord[];
|
|
@@ -72,4 +72,5 @@ export declare class DataGrist extends LitElement implements DataConsumer {
|
|
|
72
72
|
*/
|
|
73
73
|
reset(): void;
|
|
74
74
|
checkDirties(): void;
|
|
75
|
+
cloneSelectedRecords(): void;
|
|
75
76
|
}
|
package/dist/src/data-grist.js
CHANGED
|
@@ -155,6 +155,12 @@ let DataGrist = class DataGrist extends LitElement {
|
|
|
155
155
|
this.reset();
|
|
156
156
|
}
|
|
157
157
|
if (changes.has('mode')) {
|
|
158
|
+
if (this.mode === 'GRID') {
|
|
159
|
+
this.style.removeProperty('--ox-grist-padding');
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.style.setProperty('--ox-grist-padding', '0');
|
|
163
|
+
}
|
|
158
164
|
needToSetPullToRefresh = true;
|
|
159
165
|
this._setHeadroom();
|
|
160
166
|
}
|
|
@@ -313,6 +319,23 @@ let DataGrist = class DataGrist extends LitElement {
|
|
|
313
319
|
delete record['__dirty__'];
|
|
314
320
|
}
|
|
315
321
|
}
|
|
322
|
+
this._data = { ...this._data };
|
|
323
|
+
}
|
|
324
|
+
cloneSelectedRecords() {
|
|
325
|
+
const records = this.selected || [];
|
|
326
|
+
records.forEach(record => {
|
|
327
|
+
var cloned = {
|
|
328
|
+
__dirty__: '+'
|
|
329
|
+
};
|
|
330
|
+
this._config.columns
|
|
331
|
+
.filter(column => column.record.editable)
|
|
332
|
+
.forEach(column => {
|
|
333
|
+
cloned[column.name] = record[column.name];
|
|
334
|
+
});
|
|
335
|
+
const rowIndex = this._data.records.findIndex(rec => rec === record);
|
|
336
|
+
this._data.records.splice(rowIndex + 1, 0, cloned);
|
|
337
|
+
});
|
|
338
|
+
this.checkDirties();
|
|
316
339
|
}
|
|
317
340
|
};
|
|
318
341
|
DataGrist.styles = [
|
|
@@ -332,6 +355,8 @@ DataGrist.styles = [
|
|
|
332
355
|
/* for pulltorefresh controller */
|
|
333
356
|
position: relative;
|
|
334
357
|
|
|
358
|
+
padding: var(--ox-grist-padding);
|
|
359
|
+
|
|
335
360
|
--mdc-icon-size: var(--grid-record-wide-fontsize);
|
|
336
361
|
}
|
|
337
362
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-grist.js","sourceRoot":"","sources":["../../src/data-grist.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid/data-grid'\nimport './data-list/data-list'\nimport './data-card/data-card'\nimport './empty-note'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, queryAsync, state } from 'lit/decorators.js'\nimport isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\n\nimport Headroom from '@operato/headroom'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { HeadroomStyles, ScrollbarStyles, SpinnerStyles } from '@operato/styles'\n\nimport { buildConfig } from './configure/config-builder'\nimport { ZERO_CONFIG, ZERO_DATA, ZERO_PAGINATION } from './configure/zero-config'\nimport { DataCard } from './data-card/data-card'\nimport { DataConsumer } from './data-consumer'\nimport { DataGrid } from './data-grid/data-grid'\nimport { DataList } from './data-list/data-list'\nimport { DataProvider } from './data-provider'\nimport { FetchHandler, GristConfig, GristData, GristRecord, SortersConfig } from './types'\n\n@customElement('ox-grist')\nexport class DataGrist extends LitElement implements DataConsumer {\n static styles = [\n ScrollbarStyles,\n HeadroomStyles,\n SpinnerStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n min-height: 120px;\n\n overflow: hidden;\n\n /* for pulltorefresh controller */\n position: relative;\n\n --mdc-icon-size: var(--grid-record-wide-fontsize);\n }\n\n #wrap {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n }\n\n ox-grid,\n ox-list {\n flex: 1;\n }\n\n ox-empty-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n slot[name='headroom'] {\n display: block;\n\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n box-sizing: border-box;\n }\n `\n ]\n\n @property() mode: string = 'GRID'\n @property() config: any\n @property() data: GristData = ZERO_DATA\n @property() selectedRecords?: GristRecord[]\n @property({ type: Boolean, attribute: 'auto-fetch' }) autoFetch: boolean = false\n @property() fetchHandler?: FetchHandler\n @property() fetchOptions: any\n\n @state() _data: GristData = ZERO_DATA\n @state() _config: GristConfig = ZERO_CONFIG\n @state() private _showSpinner: boolean = false\n\n private dataProvider?: DataProvider\n private _pulltorefreshHandle?: any\n private _headroom?: Headroom\n private orginPaddingTop?: string\n private originMarginTop?: string\n\n @query('slot[name=headroom]') head!: HTMLElement\n @query('#grist') grist!: DataGrid | DataList | DataCard\n @queryAsync('#wrap') private wrap!: Promise<HTMLElement>\n\n async connectedCallback() {\n super.connectedCallback()\n\n this.dataProvider = new DataProvider(this)\n\n await this.updateComplete\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.dataProvider?.dispose()\n this._resetPullToRefresh()\n }\n\n private _resetPullToRefresh() {\n if (this._pulltorefreshHandle) {\n this._pulltorefreshHandle()\n delete this._pulltorefreshHandle\n }\n }\n\n private async _setPullToRefresh() {\n this._resetPullToRefresh()\n if (this.fetchHandler) {\n this._pulltorefreshHandle = pulltorefresh({\n container: await this.wrap,\n scrollable: this.grist.pullToRefreshTarget,\n refresh: () => {\n return this.fetch(true)\n }\n })\n }\n }\n\n private _setHeadroom() {\n this._headroom?.destroy()\n\n if (this.grist && this.head) {\n const style = getComputedStyle(this.grist)\n\n this.orginPaddingTop = style.paddingTop || '0'\n this.originMarginTop = style.marginTop || '0'\n\n console.log(this.orginPaddingTop, this.originMarginTop)\n\n this._headroom = new Headroom(this.head, {\n scroller: this.grist,\n onTop: () => {\n this.grist.style.paddingTop = this.orginPaddingTop!\n\n this.originMarginTop = this.grist.style.marginTop\n this.grist.style.marginTop = this.head.clientHeight + 'px'\n },\n onNotTop: () => {\n this.grist.style.marginTop = this.originMarginTop!\n\n this.orginPaddingTop = this.grist.style.paddingTop\n this.grist.style.paddingTop = this.head.clientHeight + 'px'\n }\n })\n this._headroom.init()\n }\n }\n\n render() {\n var oops = !this._showSpinner && this._data.records.length == 0\n\n return html`\n ${oops\n ? html`\n <ox-empty-note\n icon=\"list\"\n title=\"EMPTY LIST\"\n description=\"There are no records to be shown\"\n ></ox-empty-note>\n `\n : html``}\n <div id=\"wrap\">\n ${this.mode == 'GRID'\n ? html` <ox-grid id=\"grist\" .config=${this._config} .data=${this._data}> </ox-grid> `\n : this.mode == 'CARD'\n ? html` <ox-card id=\"grist\" .config=${this._config} .data=${this._data}> </ox-card> `\n : html` <ox-list id=\"grist\" .config=${this._config} .data=${this._data}> </ox-list> `}\n </div>\n\n <div id=\"spinner\" ?show=${this._showSpinner}></div>\n\n <slot name=\"headroom\"> </slot>\n `\n }\n\n async fetch(reset = true) {\n if (!this._config) {\n /* avoid to be here */\n console.warn('grist is not configured yet.')\n return\n }\n\n if (reset && this.grist) {\n /*\n * scroll 의 현재위치에 의해서 scroll 이벤트가 발생할 수 있으므로, 이를 방지하기 위해서 스크롤의 위치를 TOP으로 옮긴다.\n * (scroll 이 첫페이지 크기 이상으로 내려가 있는 경우, 첫페이지부터 다시 표시하는 경우에, scroll 이벤트가 발생한다.)\n */\n this.grist.scrollTop = 0\n }\n\n if (this.dataProvider) {\n let { limit: initLimit, page: initPage, infinite } = this._config.pagination || {}\n let { limit = initLimit || ZERO_PAGINATION.limit, page = initPage || ZERO_PAGINATION.page } = this.dataProvider\n\n if (infinite || this.mode !== 'GRID') {\n await this.dataProvider.attach(reset)\n } else {\n await this.dataProvider.fetch({\n limit,\n page,\n sorters: this.sorters,\n sortings: this.sorters\n })\n }\n }\n }\n\n async updated(changes: PropertyValues<this>) {\n var needToSetPullToRefresh = false\n\n if (changes.has('config')) {\n this._config = buildConfig({\n ...this.config\n })\n\n this.dispatchEvent(\n new CustomEvent('config-change', {\n bubbles: true,\n composed: true,\n detail: this._config\n })\n )\n\n this.dataProvider && (this.dataProvider.sorters = this.sorters)\n this.fetch()\n }\n\n if (changes.has('fetchHandler')) {\n this.dataProvider && (this.dataProvider.fetchHandler = this.fetchHandler)\n needToSetPullToRefresh = true\n }\n\n if (changes.has('fetchOptions')) {\n this.dataProvider && (this.dataProvider.fetchOptions = this.fetchOptions)\n }\n\n if (changes.has('data')) {\n this.reset()\n }\n\n if (changes.has('mode')) {\n needToSetPullToRefresh = true\n this._setHeadroom()\n }\n\n if (changes.has('selectedRecords')) {\n var { records } = this.data || []\n var selectedRecords = this.selectedRecords || []\n\n var _records = this._data.records\n\n /* 원본데이타에서 index를 찾아서, 복사본 데이타의 selected를 설정한다. */\n selectedRecords.forEach(selected => {\n var index = records.indexOf(selected)\n var record = _records[index]\n if (record) {\n record['__selected__'] = true\n }\n })\n\n /* update _data property intentionally */\n this.refresh()\n }\n\n if (needToSetPullToRefresh) {\n await this._setPullToRefresh()\n }\n }\n\n get compiledConfig(): GristConfig {\n return this._config\n }\n\n get sorters(): SortersConfig | undefined {\n return this._config?.sorters\n }\n\n get dirtyData(): GristData {\n return (this.grist as any)?.data || {}\n }\n\n get dirtyRecords() {\n var { records = [] } = this.dirtyData\n return records.filter(record => record['__dirty__'])\n }\n\n exportPatchList({ flagName = 'patchFlag', addedFlag = '+', deletedFlag = '-', modifiedFlag = 'M', idField = 'id' }) {\n let dirtyRecords = this.dirtyRecords\n if (!dirtyRecords || dirtyRecords.length == 0) {\n return []\n }\n\n return dirtyRecords.map(record => {\n let flag = record.__dirty__\n\n let patch = {\n [flagName]: flag == 'M' ? modifiedFlag : flag == '+' ? addedFlag : deletedFlag\n }\n\n if (idField in record && record[idField]) {\n patch[idField] = record[idField]\n }\n\n for (let key in record.__dirtyfields__) {\n patch[key] = record[key]\n }\n return patch\n })\n }\n\n exportRecords({ ifSelectedOnly = true, includeHiddenField = true } = {}) {\n let records = ifSelectedOnly ? this.selected : this.data.records\n\n if (ifSelectedOnly && (!records || records.length == 0)) {\n records = this.data.records\n }\n\n let columns = this._config.columns.filter(column => column.type !== 'gutter')\n if (!includeHiddenField) {\n columns = columns.filter(column => !column.hidden)\n }\n let columnNames = columns.map(column => column.name)\n\n return records.map(item => {\n return columnNames.reduce((record, name) => {\n record[name] = item[name]\n return record\n }, {} as any)\n })\n }\n\n get selected() {\n var { records = [] } = this.grist?.data\n return records.filter(record => record['__selected__'])\n }\n\n showSpinner() {\n this._showSpinner = true\n }\n\n hideSpinner() {\n this._showSpinner = false\n }\n\n focus() {\n super.focus()\n\n this.grist.focus()\n }\n\n commit() {\n var { page, total, limit, records } = this.grist.data\n\n this.data = {\n page,\n total,\n limit,\n records: records.map(record => {\n var copied = {\n ...record\n }\n\n delete copied.__seq__\n delete copied.__dirty__\n delete copied.__selected__\n delete copied.__changes__\n delete copied.__dirtyfields__\n delete copied.__origin__\n\n return copied\n })\n }\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh() {\n this._data = { ...this._data }\n }\n\n /**\n * This method cancels all changes in the dirty state before being reflected in the data.\n *\n * @method\n */\n reset() {\n var {\n limit = ZERO_PAGINATION.limit,\n page = ZERO_PAGINATION.page,\n total = ZERO_PAGINATION.total,\n records = []\n } = this.data || ZERO_PAGINATION\n\n /* 원본 데이타를 남기고, 복사본(_data)을 사용한다. */\n records = records.map((record, idx) => {\n return {\n ...record,\n __seq__: this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1,\n __origin__: record\n }\n })\n\n this._data = {\n limit,\n page,\n total,\n records\n }\n }\n\n checkDirties() {\n const records = this.dirtyRecords\n const { columns = [] } = this._config || {}\n\n for (var record of records || []) {\n var origin = record['__origin__'] || {}\n\n var dirtyFields = (record['__dirtyfields__'] = columns\n .filter(column => column.type !== 'gutter' && !isEqual(origin[column.name], record[column.name]))\n .reduce((sum, column) => {\n var name = column.name\n\n sum[name] = {\n before: origin[name],\n after: record[name]\n }\n\n return sum\n }, {} as any))\n\n if (record['__dirty__'] == 'M' && isEmpty(dirtyFields)) {\n delete record['__dirty__']\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-grist.js","sourceRoot":"","sources":["../../src/data-grist.ts"],"names":[],"mappings":";AAAA,OAAO,uBAAuB,CAAA;AAC9B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,cAAc,CAAA;AAErB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,OAAO,MAAM,mBAAmB,CAAA;AACvC,OAAO,OAAO,MAAM,mBAAmB,CAAA;AAEvC,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAKjF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAI9C,IAAa,SAAS,GAAtB,MAAa,SAAU,SAAQ,UAAU;IAAzC;;QAwDc,SAAI,GAA6B,MAAM,CAAA;QAEvC,SAAI,GAAc,SAAS,CAAA;QAEe,cAAS,GAAY,KAAK,CAAA;QAIvE,UAAK,GAAc,SAAS,CAAA;QAC5B,YAAO,GAAgB,WAAW,CAAA;QAC1B,iBAAY,GAAY,KAAK,CAAA;IA6YhD,CAAC;IAjYC,KAAK,CAAC,iBAAiB;QACrB,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAEzB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;QAE1C,MAAM,IAAI,CAAC,cAAc,CAAA;IAC3B,CAAC;IAED,oBAAoB;;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAE5B,MAAA,IAAI,CAAC,YAAY,0CAAE,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAA;YAC3B,OAAO,IAAI,CAAC,oBAAoB,CAAA;SACjC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC;gBACxC,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI;gBAC1B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB;gBAC1C,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACzB,CAAC;aACF,CAAC,CAAA;SACH;IACH,CAAC;IAEO,YAAY;;QAClB,MAAA,IAAI,CAAC,SAAS,0CAAE,OAAO,EAAE,CAAA;QAEzB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAA;YAC9C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,CAAA;YAE7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;YAEvD,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;gBACvC,QAAQ,EAAE,IAAI,CAAC,KAAK;gBACpB,KAAK,EAAE,GAAG,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAgB,CAAA;oBAEnD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAA;oBACjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;gBAC5D,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,eAAgB,CAAA;oBAElD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAA;oBAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;gBAC7D,CAAC;aACF,CAAC,CAAA;YACF,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;SACtB;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QAE/D,OAAO,IAAI,CAAA;QACP,IAAI;YACJ,CAAC,CAAC,IAAI,CAAA;;;;;;WAMH;YACH,CAAC,CAAC,IAAI,CAAA,EAAE;;UAEN,IAAI,CAAC,IAAI,IAAI,MAAM;YACnB,CAAC,CAAC,IAAI,CAAA,gCAAgC,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,eAAe;YACrF,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM;gBACrB,CAAC,CAAC,IAAI,CAAA,gCAAgC,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,eAAe;gBACrF,CAAC,CAAC,IAAI,CAAA,gCAAgC,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,KAAK,eAAe;;;gCAG/D,IAAI,CAAC,YAAY;;;KAG5C,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,sBAAsB;YACtB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;YAC5C,OAAM;SACP;QAED,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;YACvB;;;eAGG;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAA;SACzB;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;YAClF,IAAI,EAAE,KAAK,GAAG,SAAS,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAA;YAE/G,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBACpC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;aACtC;iBAAM;gBACL,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC5B,KAAK;oBACL,IAAI;oBACJ,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,QAAQ,EAAE,IAAI,CAAC,OAAO;iBACvB,CAAC,CAAA;aACH;SACF;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA6B;QACzC,IAAI,sBAAsB,GAAG,KAAK,CAAA;QAElC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACzB,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;gBACzB,GAAG,IAAI,CAAC,MAAM;aACf,CAAC,CAAA;YAEF,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,eAAe,EAAE;gBAC/B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI,CAAC,OAAO;aACrB,CAAC,CACH,CAAA;YAED,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;YAC/D,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;YACzE,sBAAsB,GAAG,IAAI,CAAA;SAC9B;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;YAC/B,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;SAC1E;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;gBACxB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAA;aAChD;iBAAM;gBACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;aAClD;YAED,sBAAsB,GAAG,IAAI,CAAA;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAA;SACpB;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE;YAClC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;YACjC,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAA;YAEhD,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;YAEjC,kDAAkD;YAClD,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACjC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAC5B,IAAI,MAAM,EAAE;oBACV,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAA;iBAC9B;YACH,CAAC,CAAC,CAAA;YAEF,yCAAyC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAA;SACf;QAED,IAAI,sBAAsB,EAAE;YAC1B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;SAC/B;IACH,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,OAAO;;QACT,OAAO,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,CAAA;IAC9B,CAAC;IAED,IAAI,SAAS;;QACX,OAAO,CAAA,MAAC,IAAI,CAAC,KAAa,0CAAE,IAAI,KAAI,EAAE,CAAA;IACxC,CAAC;IAED,IAAI,YAAY;QACd,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,eAAe,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,SAAS,GAAG,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE;QAChH,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACpC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7C,OAAO,EAAE,CAAA;SACV;QAED,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;YAE3B,IAAI,KAAK,GAAG;gBACV,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;aAC/E,CAAA;YAED,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;gBACxC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;aACjC;YAED,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE;gBACtC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;aACzB;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,EAAE,kBAAkB,GAAG,IAAI,EAAE,GAAG,EAAE;QACrE,IAAI,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QAEhE,IAAI,cAAc,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE;YACvD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;SAC5B;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAC7E,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;SACnD;QACD,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEpD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBACzB,OAAO,MAAM,CAAA;YACf,CAAC,EAAE,EAAS,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,QAAQ;;QACV,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAA;QACvC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,MAAM;QACJ,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAErD,IAAI,CAAC,IAAI,GAAG;YACV,IAAI;YACJ,KAAK;YACL,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAI,MAAM,GAAG;oBACX,GAAG,MAAM;iBACV,CAAA;gBAED,OAAO,MAAM,CAAC,OAAO,CAAA;gBACrB,OAAO,MAAM,CAAC,SAAS,CAAA;gBACvB,OAAO,MAAM,CAAC,YAAY,CAAA;gBAC1B,OAAO,MAAM,CAAC,WAAW,CAAA;gBACzB,OAAO,MAAM,CAAC,eAAe,CAAA;gBAC7B,OAAO,MAAM,CAAC,UAAU,CAAA;gBAExB,OAAO,MAAM,CAAA;YACf,CAAC,CAAC;SACH,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,EACF,KAAK,GAAG,eAAe,CAAC,KAAK,EAC7B,IAAI,GAAG,eAAe,CAAC,IAAI,EAC3B,KAAK,GAAG,eAAe,CAAC,KAAK,EAC7B,OAAO,GAAG,EAAE,EACb,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAA;QAEhC,oCAAoC;QACpC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpC,OAAO;gBACL,GAAG,MAAM;gBACT,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBACrE,UAAU,EAAE,MAAM;aACnB,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,GAAG;YACX,KAAK;YACL,IAAI;YACJ,KAAK;YACL,OAAO;SACR,CAAA;IACH,CAAC;IAED,YAAY;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAA;QACjC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAE3C,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE;YAChC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YAEvC,IAAI,WAAW,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO;iBACnD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;iBAChG,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACtB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;gBAEtB,GAAG,CAAC,IAAI,CAAC,GAAG;oBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;oBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;iBACpB,CAAA;gBAED,OAAO,GAAG,CAAA;YACZ,CAAC,EAAE,EAAS,CAAC,CAAC,CAAA;YAEhB,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE;gBACtD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAA;aAC3B;SACF;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,oBAAoB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAK,EAAoB,CAAA;QAEtD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,MAAM,GAAG;gBACX,SAAS,EAAE,GAAG;aACA,CAAA;YAEhB,IAAI,CAAC,OAAO,CAAC,OAAO;iBACjB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACxC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAA;YACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YAEpE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;CACF,CAAA;AA9cQ,gBAAM,GAAG;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgDF;CACF,CAAA;AAEW;IAAX,QAAQ,EAAE;uCAAwC;AACvC;IAAX,QAAQ,EAAE;yCAAY;AACX;IAAX,QAAQ,EAAE;uCAA4B;AAC3B;IAAX,QAAQ,EAAE;kDAAgC;AACW;IAArD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;4CAA2B;AACpE;IAAX,QAAQ,EAAE;+CAA4B;AAC3B;IAAX,QAAQ,EAAE;+CAAkB;AAEpB;IAAR,KAAK,EAAE;wCAA6B;AAC5B;IAAR,KAAK,EAAE;0CAAmC;AAClC;IAAR,KAAK,EAAE;+CAAsC;AAQhB;IAA7B,KAAK,CAAC,qBAAqB,CAAC;uCAAmB;AAC/B;IAAhB,KAAK,CAAC,QAAQ,CAAC;wCAAuC;AAClC;IAApB,UAAU,CAAC,OAAO,CAAC;uCAAoC;AA5E7C,SAAS;IADrB,aAAa,CAAC,UAAU,CAAC;GACb,SAAS,CA+crB;SA/cY,SAAS","sourcesContent":["import './data-grid/data-grid'\nimport './data-list/data-list'\nimport './data-card/data-card'\nimport './empty-note'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, queryAsync, state } from 'lit/decorators.js'\nimport isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\n\nimport Headroom from '@operato/headroom'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { HeadroomStyles, ScrollbarStyles, SpinnerStyles } from '@operato/styles'\n\nimport { buildConfig } from './configure/config-builder'\nimport { ZERO_CONFIG, ZERO_DATA, ZERO_PAGINATION } from './configure/zero-config'\nimport { DataCard } from './data-card/data-card'\nimport { DataConsumer } from './data-consumer'\nimport { DataGrid } from './data-grid/data-grid'\nimport { DataList } from './data-list/data-list'\nimport { DataProvider } from './data-provider'\nimport { FetchHandler, GristConfig, GristData, GristRecord, SortersConfig } from './types'\n\n@customElement('ox-grist')\nexport class DataGrist extends LitElement implements DataConsumer {\n static styles = [\n ScrollbarStyles,\n HeadroomStyles,\n SpinnerStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n min-height: 120px;\n\n overflow: hidden;\n\n /* for pulltorefresh controller */\n position: relative;\n\n padding: var(--ox-grist-padding);\n\n --mdc-icon-size: var(--grid-record-wide-fontsize);\n }\n\n #wrap {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n }\n\n ox-grid,\n ox-list {\n flex: 1;\n }\n\n ox-empty-note {\n display: block;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n\n slot[name='headroom'] {\n display: block;\n\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n box-sizing: border-box;\n }\n `\n ]\n\n @property() mode: 'GRID' | 'LIST' | 'CARD' = 'GRID'\n @property() config: any\n @property() data: GristData = ZERO_DATA\n @property() selectedRecords?: GristRecord[]\n @property({ type: Boolean, attribute: 'auto-fetch' }) autoFetch: boolean = false\n @property() fetchHandler?: FetchHandler\n @property() fetchOptions: any\n\n @state() _data: GristData = ZERO_DATA\n @state() _config: GristConfig = ZERO_CONFIG\n @state() private _showSpinner: boolean = false\n\n private dataProvider?: DataProvider\n private _pulltorefreshHandle?: any\n private _headroom?: Headroom\n private orginPaddingTop?: string\n private originMarginTop?: string\n\n @query('slot[name=headroom]') head!: HTMLElement\n @query('#grist') grist!: DataGrid | DataList | DataCard\n @queryAsync('#wrap') private wrap!: Promise<HTMLElement>\n\n async connectedCallback() {\n super.connectedCallback()\n\n this.dataProvider = new DataProvider(this)\n\n await this.updateComplete\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.dataProvider?.dispose()\n this._resetPullToRefresh()\n }\n\n private _resetPullToRefresh() {\n if (this._pulltorefreshHandle) {\n this._pulltorefreshHandle()\n delete this._pulltorefreshHandle\n }\n }\n\n private async _setPullToRefresh() {\n this._resetPullToRefresh()\n if (this.fetchHandler) {\n this._pulltorefreshHandle = pulltorefresh({\n container: await this.wrap,\n scrollable: this.grist.pullToRefreshTarget,\n refresh: () => {\n return this.fetch(true)\n }\n })\n }\n }\n\n private _setHeadroom() {\n this._headroom?.destroy()\n\n if (this.grist && this.head) {\n const style = getComputedStyle(this.grist)\n\n this.orginPaddingTop = style.paddingTop || '0'\n this.originMarginTop = style.marginTop || '0'\n\n console.log(this.orginPaddingTop, this.originMarginTop)\n\n this._headroom = new Headroom(this.head, {\n scroller: this.grist,\n onTop: () => {\n this.grist.style.paddingTop = this.orginPaddingTop!\n\n this.originMarginTop = this.grist.style.marginTop\n this.grist.style.marginTop = this.head.clientHeight + 'px'\n },\n onNotTop: () => {\n this.grist.style.marginTop = this.originMarginTop!\n\n this.orginPaddingTop = this.grist.style.paddingTop\n this.grist.style.paddingTop = this.head.clientHeight + 'px'\n }\n })\n this._headroom.init()\n }\n }\n\n render() {\n var oops = !this._showSpinner && this._data.records.length == 0\n\n return html`\n ${oops\n ? html`\n <ox-empty-note\n icon=\"list\"\n title=\"EMPTY LIST\"\n description=\"There are no records to be shown\"\n ></ox-empty-note>\n `\n : html``}\n <div id=\"wrap\">\n ${this.mode == 'GRID'\n ? html` <ox-grid id=\"grist\" .config=${this._config} .data=${this._data}> </ox-grid> `\n : this.mode == 'CARD'\n ? html` <ox-card id=\"grist\" .config=${this._config} .data=${this._data}> </ox-card> `\n : html` <ox-list id=\"grist\" .config=${this._config} .data=${this._data}> </ox-list> `}\n </div>\n\n <div id=\"spinner\" ?show=${this._showSpinner}></div>\n\n <slot name=\"headroom\"> </slot>\n `\n }\n\n async fetch(reset = true) {\n if (!this._config) {\n /* avoid to be here */\n console.warn('grist is not configured yet.')\n return\n }\n\n if (reset && this.grist) {\n /*\n * scroll 의 현재위치에 의해서 scroll 이벤트가 발생할 수 있으므로, 이를 방지하기 위해서 스크롤의 위치를 TOP으로 옮긴다.\n * (scroll 이 첫페이지 크기 이상으로 내려가 있는 경우, 첫페이지부터 다시 표시하는 경우에, scroll 이벤트가 발생한다.)\n */\n this.grist.scrollTop = 0\n }\n\n if (this.dataProvider) {\n let { limit: initLimit, page: initPage, infinite } = this._config.pagination || {}\n let { limit = initLimit || ZERO_PAGINATION.limit, page = initPage || ZERO_PAGINATION.page } = this.dataProvider\n\n if (infinite || this.mode !== 'GRID') {\n await this.dataProvider.attach(reset)\n } else {\n await this.dataProvider.fetch({\n limit,\n page,\n sorters: this.sorters,\n sortings: this.sorters\n })\n }\n }\n }\n\n async updated(changes: PropertyValues<this>) {\n var needToSetPullToRefresh = false\n\n if (changes.has('config')) {\n this._config = buildConfig({\n ...this.config\n })\n\n this.dispatchEvent(\n new CustomEvent('config-change', {\n bubbles: true,\n composed: true,\n detail: this._config\n })\n )\n\n this.dataProvider && (this.dataProvider.sorters = this.sorters)\n this.fetch()\n }\n\n if (changes.has('fetchHandler')) {\n this.dataProvider && (this.dataProvider.fetchHandler = this.fetchHandler)\n needToSetPullToRefresh = true\n }\n\n if (changes.has('fetchOptions')) {\n this.dataProvider && (this.dataProvider.fetchOptions = this.fetchOptions)\n }\n\n if (changes.has('data')) {\n this.reset()\n }\n\n if (changes.has('mode')) {\n if (this.mode === 'GRID') {\n this.style.removeProperty('--ox-grist-padding')\n } else {\n this.style.setProperty('--ox-grist-padding', '0')\n }\n\n needToSetPullToRefresh = true\n this._setHeadroom()\n }\n\n if (changes.has('selectedRecords')) {\n var { records } = this.data || []\n var selectedRecords = this.selectedRecords || []\n\n var _records = this._data.records\n\n /* 원본데이타에서 index를 찾아서, 복사본 데이타의 selected를 설정한다. */\n selectedRecords.forEach(selected => {\n var index = records.indexOf(selected)\n var record = _records[index]\n if (record) {\n record['__selected__'] = true\n }\n })\n\n /* update _data property intentionally */\n this.refresh()\n }\n\n if (needToSetPullToRefresh) {\n await this._setPullToRefresh()\n }\n }\n\n get compiledConfig(): GristConfig {\n return this._config\n }\n\n get sorters(): SortersConfig | undefined {\n return this._config?.sorters\n }\n\n get dirtyData(): GristData {\n return (this.grist as any)?.data || {}\n }\n\n get dirtyRecords() {\n var { records = [] } = this.dirtyData\n return records.filter(record => record['__dirty__'])\n }\n\n exportPatchList({ flagName = 'patchFlag', addedFlag = '+', deletedFlag = '-', modifiedFlag = 'M', idField = 'id' }) {\n let dirtyRecords = this.dirtyRecords\n if (!dirtyRecords || dirtyRecords.length == 0) {\n return []\n }\n\n return dirtyRecords.map(record => {\n let flag = record.__dirty__\n\n let patch = {\n [flagName]: flag == 'M' ? modifiedFlag : flag == '+' ? addedFlag : deletedFlag\n }\n\n if (idField in record && record[idField]) {\n patch[idField] = record[idField]\n }\n\n for (let key in record.__dirtyfields__) {\n patch[key] = record[key]\n }\n return patch\n })\n }\n\n exportRecords({ ifSelectedOnly = true, includeHiddenField = true } = {}) {\n let records = ifSelectedOnly ? this.selected : this.data.records\n\n if (ifSelectedOnly && (!records || records.length == 0)) {\n records = this.data.records\n }\n\n let columns = this._config.columns.filter(column => column.type !== 'gutter')\n if (!includeHiddenField) {\n columns = columns.filter(column => !column.hidden)\n }\n let columnNames = columns.map(column => column.name)\n\n return records.map(item => {\n return columnNames.reduce((record, name) => {\n record[name] = item[name]\n return record\n }, {} as any)\n })\n }\n\n get selected() {\n var { records = [] } = this.grist?.data\n return records.filter(record => record['__selected__'])\n }\n\n showSpinner() {\n this._showSpinner = true\n }\n\n hideSpinner() {\n this._showSpinner = false\n }\n\n focus() {\n super.focus()\n\n this.grist.focus()\n }\n\n commit() {\n var { page, total, limit, records } = this.grist.data\n\n this.data = {\n page,\n total,\n limit,\n records: records.map(record => {\n var copied = {\n ...record\n }\n\n delete copied.__seq__\n delete copied.__dirty__\n delete copied.__selected__\n delete copied.__changes__\n delete copied.__dirtyfields__\n delete copied.__origin__\n\n return copied\n })\n }\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh() {\n this._data = { ...this._data }\n }\n\n /**\n * This method cancels all changes in the dirty state before being reflected in the data.\n *\n * @method\n */\n reset() {\n var {\n limit = ZERO_PAGINATION.limit,\n page = ZERO_PAGINATION.page,\n total = ZERO_PAGINATION.total,\n records = []\n } = this.data || ZERO_PAGINATION\n\n /* 원본 데이타를 남기고, 복사본(_data)을 사용한다. */\n records = records.map((record, idx) => {\n return {\n ...record,\n __seq__: this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1,\n __origin__: record\n }\n })\n\n this._data = {\n limit,\n page,\n total,\n records\n }\n }\n\n checkDirties() {\n const records = this.dirtyRecords\n const { columns = [] } = this._config || {}\n\n for (var record of records || []) {\n var origin = record['__origin__'] || {}\n\n var dirtyFields = (record['__dirtyfields__'] = columns\n .filter(column => column.type !== 'gutter' && !isEqual(origin[column.name], record[column.name]))\n .reduce((sum, column) => {\n var name = column.name\n\n sum[name] = {\n before: origin[name],\n after: record[name]\n }\n\n return sum\n }, {} as any))\n\n if (record['__dirty__'] == 'M' && isEmpty(dirtyFields)) {\n delete record['__dirty__']\n }\n }\n\n this._data = { ...this._data }\n }\n\n cloneSelectedRecords() {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n var cloned = {\n __dirty__: '+'\n } as GristRecord\n\n this._config.columns\n .filter(column => column.record.editable)\n .forEach(column => {\n cloned[column.name] = record[column.name]\n })\n const rowIndex = this._data.records.findIndex(rec => rec === record)\n\n this._data.records.splice(rowIndex + 1, 0, cloned)\n })\n\n this.checkDirties()\n }\n}\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { FilterConfigObject, SortersConfig } from '
|
|
1
|
+
import { FilterConfigObject, GristRecord, SorterConfig, SortersConfig } from './types';
|
|
2
2
|
import { DataConsumer } from './data-consumer';
|
|
3
|
-
import { GristRecord, SorterConfig } from './types';
|
|
4
3
|
export declare class DataProvider {
|
|
5
4
|
page: number;
|
|
6
5
|
limit: number;
|
|
@@ -54,7 +54,11 @@ export class DataProvider {
|
|
|
54
54
|
this.fetch({ limit });
|
|
55
55
|
}
|
|
56
56
|
onSortersChange(e) {
|
|
57
|
+
var _a;
|
|
57
58
|
this.sorters = e.detail;
|
|
59
|
+
if (((_a = this.consumer) === null || _a === void 0 ? void 0 : _a.mode) !== 'GRID') {
|
|
60
|
+
this.page = 0;
|
|
61
|
+
}
|
|
58
62
|
this.fetch();
|
|
59
63
|
}
|
|
60
64
|
onFiltersChange(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-provider.js","sourceRoot":"","sources":["../../src/data-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { FilterConfigObject, SortersConfig } from '.'\nimport { ZERO_RECORDS } from './configure/zero-config'\nimport { DataConsumer } from './data-consumer'\nimport { FetchHandler, FetchOption, GristRecord, SorterConfig } from './types'\n\nfunction EMPTY_FETCHHANDLER() {\n return {\n total: 0,\n records: []\n }\n}\n\nfunction _calculateTotalPage(limit: number, total: number) {\n /*\n * total page는 1이상이어야 한다.\n * 즉, 레코드가 하나도 없어도, 페이지 갯수는 1이 되어야 한다.\n */\n return Math.max(1, Math.ceil(total / limit))\n}\n\nexport class DataProvider {\n page: number = 1\n limit: number = 20\n total: number = 0\n records: GristRecord[] = []\n\n private consumer?: DataConsumer\n private _fetchHandler?: FetchHandler\n private _sorters?: SorterConfig[]\n private _filters?: FilterConfigObject[]\n\n private _pageChangeHandler: EventListener = this.onPageChange.bind(this)\n private _limitChangeHandler = this.onLimitChange.bind(this)\n private _sortersChangeHandler = this.onSortersChange.bind(this)\n private _filtersChangeHandler = this.onFiltersChange.bind(this)\n private _recordChangeHandler = this.onRecordChange.bind(this)\n private _attachPageHandler: EventListener = this.onAttachPage.bind(this)\n\n private _fetchHandlerWrap: any\n private _fetchOptions: any\n\n constructor(consumer: DataConsumer) {\n this.consumer = consumer\n\n this.fetchHandler = consumer.fetchHandler\n\n this.consumer.addEventListener('attach-page', this._attachPageHandler)\n this.consumer.addEventListener('page-change', this._pageChangeHandler)\n this.consumer.addEventListener('limit-change', this._limitChangeHandler)\n this.consumer.addEventListener('sorters-change', this._sortersChangeHandler)\n this.consumer.addEventListener('filters-change', this._filtersChangeHandler)\n this.consumer.addEventListener('record-change', this._recordChangeHandler)\n }\n\n dispose() {\n this.consumer?.removeEventListener('attach-page', this._attachPageHandler)\n this.consumer?.removeEventListener('page-change', this._pageChangeHandler)\n this.consumer?.removeEventListener('limit-change', this._limitChangeHandler)\n this.consumer?.removeEventListener('sorters-change', this._sortersChangeHandler)\n this.consumer?.removeEventListener('filters-change', this._filtersChangeHandler)\n this.consumer?.removeEventListener('record-change', this._recordChangeHandler)\n }\n\n onAttachPage() {\n this.attach()\n }\n\n onPageChange(e: Event) {\n var page = (e as CustomEvent).detail\n this.fetch({ page })\n }\n\n onLimitChange(e: Event) {\n var limit = (e as CustomEvent).detail\n this.fetch({ limit })\n }\n\n onSortersChange(e: Event) {\n this.sorters = (e as CustomEvent).detail\n this.fetch()\n }\n\n onFiltersChange(e: Event) {\n this.filters = (e as CustomEvent).detail\n this.fetch()\n }\n\n onRecordChange(e: Event) {\n this.consumer?.checkDirties()\n }\n\n get fetchOptions() {\n return this._fetchOptions\n }\n\n set fetchOptions(fetchOptions) {\n this._fetchOptions = fetchOptions\n\n this.fetch()\n }\n\n get fetchHandler() {\n if (!this._fetchHandlerWrap) {\n this._fetchHandlerWrap = async (options: FetchOption) => {\n if (!this._fetchHandler) {\n return\n }\n\n try {\n this.consumer?.showSpinner()\n return await (this._fetchHandler || EMPTY_FETCHHANDLER)(options)\n } finally {\n this.consumer?.hideSpinner()\n }\n }\n }\n\n return this._fetchHandlerWrap\n }\n\n set fetchHandler(fetchHandler) {\n this._fetchHandler = fetchHandler\n delete this._fetchHandlerWrap\n }\n\n get sorters() {\n return this._sorters\n }\n\n set sorters(sorters) {\n this._sorters = sorters\n }\n\n /* alias for sorters */\n get sortings() {\n return this._sorters\n }\n\n set sortings(sorters) {\n this._sorters = sorters\n }\n\n get filters() {\n return this._filters\n }\n\n set filters(filters) {\n this._filters = filters\n }\n\n async attach(reset = false) {\n var { page = 0, limit = 20 } = this\n\n /*\n * page는 0 based index가 아님에 주의한다.\n * 즉, page 값이 1 은 첫페이지를 의미한다.\n */\n if (reset) {\n this.records = ZERO_RECORDS\n page = 1\n } else {\n /* attach의 경우는 grist data의 변경상태를 유지하기 위해서, grist._data 를 기반으로 한다. */\n this.records = this.consumer?._data ? this.consumer._data.records : ZERO_RECORDS\n page = page + 1\n }\n\n return this._update(\n {\n /* fetch에서 limit과 page를 제공하지 않는 경우를 대비함. */\n limit,\n page,\n ...(await this.fetchHandler.call(null, {\n page,\n limit,\n sorters: this.sorters,\n options: this.fetchOptions\n }))\n },\n reset\n )\n }\n\n async fetch({\n page = this.page,\n limit = this.limit,\n sorters,\n sortings,\n filters\n }: {\n page?: number\n limit?: number\n sorters?: SortersConfig\n sortings?: SortersConfig\n filters?: FilterConfigObject[]\n } = {}) {\n /* sortings property is only for things-factory server-side list parameter convention */\n /* fetchHandler should reture { page, limit, total, records } */\n this.records = ZERO_RECORDS\n\n sorters = sorters || sortings || this.sorters\n filters = filters || this.filters\n\n this.sorters = sorters\n\n return this._update({\n /* fetch에서 limit과 page를 제공하지 않는 경우를 대비함. */\n limit,\n page,\n ...(await this.fetchHandler.call(null, {\n page,\n limit,\n sorters,\n sortings: sorters,\n filters,\n options: this.fetchOptions\n }))\n })\n }\n\n async _update(\n {\n page,\n limit,\n total,\n records\n }: {\n page: number\n limit: number\n total: number\n records: GristRecord[]\n },\n reset?: boolean\n ): Promise<void> {\n // total을 감안해서 page가 최대값을 넘지 않도록 한다.\n var maxpage = _calculateTotalPage(limit, total)\n if (maxpage < page) {\n return await this.fetch({ page: maxpage, limit })\n }\n // CONFIRM-ME 위 코드에 대한 설명이 필요함!!!.\n\n // page와 limit이 없는 경우 records 검사 전에 초기화\n this.page = this.page || page\n this.limit = this.limit || limit\n\n if (!records) {\n return\n }\n\n if (this.records === ZERO_RECORDS) {\n this.records = records\n } else if (this.page < page) {\n // attach인 경우에는 records를 append한다.\n this.records = [...this.records, ...records]\n } else {\n return\n }\n\n this.limit = limit\n this.total = total\n this.page = page\n\n this.consumer &&\n (this.consumer.data = {\n page: this.page,\n limit: this.limit,\n total: this.total,\n\n records: this.records\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-provider.js","sourceRoot":"","sources":["../../src/data-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,SAAS,kBAAkB;IACzB,OAAO;QACL,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,EAAE;KACZ,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa,EAAE,KAAa;IACvD;;;OAGG;IACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,OAAO,YAAY;IAqBvB,YAAY,QAAsB;QApBlC,SAAI,GAAW,CAAC,CAAA;QAChB,UAAK,GAAW,EAAE,CAAA;QAClB,UAAK,GAAW,CAAC,CAAA;QACjB,YAAO,GAAkB,EAAE,CAAA;QAOnB,uBAAkB,GAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChE,wBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnD,0BAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,0BAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,yBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACrD,uBAAkB,GAAkB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAMtE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAExB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;QAEzC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACtE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACtE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QACxE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAC5E,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAC5E,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAC5E,CAAC;IAED,OAAO;;QACL,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC1E,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC1E,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC5E,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAChF,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAA;QAChF,MAAA,IAAI,CAAC,QAAQ,0CAAE,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;IAChF,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC;IAED,YAAY,CAAC,CAAQ;QACnB,IAAI,IAAI,GAAI,CAAiB,CAAC,MAAM,CAAA;QACpC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IACtB,CAAC;IAED,aAAa,CAAC,CAAQ;QACpB,IAAI,KAAK,GAAI,CAAiB,CAAC,MAAM,CAAA;QACrC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IACvB,CAAC;IAED,eAAe,CAAC,CAAQ;;QACtB,IAAI,CAAC,OAAO,GAAI,CAAiB,CAAC,MAAM,CAAA;QAExC,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,MAAK,MAAM,EAAE;YAClC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;SACd;QAED,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,eAAe,CAAC,CAAQ;QACtB,IAAI,CAAC,OAAO,GAAI,CAAiB,CAAC,MAAM,CAAA;QACxC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,cAAc,CAAC,CAAQ;;QACrB,MAAA,IAAI,CAAC,QAAQ,0CAAE,YAAY,EAAE,CAAA;IAC/B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,IAAI,YAAY,CAAC,YAAY;QAC3B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QAEjC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,IAAI,YAAY;QACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,EAAE,OAAoB,EAAE,EAAE;;gBACtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;oBACvB,OAAM;iBACP;gBAED,IAAI;oBACF,MAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,EAAE,CAAA;oBAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAA;iBACjE;wBAAS;oBACR,MAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,EAAE,CAAA;iBAC7B;YACH,CAAC,CAAA;SACF;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IAED,IAAI,YAAY,CAAC,YAAY;QAC3B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAA;QACjC,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,uBAAuB;IACvB,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO;QAClB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,IAAI,OAAO,CAAC,OAAO;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK;;QACxB,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;QAEnC;;;WAGG;QACH,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,OAAO,GAAG,YAAY,CAAA;YAC3B,IAAI,GAAG,CAAC,CAAA;SACT;aAAM;YACL,oEAAoE;YACpE,IAAI,CAAC,OAAO,GAAG,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,KAAK,EAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAA;YAChF,IAAI,GAAG,IAAI,GAAG,CAAC,CAAA;SAChB;QAED,OAAO,IAAI,CAAC,OAAO,CACjB;YACE,2CAA2C;YAC3C,KAAK;YACL,IAAI;YACJ,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;gBACrC,IAAI;gBACJ,KAAK;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,OAAO,EAAE,IAAI,CAAC,YAAY;aAC3B,CAAC,CAAC;SACJ,EACD,KAAK,CACN,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,EACV,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,KAAK,EAClB,OAAO,EACP,QAAQ,EACR,OAAO,KAOL,EAAE;QACJ,wFAAwF;QACxF,gEAAgE;QAChE,IAAI,CAAC,OAAO,GAAG,YAAY,CAAA;QAE3B,OAAO,GAAG,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAA;QAC7C,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,OAAO,CAAA;QAEjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC;YAClB,2CAA2C;YAC3C,KAAK;YACL,IAAI;YACJ,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;gBACrC,IAAI;gBACJ,KAAK;gBACL,OAAO;gBACP,QAAQ,EAAE,OAAO;gBACjB,OAAO;gBACP,OAAO,EAAE,IAAI,CAAC,YAAY;aAC3B,CAAC,CAAC;SACJ,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CACX,EACE,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EAMR,EACD,KAAe;QAEf,oCAAoC;QACpC,IAAI,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC/C,IAAI,OAAO,GAAG,IAAI,EAAE;YAClB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;SAClD;QACD,kCAAkC;QAElC,uCAAuC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAA;QAEhC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAM;SACP;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,EAAE;YACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;SACvB;aAAM,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;YAC3B,kCAAkC;YAClC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,CAAA;SAC7C;aAAM;YACL,OAAM;SACP;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,IAAI,CAAC,QAAQ;YACX,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG;gBACpB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;gBAEjB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAA;IACN,CAAC;CACF","sourcesContent":["import { FetchHandler, FetchOption, FilterConfigObject, GristRecord, SorterConfig, SortersConfig } from './types'\n\nimport { DataConsumer } from './data-consumer'\nimport { ZERO_RECORDS } from './configure/zero-config'\n\nfunction EMPTY_FETCHHANDLER() {\n return {\n total: 0,\n records: []\n }\n}\n\nfunction _calculateTotalPage(limit: number, total: number) {\n /*\n * total page는 1이상이어야 한다.\n * 즉, 레코드가 하나도 없어도, 페이지 갯수는 1이 되어야 한다.\n */\n return Math.max(1, Math.ceil(total / limit))\n}\n\nexport class DataProvider {\n page: number = 1\n limit: number = 20\n total: number = 0\n records: GristRecord[] = []\n\n private consumer?: DataConsumer\n private _fetchHandler?: FetchHandler\n private _sorters?: SorterConfig[]\n private _filters?: FilterConfigObject[]\n\n private _pageChangeHandler: EventListener = this.onPageChange.bind(this)\n private _limitChangeHandler = this.onLimitChange.bind(this)\n private _sortersChangeHandler = this.onSortersChange.bind(this)\n private _filtersChangeHandler = this.onFiltersChange.bind(this)\n private _recordChangeHandler = this.onRecordChange.bind(this)\n private _attachPageHandler: EventListener = this.onAttachPage.bind(this)\n\n private _fetchHandlerWrap: any\n private _fetchOptions: any\n\n constructor(consumer: DataConsumer) {\n this.consumer = consumer\n\n this.fetchHandler = consumer.fetchHandler\n\n this.consumer.addEventListener('attach-page', this._attachPageHandler)\n this.consumer.addEventListener('page-change', this._pageChangeHandler)\n this.consumer.addEventListener('limit-change', this._limitChangeHandler)\n this.consumer.addEventListener('sorters-change', this._sortersChangeHandler)\n this.consumer.addEventListener('filters-change', this._filtersChangeHandler)\n this.consumer.addEventListener('record-change', this._recordChangeHandler)\n }\n\n dispose() {\n this.consumer?.removeEventListener('attach-page', this._attachPageHandler)\n this.consumer?.removeEventListener('page-change', this._pageChangeHandler)\n this.consumer?.removeEventListener('limit-change', this._limitChangeHandler)\n this.consumer?.removeEventListener('sorters-change', this._sortersChangeHandler)\n this.consumer?.removeEventListener('filters-change', this._filtersChangeHandler)\n this.consumer?.removeEventListener('record-change', this._recordChangeHandler)\n }\n\n onAttachPage() {\n this.attach()\n }\n\n onPageChange(e: Event) {\n var page = (e as CustomEvent).detail\n this.fetch({ page })\n }\n\n onLimitChange(e: Event) {\n var limit = (e as CustomEvent).detail\n this.fetch({ limit })\n }\n\n onSortersChange(e: Event) {\n this.sorters = (e as CustomEvent).detail\n\n if (this.consumer?.mode !== 'GRID') {\n this.page = 0\n }\n\n this.fetch()\n }\n\n onFiltersChange(e: Event) {\n this.filters = (e as CustomEvent).detail\n this.fetch()\n }\n\n onRecordChange(e: Event) {\n this.consumer?.checkDirties()\n }\n\n get fetchOptions() {\n return this._fetchOptions\n }\n\n set fetchOptions(fetchOptions) {\n this._fetchOptions = fetchOptions\n\n this.fetch()\n }\n\n get fetchHandler() {\n if (!this._fetchHandlerWrap) {\n this._fetchHandlerWrap = async (options: FetchOption) => {\n if (!this._fetchHandler) {\n return\n }\n\n try {\n this.consumer?.showSpinner()\n return await (this._fetchHandler || EMPTY_FETCHHANDLER)(options)\n } finally {\n this.consumer?.hideSpinner()\n }\n }\n }\n\n return this._fetchHandlerWrap\n }\n\n set fetchHandler(fetchHandler) {\n this._fetchHandler = fetchHandler\n delete this._fetchHandlerWrap\n }\n\n get sorters() {\n return this._sorters\n }\n\n set sorters(sorters) {\n this._sorters = sorters\n }\n\n /* alias for sorters */\n get sortings() {\n return this._sorters\n }\n\n set sortings(sorters) {\n this._sorters = sorters\n }\n\n get filters() {\n return this._filters\n }\n\n set filters(filters) {\n this._filters = filters\n }\n\n async attach(reset = false) {\n var { page = 0, limit = 20 } = this\n\n /*\n * page는 0 based index가 아님에 주의한다.\n * 즉, page 값이 1 은 첫페이지를 의미한다.\n */\n if (reset) {\n this.records = ZERO_RECORDS\n page = 1\n } else {\n /* attach의 경우는 grist data의 변경상태를 유지하기 위해서, grist._data 를 기반으로 한다. */\n this.records = this.consumer?._data ? this.consumer._data.records : ZERO_RECORDS\n page = page + 1\n }\n\n return this._update(\n {\n /* fetch에서 limit과 page를 제공하지 않는 경우를 대비함. */\n limit,\n page,\n ...(await this.fetchHandler.call(null, {\n page,\n limit,\n sorters: this.sorters,\n options: this.fetchOptions\n }))\n },\n reset\n )\n }\n\n async fetch({\n page = this.page,\n limit = this.limit,\n sorters,\n sortings,\n filters\n }: {\n page?: number\n limit?: number\n sorters?: SortersConfig\n sortings?: SortersConfig\n filters?: FilterConfigObject[]\n } = {}) {\n /* sortings property is only for things-factory server-side list parameter convention */\n /* fetchHandler should reture { page, limit, total, records } */\n this.records = ZERO_RECORDS\n\n sorters = sorters || sortings || this.sorters\n filters = filters || this.filters\n\n this.sorters = sorters\n\n return this._update({\n /* fetch에서 limit과 page를 제공하지 않는 경우를 대비함. */\n limit,\n page,\n ...(await this.fetchHandler.call(null, {\n page,\n limit,\n sorters,\n sortings: sorters,\n filters,\n options: this.fetchOptions\n }))\n })\n }\n\n async _update(\n {\n page,\n limit,\n total,\n records\n }: {\n page: number\n limit: number\n total: number\n records: GristRecord[]\n },\n reset?: boolean\n ): Promise<void> {\n // total을 감안해서 page가 최대값을 넘지 않도록 한다.\n var maxpage = _calculateTotalPage(limit, total)\n if (maxpage < page) {\n return await this.fetch({ page: maxpage, limit })\n }\n // CONFIRM-ME 위 코드에 대한 설명이 필요함!!!.\n\n // page와 limit이 없는 경우 records 검사 전에 초기화\n this.page = this.page || page\n this.limit = this.limit || limit\n\n if (!records) {\n return\n }\n\n if (this.records === ZERO_RECORDS) {\n this.records = records\n } else if (this.page < page) {\n // attach인 경우에는 records를 append한다.\n this.records = [...this.records, ...records]\n } else {\n return\n }\n\n this.limit = limit\n this.total = total\n this.page = page\n\n this.consumer &&\n (this.consumer.data = {\n page: this.page,\n limit: this.limit,\n total: this.total,\n\n records: this.records\n })\n }\n}\n"]}
|
|
@@ -17,6 +17,7 @@ export declare class DataReport extends LitElement implements DataConsumer {
|
|
|
17
17
|
private pulltorefreshHandle?;
|
|
18
18
|
report: DataReportComponent;
|
|
19
19
|
private wrap;
|
|
20
|
+
get mode(): 'REPORT';
|
|
20
21
|
connectedCallback(): void;
|
|
21
22
|
disconnectedCallback(): void;
|
|
22
23
|
private resetPullToRefresh;
|
package/dist/src/data-report.js
CHANGED
|
@@ -18,6 +18,9 @@ let DataReport = class DataReport extends LitElement {
|
|
|
18
18
|
this._config = ZERO_CONFIG;
|
|
19
19
|
this._showSpinner = false;
|
|
20
20
|
}
|
|
21
|
+
get mode() {
|
|
22
|
+
return 'REPORT';
|
|
23
|
+
}
|
|
21
24
|
connectedCallback() {
|
|
22
25
|
super.connectedCallback();
|
|
23
26
|
this.dataProvider = new DataProvider(this);
|