@operato/data-grist 8.0.0-alpha.0 → 8.0.0-alpha.10

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 (43) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/src/data-card/record-card.js +10 -1
  3. package/dist/src/data-card/record-card.js.map +1 -1
  4. package/dist/src/data-grist.d.ts +16 -1
  5. package/dist/src/data-grist.js +53 -20
  6. package/dist/src/data-grist.js.map +1 -1
  7. package/dist/src/data-list/record-partial.js +10 -1
  8. package/dist/src/data-list/record-partial.js.map +1 -1
  9. package/dist/src/editors/ox-grist-editor-file.js +2 -1
  10. package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
  11. package/dist/src/record-view/record-creator.d.ts +5 -0
  12. package/dist/src/record-view/record-creator.js +47 -4
  13. package/dist/src/record-view/record-creator.js.map +1 -1
  14. package/dist/src/record-view/record-view-body.d.ts +6 -1
  15. package/dist/src/record-view/record-view-body.js +51 -5
  16. package/dist/src/record-view/record-view-body.js.map +1 -1
  17. package/dist/src/record-view/record-view.d.ts +7 -1
  18. package/dist/src/record-view/record-view.js +7 -1
  19. package/dist/src/record-view/record-view.js.map +1 -1
  20. package/dist/src/renderers/ox-grist-renderer-file.js +17 -5
  21. package/dist/src/renderers/ox-grist-renderer-file.js.map +1 -1
  22. package/dist/src/types.d.ts +6 -0
  23. package/dist/src/types.js +7 -0
  24. package/dist/src/types.js.map +1 -1
  25. package/dist/tsconfig.tsbuildinfo +1 -1
  26. package/package.json +7 -7
  27. package/src/data-card/record-card.ts +10 -1
  28. package/src/data-grist.ts +60 -24
  29. package/src/data-list/record-partial.ts +10 -1
  30. package/src/editors/ox-grist-editor-file.ts +3 -1
  31. package/src/record-view/record-creator.ts +50 -4
  32. package/src/record-view/record-view-body.ts +57 -5
  33. package/src/record-view/record-view.ts +10 -2
  34. package/src/renderers/ox-grist-renderer-file.ts +20 -6
  35. package/src/types.ts +8 -0
  36. package/translations/en.json +5 -1
  37. package/translations/ja.json +5 -1
  38. package/translations/ko.json +5 -1
  39. package/translations/ms.json +5 -1
  40. package/translations/zh.json +5 -1
  41. package/dist/stories/default-filters.stories copy.d.ts +0 -26
  42. package/dist/stories/default-filters.stories copy.js +0 -219
  43. package/dist/stories/default-filters.stories copy.js.map +0 -1
