@operato/data-grist 10.29.13 → 10.29.17

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@operato/data-grist",
3
- "version": "10.29.13",
3
+ "version": "10.29.17",
4
4
  "description": "User interface for grid (desktop) and list (mobile)",
5
5
  "author": "heartyoh",
6
6
  "type": "module",
@@ -70,12 +70,12 @@
70
70
  "@material/web": "^2.0.0",
71
71
  "@operato/headroom": "^10.29.1",
72
72
  "@operato/i18n": "^10.29.1",
73
- "@operato/input": "^10.29.13",
73
+ "@operato/input": "^10.29.17",
74
74
  "@operato/list-state": "^10.29.1",
75
- "@operato/p13n": "^10.29.13",
76
- "@operato/popup": "^10.29.13",
75
+ "@operato/p13n": "^10.29.17",
76
+ "@operato/popup": "^10.29.17",
77
77
  "@operato/pull-to-refresh": "^10.29.1",
78
- "@operato/styles": "^10.29.12",
78
+ "@operato/styles": "^10.29.17",
79
79
  "@operato/time-calculator": "^10.29.1",
80
80
  "@operato/utils": "^10.29.1",
81
81
  "i18next": "^24.2.1",
@@ -116,5 +116,5 @@
116
116
  "prettier --write"
117
117
  ]
118
118
  },
119
- "gitHead": "5840c9f4ddc262b4389236e725ec143e8a562ca9"
119
+ "gitHead": "ace66019af9afb5ba5dc50da8ade3a962f2c8cbb"
120
120
  }
@@ -0,0 +1,68 @@
1
+ /* Elements are compared by presence, not by value: a failing element comparison makes chai render the DOM and hang the runner. */
2
+ import { expect, fixture } from '@open-wc/testing'
3
+ import { html } from 'lit'
4
+
5
+ import '../src/data-grist.js'
6
+ import '../src/filters/filters-form.js'
7
+
8
+ /*
9
+ * Every filter in the form says what it filters, beside its chooser. A select once carried its name only as a
10
+ * placeholder, which a chosen value replaces - the bar then showed 「진행 중」 with nothing saying it was the status.
11
+ */
12
+
13
+ const columns = [
14
+ { type: 'string', name: 'name', header: 'name', filter: 'i_like' },
15
+ { type: 'select', name: 'status', header: 'status', record: { options: ['', 'OPEN', 'CLOSED'] }, filter: 'in' },
16
+ { type: 'select', name: 'kind', header: 'kind', record: { options: ['', 'A', 'B'] }, filter: true },
17
+ { type: 'date', name: 'day', header: 'day', filter: 'between' }
18
+ ]
19
+
20
+ const settle = (ms = 150) => new Promise(resolve => setTimeout(resolve, ms))
21
+
22
+ describe('필터 라벨', () => {
23
+ const ignoreResizeLoop = (e: ErrorEvent) => {
24
+ if (String(e.message).includes('ResizeObserver loop')) {
25
+ e.stopImmediatePropagation()
26
+ e.preventDefault()
27
+ }
28
+ }
29
+ let previousOnError: OnErrorEventHandler = null
30
+
31
+ before(() => {
32
+ window.addEventListener('error', ignoreResizeLoop, true)
33
+ previousOnError = window.onerror
34
+ window.onerror = (message, ...rest) =>
35
+ String(message).includes('ResizeObserver loop') ? true : previousOnError?.call(window, message, ...rest)
36
+ })
37
+
38
+ after(() => {
39
+ window.removeEventListener('error', ignoreResizeLoop, true)
40
+ window.onerror = previousOnError
41
+ })
42
+
43
+ it('every filter, a select too, sits in a label that names it', async () => {
44
+ const el = (await fixture(html`
45
+ <ox-grist
46
+ style="height: 300px"
47
+ mode="GRID"
48
+ .config=${{ columns, pagination: { pages: [20] } }}
49
+ .fetchHandler=${async () => ({ page: 1, limit: 20, total: 0, records: [] })}
50
+ >
51
+ <div slot="headroom"><ox-filters-form without-search></ox-filters-form></div>
52
+ </ox-grist>
53
+ `)) as any
54
+ await settle()
55
+
56
+ const form = el.querySelector('ox-filters-form') as any
57
+ await form.updateComplete
58
+ const root = form.renderRoot as ShadowRoot
59
+ const named = (name: string) => root.querySelector(`[name="${name}"]`)
60
+ for (const name of ['name', 'status', 'kind', 'day']) {
61
+ const chooser = named(name)
62
+ expect(!!chooser, `${name} is rendered`).to.equal(true)
63
+ const label = chooser!.closest('label[filter-title]')
64
+ expect(!!label, `${name} sits in a label`).to.equal(true)
65
+ expect(label!.querySelector('span')?.textContent?.trim()).to.equal(name)
66
+ }
67
+ })
68
+ })