@operato/data-grist 2.0.0-alpha.114 → 2.0.0-alpha.116
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/data-grist.d.ts +1 -1
- package/dist/src/data-grist.js +4 -4
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/personalizer/ox-grist-personalizer.d.ts +15 -0
- package/dist/src/personalizer/ox-grist-personalizer.js +118 -0
- package/dist/src/personalizer/ox-grist-personalizer.js.map +1 -0
- package/dist/stories/grid-setting.stories.d.ts +3 -2
- package/dist/stories/grid-setting.stories.js +11 -77
- package/dist/stories/grid-setting.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +9 -5
- package/src/data-grist.ts +4 -4
- package/src/personalizer/ox-grist-personalizer.ts +138 -0
- package/stories/grid-setting.stories.ts +12 -88
package/src/data-grist.ts
CHANGED
@@ -170,7 +170,7 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
170
170
|
*/
|
171
171
|
@property({ type: Boolean, attribute: 'url-params-sensitive' }) urlParamsSensitive?: boolean
|
172
172
|
|
173
|
-
@property({ type: Object })
|
173
|
+
@property({ type: Object }) personalConfig?: {
|
174
174
|
columns?: Partial<ColumnConfig>[]
|
175
175
|
[key: string]: any
|
176
176
|
}
|
@@ -309,8 +309,8 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
309
309
|
const config = this.config
|
310
310
|
const { columns } = config
|
311
311
|
|
312
|
-
if (this.
|
313
|
-
const { columns: personalColumns } = this.
|
312
|
+
if (this.personalConfig) {
|
313
|
+
const { columns: personalColumns } = this.personalConfig
|
314
314
|
|
315
315
|
if (personalColumns) {
|
316
316
|
config.columns = columns.map((column: Partial<ColumnConfig>) => {
|
@@ -552,7 +552,7 @@ export class DataGrist extends LitElement implements DataConsumer {
|
|
552
552
|
await this.requestUpdate()
|
553
553
|
}
|
554
554
|
|
555
|
-
if (changes.has('config')) {
|
555
|
+
if (changes.has('config') || changes.has('personalConfig')) {
|
556
556
|
this.applyUpdatedConfiguration()
|
557
557
|
}
|
558
558
|
|
@@ -0,0 +1,138 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
|
3
|
+
import { css, html, LitElement } from 'lit'
|
4
|
+
import { customElement, property, state } from 'lit/decorators.js'
|
5
|
+
|
6
|
+
import { OxPopupList } from '@operato/popup'
|
7
|
+
|
8
|
+
import { ColumnConfig, GristConfig } from '../types'
|
9
|
+
import { DataGrist } from '../data-grist'
|
10
|
+
|
11
|
+
export type PersonalPagePreference = {
|
12
|
+
columns?: Partial<ColumnConfig>[]
|
13
|
+
[key: string]: any
|
14
|
+
}
|
15
|
+
|
16
|
+
@customElement('ox-grist-personalizer')
|
17
|
+
export class OxGristPersonalizer extends LitElement {
|
18
|
+
static styles = [
|
19
|
+
css`
|
20
|
+
md-icon {
|
21
|
+
--md-icon-size: 14px;
|
22
|
+
width: 16px;
|
23
|
+
height: 16px;
|
24
|
+
background-color: rgba(var(--secondary-color-rgb), 0.6);
|
25
|
+
color: var(--primary-color);
|
26
|
+
border-radius: 0px 0px 7px 7px;
|
27
|
+
cursor: pointer;
|
28
|
+
|
29
|
+
&:hover {
|
30
|
+
color: var(--theme-white-color);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
`
|
34
|
+
]
|
35
|
+
|
36
|
+
@property({ type: String }) page!: string
|
37
|
+
@property({ type: String }) element!: string
|
38
|
+
@property({ type: Object }) saveCallback?: (
|
39
|
+
page: string,
|
40
|
+
element: string,
|
41
|
+
preference?: PersonalPagePreference
|
42
|
+
) => void
|
43
|
+
|
44
|
+
@state() private preference?: PersonalPagePreference
|
45
|
+
|
46
|
+
render() {
|
47
|
+
return html`
|
48
|
+
<md-icon
|
49
|
+
@click=${(e: MouseEvent) => {
|
50
|
+
const grist = this.closest('ox-grist') as DataGrist
|
51
|
+
|
52
|
+
const { compiledConfig: config } = grist
|
53
|
+
const columns = (config as GristConfig).columns.filter(
|
54
|
+
column => column.name && column.type !== 'gutter' && column.name != 'id'
|
55
|
+
)
|
56
|
+
|
57
|
+
this.preference = columns.map(column => {
|
58
|
+
return {
|
59
|
+
name: column.name,
|
60
|
+
hidden: column.hidden,
|
61
|
+
width: column.width
|
62
|
+
}
|
63
|
+
})
|
64
|
+
|
65
|
+
const template = html`
|
66
|
+
<div class="personalizer-header" slot="header">
|
67
|
+
select to show<md-icon
|
68
|
+
style="margin-left: auto;"
|
69
|
+
@click=${(e: MouseEvent) => {
|
70
|
+
this.dispatchEvent(
|
71
|
+
new CustomEvent('save', {
|
72
|
+
detail: {
|
73
|
+
page: this.page,
|
74
|
+
element: this.element,
|
75
|
+
preference: this.preference
|
76
|
+
}
|
77
|
+
})
|
78
|
+
)
|
79
|
+
;((e.target as HTMLElement).closest('ox-popup-list') as OxPopupList)?.close()
|
80
|
+
}}
|
81
|
+
>save</md-icon
|
82
|
+
>
|
83
|
+
</div>
|
84
|
+
|
85
|
+
${columns.map(
|
86
|
+
column =>
|
87
|
+
html`<ox-checkbox label="checkbox" ?checked=${!column.hidden} value=${column.name} option />${column.name}</ox-checkbox>`
|
88
|
+
)}
|
89
|
+
`
|
90
|
+
|
91
|
+
const popup = OxPopupList.open({
|
92
|
+
template,
|
93
|
+
multiple: true,
|
94
|
+
attrSelected: 'checked',
|
95
|
+
top: e.pageY,
|
96
|
+
left: e.pageX,
|
97
|
+
styles: css`
|
98
|
+
:host {
|
99
|
+
width: 200px;
|
100
|
+
max-height: 300px;
|
101
|
+
overflow: scroll;
|
102
|
+
}
|
103
|
+
|
104
|
+
::slotted(.personalizer-header) {
|
105
|
+
--md-icon-size: 1.2em;
|
106
|
+
|
107
|
+
display: flex;
|
108
|
+
flex-direction: row;
|
109
|
+
align-items: center;
|
110
|
+
text-transform: capitalize;
|
111
|
+
}
|
112
|
+
`
|
113
|
+
})
|
114
|
+
|
115
|
+
popup.onselect = (e: Event) => {
|
116
|
+
const selected = (e as CustomEvent).detail
|
117
|
+
|
118
|
+
const pconfig: PersonalPagePreference = grist.personalConfig || {}
|
119
|
+
pconfig.columns = columns.map(column => {
|
120
|
+
return {
|
121
|
+
name: column.name,
|
122
|
+
hidden: selected.indexOf(column.name) == -1,
|
123
|
+
width: column.width
|
124
|
+
}
|
125
|
+
})
|
126
|
+
|
127
|
+
this.preference = pconfig
|
128
|
+
|
129
|
+
grist.personalConfig = this.preference
|
130
|
+
|
131
|
+
grist.applyUpdatedConfiguration()
|
132
|
+
}
|
133
|
+
}}
|
134
|
+
>settings</md-icon
|
135
|
+
>
|
136
|
+
`
|
137
|
+
}
|
138
|
+
}
|
@@ -1,9 +1,11 @@
|
|
1
|
+
import '@material/web/icon/icon.js'
|
2
|
+
import '@operato/popup/ox-popup-list.js'
|
3
|
+
|
1
4
|
import '../src/index.js'
|
2
5
|
import '../src/filters/filters-form.js'
|
3
6
|
import '../src/sorters/sorters-control.js'
|
4
7
|
import '../src/record-view/record-creator.js'
|
5
|
-
import '
|
6
|
-
import '@material/web/icon/icon.js'
|
8
|
+
import '../src/personalizer/ox-grist-personalizer.js'
|
7
9
|
|
8
10
|
import { html, TemplateResult } from 'lit'
|
9
11
|
|
@@ -382,47 +384,11 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
|
|
382
384
|
${CommonGristStyles.cssText} ${CommonHeaderStyles.cssText}
|
383
385
|
</style>
|
384
386
|
|
385
|
-
<style>
|
386
|
-
ox-popup-list {
|
387
|
-
width: 200px;
|
388
|
-
max-height: 300px;
|
389
|
-
overflow: scroll;
|
390
|
-
}
|
391
|
-
|
392
|
-
[slot='setting'] {
|
393
|
-
--md-icon-size: 14px;
|
394
|
-
width: 16px;
|
395
|
-
height: 16px;
|
396
|
-
background-color: rgba(var(--secondary-color-rgb), 0.6);
|
397
|
-
border-radius: 0px 0px 7px 7px;
|
398
|
-
color: var(--theme-white-color);
|
399
|
-
cursor: pointer;
|
400
|
-
}
|
401
|
-
|
402
|
-
[slot='setting']:hover {
|
403
|
-
color: var(--primary-color);
|
404
|
-
}
|
405
|
-
|
406
|
-
ox-popup-list {
|
407
|
-
.header {
|
408
|
-
display: flex;
|
409
|
-
flex-direction: row;
|
410
|
-
align-items: center;
|
411
|
-
text-transform: capitalize;
|
412
|
-
}
|
413
|
-
|
414
|
-
.header md-icon {
|
415
|
-
--md-icon-size: 1.2em;
|
416
|
-
margin-left: auto;
|
417
|
-
}
|
418
|
-
}
|
419
|
-
</style>
|
420
|
-
|
421
387
|
<ox-grist
|
422
388
|
.mode=${mode}
|
423
389
|
.config=${config}
|
424
390
|
.fetchHandler=${fetchHandler}
|
425
|
-
.
|
391
|
+
.personalConfig=${{
|
426
392
|
columns: [{ name: 'description', hidden: true }]
|
427
393
|
}}
|
428
394
|
?url-params-sensitive=${urlParamsSensitive}
|
@@ -461,57 +427,15 @@ const Template: Story<ArgTypes> = ({ config, mode = 'GRID', urlParamsSensitive =
|
|
461
427
|
</ox-record-creator>
|
462
428
|
</div>
|
463
429
|
|
464
|
-
<
|
465
|
-
|
430
|
+
<ox-grist-personalizer
|
431
|
+
page="sample-page"
|
432
|
+
element="sample-element"
|
466
433
|
slot="setting"
|
467
|
-
@
|
468
|
-
const
|
469
|
-
|
470
|
-
const { compiledConfig: config } = grist
|
471
|
-
const columns = (config as GristConfig).columns.filter(
|
472
|
-
column => column.name && column.type !== 'gutter' && column.name != 'id'
|
473
|
-
)
|
474
|
-
|
475
|
-
const template = html`
|
476
|
-
<div class="header">
|
477
|
-
select to show<md-icon
|
478
|
-
@click=${(e: MouseEvent) =>
|
479
|
-
((e.target as HTMLElement).closest('ox-popup-list') as OxPopupList)?.close()}
|
480
|
-
>save</md-icon
|
481
|
-
>
|
482
|
-
</div>
|
483
|
-
${columns.map(
|
484
|
-
column =>
|
485
|
-
html`<ox-checkbox label="checkbox" ?checked=${!column.hidden} value=${column.name} option />${column.name}</ox-checkbox>`
|
486
|
-
)}
|
487
|
-
`
|
488
|
-
|
489
|
-
const popup = OxPopupList.open({
|
490
|
-
template,
|
491
|
-
multiple: true,
|
492
|
-
attrSelected: 'checked',
|
493
|
-
top: e.pageY,
|
494
|
-
left: e.pageX
|
495
|
-
})
|
496
|
-
|
497
|
-
popup.onselect = (e: Event) => {
|
498
|
-
console.log('select', e.target, (e as CustomEvent).detail, (e.target as OxPopupList).value)
|
499
|
-
const selected = (e as CustomEvent).detail
|
500
|
-
|
501
|
-
const pconfig = grist.personalSetting || {}
|
502
|
-
pconfig.columns = columns.map(column => {
|
503
|
-
return {
|
504
|
-
name: column.name,
|
505
|
-
hidden: selected.indexOf(column.name) == -1
|
506
|
-
}
|
507
|
-
})
|
508
|
-
grist.personalSetting = pconfig
|
509
|
-
|
510
|
-
grist.applyUpdatedConfiguration()
|
511
|
-
}
|
434
|
+
@save=${(e: CustomEvent) => {
|
435
|
+
const { page, element, preference } = e.detail as any
|
436
|
+
console.log(page, element, preference)
|
512
437
|
}}
|
513
|
-
|
514
|
-
>
|
438
|
+
></ox-grist-personalizer>
|
515
439
|
</ox-grist>`
|
516
440
|
|
517
441
|
export const Regular = Template.bind({})
|