@@ -1,219 +0,0 @@
1
- import '../src/index.js';
2
- import '../src/filters/filters-form.js';
3
- import '../src/sorters/sorters-control.js';
4
- import '@operato/popup/ox-popup-list.js';
5
- import '@material/web/icon/icon.js';
6
- import { html } from 'lit';
7
- import { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles';
8
- import { CommonHeaderStyles, CommonGristStyles } from '@operato/styles';
9
- const fetchHandler = async ({ sorters = [], filters, page, limit }) => {
10
- var total = 120993;
11
- var start = (page - 1) * limit;
12
- await new Promise(resolve => setTimeout(resolve, 500));
13
- return {
14
- total,
15
- records: Array(limit * page > total ? total % limit : limit)
16
- .fill('')
17
- .map((item, idx) => {
18
- return {
19
- id: String(idx),
20
- name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,
21
- description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,
22
- due: idx % 2 ? '2024-01-01' : '2024-02-01',
23
- createdAt: Date.now(),
24
- updatedAt: Date.now()
25
- };
26
- })
27
- };
28
- };
29
- function buildConfig({ headerFilter }) {
30
- return {
31
- list: {
32
- fields: ['name', 'description'],
33
- details: ['updatedAt', 'createdAt']
34
- },
35
- columns: [
36
- {
37
- type: 'gutter',
38
- gutterName: 'sequence'
39
- },
40
- {
41
- type: 'string',
42
- name: 'id',
43
- hidden: true
44
- },
45
- {
46
- type: 'string',
47
- name: 'name',
48
- label: true,
49
- header: 'name',
50
- filter: {
51
- operator: 'eq',
52
- value: 'shnam'
53
- },
54
- sortable: true,
55
- width: 120
56
- },
57
- {
58
- type: 'string',
59
- name: 'description',
60
- header: 'description',
61
- filter: {
62
- operator: 'like',
63
- value: 'hahaha'
64
- },
65
- record: {
66
- align: 'left'
67
- },
68
- width: 200
69
- },
70
- {
71
- type: 'date',
72
- name: 'due',
73
- header: 'due',
74
- filter: {
75
- operator: 'between',
76
- value: [
77
- {
78
- name: 'today',
79
- params: {
80
- relativeDays: -2,
81
- timeZone: 'Asia/Seoul',
82
- format: 'YYYY-MM-DD'
83
- }
84
- },
85
- {
86
- name: 'today',
87
- params: {
88
- relativeDays: 1,
89
- timeZone: 'Asia/Seoul',
90
- locale: 'en-CA' /* 'YYYY-MM-DD' format */,
91
- format: {
92
- year: 'numeric',
93
- month: '2-digit',
94
- day: '2-digit'
95
- }
96
- }
97
- }
98
- ]
99
- },
100
- record: {
101
- align: 'left'
102
- },
103
- width: 120
104
- },
105
- {
106
- type: 'datetime',
107
- name: 'updatedAt',
108
- header: 'updated at',
109
- filter: {
110
- operator: 'between',
111
- value: [
112
- { name: 'week', params: { relativeWeeks: -1 } },
113
- { name: 'today', params: { relativeDays: +1 } }
114
- ]
115
- },
116
- width: 180
117
- },
118
- {
119
- type: 'datetime',
120
- name: 'createdAt',
121
- header: 'created at',
122
- width: 180
123
- }
124
- ],
125
- rows: {},
126
- sorters: [
127
- {
128
- name: 'name',
129
- desc: true
130
- }
131
- ],
132
- filters: {
133
- header: headerFilter
134
- },
135
- pagination: {
136
- pages: [30, 50, 100, 200]
137
- }
138
- };
139
- }
140
- export default {
141
- title: 'default filters for ox-grist',
142
- component: 'ox-grist',
143
- argTypes: {
144
- headerFilter: { control: 'boolean' }
145
- }
146
- };
147
- const Template = ({ headerFilter }) => html ` <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" />
148
-
149
- <link href="/themes/light.css" rel="stylesheet" />
150
- <link href="/themes/dark.css" rel="stylesheet" />
151
- <link href="/themes/spacing.css" rel="stylesheet" />
152
- <link href="/themes/grist-theme.css" rel="stylesheet" />
153
-
154
- <link
155
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1"
156
- rel="stylesheet"
157
- />
158
- <link
159
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1"
160
- rel="stylesheet"
161
- />
162
- <link
163
- href="https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1"
164
- rel="stylesheet"
165
- />
166
-
167
- <style>
168
- ${MDTypeScaleStyles.cssText}
169
- </style>
170
-
171
- <style>
172
- ${CommonGristStyles.cssText}
173
- ${CommonHeaderStyles.cssText}
174
- </style>
175
-
176
- <style>
177
- ox-grist {
178
- height: 600px;
179
- }
180
-
181
- ox-filters-form {
182
- flex: 1;
183
- }
184
- </style>
185
-
186
- <ox-grist
187
- .config=${buildConfig({ headerFilter })}
188
- mode="GRID"
189
- .fetchHandler=${fetchHandler}
190
- @filters-change=${(e) => console.log('filters', e.target.filters)}
191
- >
192
- <div slot="headroom" class="header">
193
- <div class="filters">
194
- <ox-filters-form></ox-filters-form>
195
-
196
- <div id="sorters">
197
- Sort
198
- <md-icon
199
- @click=${(e) => {
200
- const target = e.currentTarget;
201
- target.closest('#sorters').querySelector('#sorter-control').open({
202
- right: 0,
203
- top: target.offsetTop + target.offsetHeight
204
- });
205
- }}
206
- >expand_more</md-icon
207
- >
208
- <ox-popup id="sorter-control">
209
- <ox-sorters-control> </ox-sorters-control>
210
- </ox-popup>
211
- </div>
212
- </div>
213
- </div>
214
- </ox-grist>`;
215
- export const Regular = Template.bind({});
216
- Regular.args = {
217
- headerFilter: true
218
- };
219
- //# sourceMappingURL=default-filters.stories%20copy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-filters.stories copy.js","sourceRoot":"","sources":["../../stories/default-filters.stories copy.ts"],"names":[],"mappings":"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","sourcesContent":["import '../src/index.js'\nimport '../src/filters/filters-form.js'\nimport '../src/sorters/sorters-control.js'\nimport '@operato/popup/ox-popup-list.js'\nimport '@material/web/icon/icon.js'\n\nimport { html, TemplateResult } from 'lit'\nimport { styles as MDTypeScaleStyles } from '@material/web/typography/md-typescale-styles'\n\nimport { FetchHandler } from '../src/types.js'\n\nimport { CommonHeaderStyles, CommonGristStyles } from '@operato/styles'\n\nconst fetchHandler: FetchHandler = async ({ sorters = [], filters, page, limit }) => {\n var total = 120993\n var start = (page! - 1) * limit!\n\n await new Promise(resolve => setTimeout(resolve, 500))\n\n return {\n total,\n records: Array(limit! * page! > total ? total % limit! : limit)\n .fill('')\n .map((item, idx) => {\n return {\n id: String(idx),\n name: idx % 2 ? `shnam-${start + idx + 1}` : `heartyoh-${start + idx + 1}`,\n description: idx % 2 ? `hatiolabmanager${start + idx + 1}1234567890` : `hatiosea manager-${start + idx + 1}`,\n due: idx % 2 ? '2024-01-01' : '2024-02-01',\n createdAt: Date.now(),\n updatedAt: Date.now()\n }\n })\n }\n}\n\nfunction buildConfig({ headerFilter }: { headerFilter: boolean }) {\n return {\n list: {\n fields: ['name', 'description'],\n details: ['updatedAt', 'createdAt']\n },\n columns: [\n {\n type: 'gutter',\n gutterName: 'sequence'\n },\n {\n type: 'string',\n name: 'id',\n hidden: true\n },\n {\n type: 'string',\n name: 'name',\n label: true,\n header: 'name',\n filter: {\n operator: 'eq',\n value: 'shnam'\n },\n sortable: true,\n width: 120\n },\n {\n type: 'string',\n name: 'description',\n header: 'description',\n filter: {\n operator: 'like',\n value: 'hahaha'\n },\n record: {\n align: 'left'\n },\n width: 200\n },\n {\n type: 'date',\n name: 'due',\n header: 'due',\n filter: {\n operator: 'between',\n value: [\n {\n name: 'today',\n params: {\n relativeDays: -2,\n timeZone: 'Asia/Seoul',\n format: 'YYYY-MM-DD'\n }\n },\n {\n name: 'today',\n params: {\n relativeDays: 1,\n timeZone: 'Asia/Seoul',\n locale: 'en-CA' /* 'YYYY-MM-DD' format */,\n format: {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n }\n }\n }\n ]\n },\n record: {\n align: 'left'\n },\n width: 120\n },\n {\n type: 'datetime',\n name: 'updatedAt',\n header: 'updated at',\n filter: {\n operator: 'between',\n value: [\n { name: 'week', params: { relativeWeeks: -1 } },\n { name: 'today', params: { relativeDays: +1 } }\n ]\n },\n width: 180\n },\n {\n type: 'datetime',\n name: 'createdAt',\n header: 'created at',\n width: 180\n }\n ],\n rows: {},\n sorters: [\n {\n name: 'name',\n desc: true\n }\n ],\n filters: {\n header: headerFilter\n },\n pagination: {\n pages: [30, 50, 100, 200]\n }\n }\n}\n\nexport default {\n title: 'default filters for ox-grist',\n component: 'ox-grist',\n argTypes: {\n headerFilter: { control: 'boolean' }\n }\n}\n\ninterface Story<T> {\n (args: T): TemplateResult\n args?: Partial<T>\n argTypes?: Record<string, unknown>\n}\n\ninterface ArgTypes {\n headerFilter: boolean\n theme?: 'light' | 'dark'\n}\n\nconst Template: Story<ArgTypes> = ({ headerFilter }: ArgTypes) =>\n html` <link href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap\" rel=\"stylesheet\" />\n\n <link href=\"/themes/light.css\" rel=\"stylesheet\" />\n <link href=\"/themes/dark.css\" rel=\"stylesheet\" />\n <link href=\"/themes/spacing.css\" rel=\"stylesheet\" />\n <link href=\"/themes/grist-theme.css\" rel=\"stylesheet\" />\n\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL@20..48,100..700,0..1\"\n rel=\"stylesheet\"\n />\n\n <style>\n ${MDTypeScaleStyles.cssText}\n </style>\n\n <style>\n ${CommonGristStyles.cssText}\n ${CommonHeaderStyles.cssText}\n </style>\n\n <style>\n ox-grist {\n height: 600px;\n }\n\n ox-filters-form {\n flex: 1;\n }\n </style>\n\n <ox-grist\n .config=${buildConfig({ headerFilter })}\n mode=\"GRID\"\n .fetchHandler=${fetchHandler}\n @filters-change=${(e: Event) => console.log('filters', (e.target as any).filters)}\n >\n <div slot=\"headroom\" class=\"header\">\n <div class=\"filters\">\n <ox-filters-form></ox-filters-form>\n\n <div id=\"sorters\">\n Sort\n <md-icon\n @click=${(e: Event) => {\n const target = e.currentTarget as HTMLElement\n ;(target.closest('#sorters')!.querySelector('#sorter-control') as any).open({\n right: 0,\n top: target.offsetTop + target.offsetHeight\n })\n }}\n >expand_more</md-icon\n >\n <ox-popup id=\"sorter-control\">\n <ox-sorters-control> </ox-sorters-control>\n </ox-popup>\n </div>\n </div>\n </div>\n </ox-grist>`\n\nexport const Regular = Template.bind({})\nRegular.args = {\n headerFilter: true\n}\n"]}