@operato/data-grist 1.0.0-beta.14 → 1.0.0-beta.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/CHANGELOG.md +31 -0
- package/dist/src/data-card/data-card.js +1 -0
- package/dist/src/data-card/data-card.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +2 -0
- package/dist/src/data-grid/data-grid-body.js +54 -31
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -1
- package/dist/src/data-grid/data-grid-header.js +12 -12
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grist.d.ts +3 -3
- package/dist/src/data-grist.js +72 -92
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/gutters/gutter-dirty.d.ts +4 -1
- package/dist/src/gutters/gutter-dirty.js +16 -2
- package/dist/src/gutters/gutter-dirty.js.map +1 -1
- package/dist/src/gutters/gutter-sequence.js +14 -0
- package/dist/src/gutters/gutter-sequence.js.map +1 -1
- package/dist/stories/index.stories.d.ts +4 -0
- package/dist/stories/index.stories.js +11 -3
- package/dist/stories/index.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
- package/src/data-card/data-card.ts +1 -0
- package/src/data-grid/data-grid-body.ts +73 -37
- package/src/data-grid/data-grid-header.ts +15 -16
- package/src/data-grist.ts +87 -112
- package/src/gutters/gutter-dirty.ts +20 -3
- package/src/gutters/gutter-sequence.ts +17 -2
- package/stories/index.stories.ts +18 -5
- package/dist/src/filters/filter-input copy.d.ts +0 -2
- package/dist/src/filters/filter-input copy.js +0 -25
- package/dist/src/filters/filter-input copy.js.map +0 -1
- package/dist/src/filters/filter-mwc-checkbox.d.ts +0 -4
- package/dist/src/filters/filter-mwc-checkbox.js +0 -30
- package/dist/src/filters/filter-mwc-checkbox.js.map +0 -1
- package/dist/src/filters/filter-mwc-textfield.d.ts +0 -3
- package/dist/src/filters/filter-mwc-textfield.js +0 -27
- package/dist/src/filters/filter-mwc-textfield.js.map +0 -1
- package/dist/src/filters/grist-filter-registry.d.ts +0 -12
- package/dist/src/filters/grist-filter-registry.js +0 -47
- package/dist/src/filters/grist-filter-registry.js.map +0 -1
- package/dist/src/filters/ox-grist-filter-editor-checkbox.d.ts +0 -5
- package/dist/src/filters/ox-grist-filter-editor-checkbox.js +0 -27
- package/dist/src/filters/ox-grist-filter-editor-checkbox.js.map +0 -1
- package/dist/src/filters/ox-grist-filter-editor-input.d.ts +0 -4
- package/dist/src/filters/ox-grist-filter-editor-input.js +0 -54
- package/dist/src/filters/ox-grist-filter-editor-input.js.map +0 -1
- package/dist/src/filters/ox-grist-filter-editor-select.d.ts +0 -4
- package/dist/src/filters/ox-grist-filter-editor-select.js +0 -46
- package/dist/src/filters/ox-grist-filter-editor-select.js.map +0 -1
- package/dist/src/filters/ox-grist-filter-editor.d.ts +0 -16
- package/dist/src/filters/ox-grist-filter-editor.js +0 -122
- package/dist/src/filters/ox-grist-filter-editor.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,37 @@
|
|
|
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
|
+
## [1.0.0-beta.17](https://github.com/hatiolab/operato/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2022-05-25)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### :bug: Bug Fix
|
|
10
|
+
|
|
11
|
+
* data-grist copy/paste a row ([35fcaef](https://github.com/hatiolab/operato/commit/35fcaefc82aaa6567efd029dd72622909a4b71cf))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## [1.0.0-beta.16](https://github.com/hatiolab/operato/compare/v1.0.0-beta.15...v1.0.0-beta.16) (2022-05-23)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### :bug: Bug Fix
|
|
19
|
+
|
|
20
|
+
* card layout flex ([dabe5c0](https://github.com/hatiolab/operato/commit/dabe5c01b6525b40587c7318938a73ddc4f8d2a4))
|
|
21
|
+
* data-card layout ([dd87d94](https://github.com/hatiolab/operato/commit/dd87d94aef90b7ee607961a4b76b5b47b6192bed))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## [1.0.0-beta.15](https://github.com/hatiolab/operato/compare/v1.0.0-beta.14...v1.0.0-beta.15) (2022-05-20)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### :bug: Bug Fix
|
|
29
|
+
|
|
30
|
+
* data-grist copy & paste ([bec2cbc](https://github.com/hatiolab/operato/commit/bec2cbcc1bee615abd97e16eb33563c08bfd6b57))
|
|
31
|
+
* data-grist filters and sorters change handling ([5407c5f](https://github.com/hatiolab/operato/commit/5407c5fea02316b1a0525f3ee4721bde7227bbb6))
|
|
32
|
+
* data-grist filters sorters behavior ([6d50455](https://github.com/hatiolab/operato/commit/6d5045586d35e0becbde1f7a13c9a171400447c1))
|
|
33
|
+
* story for data-grist ([623dab4](https://github.com/hatiolab/operato/commit/623dab450683ffafdbdafd8bc4190d4969eef675))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
6
37
|
## [1.0.0-beta.14](https://github.com/hatiolab/operato/compare/v1.0.0-beta.13...v1.0.0-beta.14) (2022-05-19)
|
|
7
38
|
|
|
8
39
|
**Note:** Version bump only for package @operato/data-grist
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-card.js","sourceRoot":"","sources":["../../../src/data-card/data-card.ts"],"names":[],"mappings":";AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,eAAe,CAAA;AAEtB,OAAO,EAAkB,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAIrD,IAAa,QAAQ,GAArB,MAAa,QAAS,SAAQ,eAAe;IAA7C;;
|
|
1
|
+
{"version":3,"file":"data-card.js","sourceRoot":"","sources":["../../../src/data-card/data-card.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/mwc-icon'\nimport './record-card'\n\nimport { PropertyValues, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\nimport { DataManipulator } from '../data-manipulator'\nimport { GristRecord } from '../types'\n\n@customElement('ox-card')\nexport class DataCard extends DataManipulator {\n static styles = [\n css`\n :host {\n background-color: var(--data-card-background-color);\n overflow-y: auto;\n padding: var(--padding-wide);\n\n display: grid;\n grid-template-columns: var(--data-card-template);\n grid-template-rows: min-content;\n grid-gap: var(--margin-wide);\n }\n\n ox-record-card {\n height: min-content;\n align-items: stretch;\n background-color: var(--data-card-record-card-background-color);\n border: var(--data-card-record-card-border);\n border-radius: var(--data-card-record-card-border-radius);\n }\n ox-record-card:hover {\n border: var(--data-card-record-card-border-hover);\n box-shadow: var(--data-card-record-card-boxshadow-hover);\n }\n\n [selected-row] {\n background-color: var(--data-card-record-card-selected-border);\n }\n\n #upward {\n --mdc-icon-size: 26px;\n position: absolute;\n top: var(--data-card-fab-position-vertical);\n right: var(--data-card-fab-position-horizontal);\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 20px;\n color: var(--data-card-fab-color);\n box-shadow: var(--data-card-fab-shadow);\n padding: 7px;\n }\n\n slot {\n width: 100%;\n }\n\n @media screen and (max-width: 460px) {\n #setting {\n grid-template-columns: 1fr;\n grid-template-rows: 1fr 1fr;\n }\n }\n `\n ]\n\n @property({ type: Boolean }) isTop: boolean = false\n @property({ type: Array }) private _records: GristRecord[] = []\n\n private _total: number = 0\n private _limit: number = 20\n private _page: number = 1\n\n firstUpdated(changes: PropertyValues<this>) {\n this.isTop = true\n\n /* infinite scrolling */\n this.addEventListener('scroll', e => {\n const totalScrollHeight = this.scrollHeight\n const screenHeight = this.offsetHeight\n const currentScrollTop = this.scrollTop\n\n if (totalScrollHeight <= screenHeight + currentScrollTop + 1) {\n /* 마지막 페이지까지 계속 페이지를 증가시킨다. */\n var lastPage = Math.ceil(this._total / this._limit)\n\n if (this._page < lastPage) {\n this.dispatchEvent(new CustomEvent('attach-page', { bubbles: true, composed: true }))\n }\n }\n\n this.isTop = this.scrollTop == 0\n })\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('config')) {\n this._records = []\n this._page = 1\n }\n\n if (changes.has('data')) {\n this._records = this.data.records\n this._total = this.data.total || 0\n this._limit = this.data.limit || 20\n this._page = this.data.page || 0\n }\n }\n\n render() {\n var records = this._records || []\n\n return html`\n ${records.map(\n (record, rowIndex) => html`\n <ox-record-card\n .config=${this.config}\n .data=${this.data}\n .record=${record}\n .rowIndex=${rowIndex}\n ?selected-row=${record['__selected__']}\n ?dirty=${record['__dirty__']}\n ></ox-record-card>\n `\n )}\n ${this.isTop\n ? html``\n : html` <mwc-icon id=\"upward\" @click=${(e: Event) => this.gotoTop(e)}>arrow_upward</mwc-icon> `}\n `\n }\n\n gotoTop(e: Event) {\n this.scrollTop = 0\n\n e.stopPropagation()\n }\n\n get pullToRefreshTarget() {\n return this\n }\n}\n"]}
|
|
@@ -32,6 +32,7 @@ export declare class DataGridBody extends LitElement {
|
|
|
32
32
|
handleOnScroll(e: WheelEvent): void;
|
|
33
33
|
render(): import("lit-html").TemplateResult<1>;
|
|
34
34
|
firstUpdated(): void;
|
|
35
|
+
getFieldByIndex(rowIndex: number, columnIndex: number): Element | null | undefined;
|
|
35
36
|
_onWheelEvent(e: WheelEvent): void;
|
|
36
37
|
startEditTarget(row: number, column: number): void;
|
|
37
38
|
shouldUpdate(changes: any): boolean;
|
|
@@ -44,4 +45,5 @@ export declare class DataGridBody extends LitElement {
|
|
|
44
45
|
getSelectedBlockValues(): Array<Array<any>> | any | undefined;
|
|
45
46
|
copy(): Promise<void>;
|
|
46
47
|
paste(): Promise<void>;
|
|
48
|
+
setSelectBlock(start?: DataGridField, end?: DataGridField): void;
|
|
47
49
|
}
|
|
@@ -141,6 +141,13 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
141
141
|
this.addEventListener('keydown', this._focusedListener);
|
|
142
142
|
}
|
|
143
143
|
});
|
|
144
|
+
this.addEventListener('set-select-block', async (e) => {
|
|
145
|
+
e.stopPropagation();
|
|
146
|
+
const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = e.detail || {};
|
|
147
|
+
const start = this.getFieldByIndex(startRow, startColumn);
|
|
148
|
+
const end = this.getFieldByIndex(endRow, endColumn);
|
|
149
|
+
this.setSelectBlock(start, end);
|
|
150
|
+
});
|
|
144
151
|
this.renderRoot.addEventListener('mousemove', (event) => {
|
|
145
152
|
var _a;
|
|
146
153
|
const e = event;
|
|
@@ -151,16 +158,14 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
151
158
|
const field = e.target;
|
|
152
159
|
if (!this._selectBlock || this._selectBlockWillBeReset) {
|
|
153
160
|
this._selectBlockWillBeReset = false;
|
|
154
|
-
this.
|
|
155
|
-
this.dispatchEvent(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
// }
|
|
163
|
-
}));
|
|
161
|
+
this.setSelectBlock(field);
|
|
162
|
+
// this.dispatchEvent(
|
|
163
|
+
// new CustomEvent('focus-change', {
|
|
164
|
+
// bubbles: true,
|
|
165
|
+
// composed: true,
|
|
166
|
+
// detail: undefined
|
|
167
|
+
// })
|
|
168
|
+
// )
|
|
164
169
|
return;
|
|
165
170
|
}
|
|
166
171
|
var { start, end } = this._selectBlock || {};
|
|
@@ -173,22 +178,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
173
178
|
}
|
|
174
179
|
if (start && end !== field) {
|
|
175
180
|
end = field;
|
|
176
|
-
|
|
177
|
-
const right = left === start ? end : start;
|
|
178
|
-
const top = start.rowIndex < end.rowIndex ? start : end;
|
|
179
|
-
const bottom = top === start ? end : start;
|
|
180
|
-
const { offsetLeft } = left;
|
|
181
|
-
const { offsetTop } = top;
|
|
182
|
-
const width = right.offsetLeft - offsetLeft + right.offsetWidth;
|
|
183
|
-
const height = bottom.offsetTop - offsetTop + bottom.offsetHeight;
|
|
184
|
-
this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px');
|
|
185
|
-
this.style.setProperty('--select-box-top', offsetTop - 1 + 'px');
|
|
186
|
-
this.style.setProperty('--select-box-width', width + 'px');
|
|
187
|
-
this.style.setProperty('--select-box-height', height + 'px');
|
|
188
|
-
this._selectBlock = {
|
|
189
|
-
start,
|
|
190
|
-
end
|
|
191
|
-
};
|
|
181
|
+
this.setSelectBlock(start, end);
|
|
192
182
|
}
|
|
193
183
|
});
|
|
194
184
|
this.renderRoot.addEventListener('mouseup', (event) => {
|
|
@@ -201,6 +191,13 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
201
191
|
this.style.setProperty('--focused-background-image', `url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>")`);
|
|
202
192
|
this.addEventListener('show-record-view', (e) => this.popupRecordView(e.detail));
|
|
203
193
|
}
|
|
194
|
+
getFieldByIndex(rowIndex, columnIndex) {
|
|
195
|
+
if (rowIndex < 0) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
var columns = this.columns.filter(column => !column.hidden).length;
|
|
199
|
+
return this.renderRoot.children.item(rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns));
|
|
200
|
+
}
|
|
204
201
|
_onWheelEvent(e) {
|
|
205
202
|
if (this.scrollHeight <= this.clientHeight) {
|
|
206
203
|
var delta = Math.max(-1, Math.min(1, e.deltaY || 0));
|
|
@@ -234,7 +231,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
234
231
|
if (!element) {
|
|
235
232
|
return;
|
|
236
233
|
}
|
|
237
|
-
this.
|
|
234
|
+
this.setSelectBlock();
|
|
238
235
|
let { top, left } = calcScrollPos(this, element);
|
|
239
236
|
// TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.
|
|
240
237
|
// this.scroll({
|
|
@@ -281,8 +278,12 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
281
278
|
var _a;
|
|
282
279
|
var { start, end } = this._selectBlock || {};
|
|
283
280
|
if (!(start && end)) {
|
|
284
|
-
|
|
285
|
-
|
|
281
|
+
start = this.focusedField;
|
|
282
|
+
if (typeof start.value === 'string' || typeof start.value === 'number') {
|
|
283
|
+
const selection = document.getSelection();
|
|
284
|
+
return (selection === null || selection === void 0 ? void 0 : selection.toString()) || ((_a = this.focusedField) === null || _a === void 0 ? void 0 : _a.value);
|
|
285
|
+
}
|
|
286
|
+
end = start;
|
|
286
287
|
}
|
|
287
288
|
if (start && end) {
|
|
288
289
|
const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex;
|
|
@@ -297,7 +298,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
297
298
|
return columnArray.map((start, index) => {
|
|
298
299
|
const columnIndex = start + index;
|
|
299
300
|
const column = columns[columnIndex];
|
|
300
|
-
return record[column.name];
|
|
301
|
+
return record === null || record === void 0 ? void 0 : record[column.name];
|
|
301
302
|
});
|
|
302
303
|
});
|
|
303
304
|
}
|
|
@@ -348,7 +349,7 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
348
349
|
}
|
|
349
350
|
record.map((item, columnIndex) => {
|
|
350
351
|
const targetColumn = columns[column + columnIndex];
|
|
351
|
-
if (!targetColumn.gutterName) {
|
|
352
|
+
if (targetColumn && !targetColumn.gutterName && targetColumn.record.editable) {
|
|
352
353
|
this.dispatchEvent(new CustomEvent('field-change', {
|
|
353
354
|
bubbles: true,
|
|
354
355
|
composed: true,
|
|
@@ -368,6 +369,28 @@ let DataGridBody = class DataGridBody extends LitElement {
|
|
|
368
369
|
console.error(e);
|
|
369
370
|
}
|
|
370
371
|
}
|
|
372
|
+
setSelectBlock(start, end) {
|
|
373
|
+
this._selectBlock = start && { start, end };
|
|
374
|
+
if (start && end && start !== end) {
|
|
375
|
+
const left = start.columnIndex < end.columnIndex ? start : end;
|
|
376
|
+
const right = left === start ? end : start;
|
|
377
|
+
const top = start.rowIndex < end.rowIndex ? start : end;
|
|
378
|
+
const bottom = top === start ? end : start;
|
|
379
|
+
const { offsetLeft } = left;
|
|
380
|
+
const { offsetTop } = top;
|
|
381
|
+
const width = right.offsetLeft - offsetLeft + right.offsetWidth;
|
|
382
|
+
const height = bottom.offsetTop - offsetTop + bottom.offsetHeight;
|
|
383
|
+
this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px');
|
|
384
|
+
this.style.setProperty('--select-box-top', offsetTop - 1 + 'px');
|
|
385
|
+
this.style.setProperty('--select-box-width', width + 'px');
|
|
386
|
+
this.style.setProperty('--select-box-height', height + 'px');
|
|
387
|
+
this.dispatchEvent(new CustomEvent('focus-change', {
|
|
388
|
+
bubbles: true,
|
|
389
|
+
composed: true,
|
|
390
|
+
detail: undefined
|
|
391
|
+
}));
|
|
392
|
+
}
|
|
393
|
+
}
|
|
371
394
|
};
|
|
372
395
|
DataGridBody.styles = [
|
|
373
396
|
TooltipStyles,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid-field'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n private _selectBlockWillBeReset: boolean = true\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n var { row: focusedRow, column: focusedColumn } = this.focused || {}\n var { row: editingRow, column: editingColumn } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${start && end ? html` <div select-block></div> ` : html``}\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1) {\n this._selectBlockWillBeReset = true\n return\n }\n\n const field = e.target as DataGridField\n\n if (!this._selectBlock || this._selectBlockWillBeReset) {\n this._selectBlockWillBeReset = false\n this._selectBlock = { start: field }\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: undefined\n // detail: {\n // row: field!.rowIndex,\n // column: field!.columnIndex\n // }\n })\n )\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start !== field && !end) {\n /* cancel all selected text */\n window.getSelection()?.removeAllRanges()\n }\n\n if (start === field && !end) {\n return\n }\n\n if (start && end !== field) {\n end = field\n\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n\n this._selectBlock = {\n start,\n end\n }\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {\n this._selectBlockWillBeReset = true\n })\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this), supportsPassive ? { passive: true } : false)\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n supportsPassive || e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n\n if (!editable) {\n return\n }\n\n this.editTarget = {\n row,\n column\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n this._selectBlock = undefined\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n const selection = document.getSelection()\n return selection?.toString() || this.focusedField?.value\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return new Array(endRowIndex - startRowIndex + 1).fill(startRowIndex).map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n return columnArray.map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n\n return record[column.name]\n })\n })\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n await navigator.clipboard.writeText(\n copied instanceof Array ? JSON.stringify(this.getSelectedBlockValues()) : copied\n )\n\n const selectBlock = this.selectBlock\n if (selectBlock) {\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = ''\n selectBlock.style.opacity = ''\n }\n }\n\n async paste() {\n try {\n const text = await navigator.clipboard.readText()\n if (!text) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n var block: Array<Array<any>>\n\n try {\n var parsed = JSON.parse(text)\n } catch (ex) {\n parsed = text\n }\n\n if (!(parsed instanceof Array)) {\n block = [[parsed]]\n } else {\n block = parsed\n }\n\n block.forEach((record, rowIndex) => {\n if (!(record instanceof Array)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n record.map((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n if (!targetColumn.gutterName) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: item,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n } catch (e) {\n console.error(e)\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-grid-body.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-body.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid-field'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport debounce from 'lodash-es/debounce'\n\nimport { TooltipStyles } from '@operato/styles'\nimport { sleep } from '@operato/utils'\n\nimport { ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { RecordViewHandler } from '../record-view/record-view-handler'\nimport { ColumnConfig, GristConfig, GristData, GristRecord } from '../types'\nimport { supportsPassive } from '../utils'\nimport { dataGridBodyStyle } from './data-grid-body-style'\nimport { DataGridField } from './data-grid-field'\nimport { dataGridBodyClickHandler } from './event-handlers/data-grid-body-click-handler'\nimport { dataGridBodyDblclickHandler } from './event-handlers/data-grid-body-dblclick-handler'\nimport { dataGridBodyKeydownHandler } from './event-handlers/data-grid-body-keydown-handler'\n\nconst THRESHOLD = 300\nconst DATA_PADDING = 3\nconst ROW_HEIGHT = 40\nconst GAP_SIZE = 1\n\nfunction calcScrollPos(parent: DataGridBody, child: Element) {\n /* getBoundingClientRect는 safari에서 스크롤 상태에서 다른 브라우저와는 다른 값을 리턴함 - 사파리는 약간 이상 작동함. */\n var { top: ct, left: cl, right: cr, bottom: cb } = child.getBoundingClientRect()\n var { top: pt, left: pl, right: pr, bottom: pb } = parent.getBoundingClientRect()\n var { scrollLeft, scrollTop } = parent\n var scrollbarWidth = parent.clientWidth - parent.offsetWidth\n var scrollbarHeight = parent.clientHeight - parent.offsetHeight\n\n return {\n left: cl < pl ? scrollLeft - (pl - cl) : cr > pr ? scrollLeft - (pr - cr) - scrollbarWidth : undefined,\n top: ct < pt ? scrollTop - (pt - ct) : cb > pb ? scrollTop - (pb - cb) - scrollbarHeight : undefined\n }\n}\n\nconst ZERO_FOCUS = {\n row: 0,\n column: 0\n}\n\n@customElement('ox-grid-body')\nexport class DataGridBody extends LitElement {\n debounce = debounce((scrollTop: number, clientHeight: number) => {\n const maxVisibleRows = Math.ceil(clientHeight / (ROW_HEIGHT + GAP_SIZE))\n const from = Math.max(0, Math.floor(scrollTop / (ROW_HEIGHT + GAP_SIZE)) - maxVisibleRows * DATA_PADDING)\n const to = Math.min(this.data.records?.length || 0, from + maxVisibleRows * (DATA_PADDING * 2 + 1))\n\n this.from = from\n this.to = to\n }, THRESHOLD)\n\n static styles = [\n TooltipStyles,\n dataGridBodyStyle,\n css`\n [select-block] {\n position: absolute;\n left: var(--select-box-left);\n top: var(--select-box-top);\n width: var(--select-box-width);\n height: var(--select-box-height);\n border: var(--grid-record-focused-cell-border);\n background-image: var(--focused-background-image);\n pointer-events: none;\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = []\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Object }) focused: { row: number; column: number } = ZERO_FOCUS\n @property({ type: Object }) editTarget: { row: number; column: number } | null = null\n @property({ type: Number }) from = -1\n @property({ type: Number }) to = -1\n\n @state() _selectBlock?: {\n start: DataGridField\n end?: DataGridField\n }\n\n @query('[select-block]') selectBlock?: HTMLDivElement\n @query('ox-grid-field[focused]') focusedField?: DataGridField\n\n private _focusedListener?: (e: KeyboardEvent) => void\n private _recordView?: any\n private _recordViewRow?: number\n private _selectBlockWillBeReset: boolean = true\n\n resetEdit() {\n this.editTarget = null\n }\n\n handleOnScroll(e: WheelEvent) {\n const { scrollTop, clientHeight } = e.target as HTMLElement\n this.debounce(scrollTop, clientHeight)\n }\n\n // issue #13\n // renderOptimisticRow() {\n // return\n // }\n\n render() {\n var { row: focusedRow, column: focusedColumn } = this.focused || {}\n var { row: editingRow, column: editingColumn } = this.editTarget || {}\n\n var columns = this.columns.filter(column => !column.hidden)\n var data = this.data\n var { records } = data\n var { appendable, classifier } = this.config.rows\n const { start, end } = this._selectBlock || {}\n\n /*\n * 레코드를 추가할 수 있는 경우에는 항상 추가 레코드를 보여준다.\n * 만약, 이전 방식처럼, 커서를 옮겨야만 새로운 레코드가 보이게 하고 싶다면, 조건부를 다음의 코드로 대체한다.\n * -- if (focusedRow == records.length)\n */\n if (appendable) {\n records = [...records, { __dirty__: '+' }]\n }\n\n return html`\n ${records.map((record, idxRow) => {\n var attrFocusedRow = idxRow === focusedRow\n var attrSelected = record['__selected__']\n var attrOdd = idxRow % 2\n var dirtyFields = record['__dirtyfields__'] || {}\n var { emphasized } = classifier.call(null, record, idxRow) || {}\n\n return html`\n ${columns.map(\n (column, idxColumn) => html`\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .columnIndex=${idxColumn}\n .column=${column}\n .record=${record}\n .emphasized=${emphasized}\n ?gutter=${column.type == 'gutter'}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ?focused=${idxRow === focusedRow && idxColumn === focusedColumn}\n ?editing=${idxRow === editingRow && idxColumn === editingColumn}\n .value=${record[column.name]}\n ?dirty=${!!dirtyFields[column.name]}\n ></ox-grid-field>\n `\n )}\n <ox-grid-field\n .data=${data}\n .rowIndex=${idxRow}\n .record=${record}\n .emphasized=${emphasized}\n ?odd=${attrOdd}\n ?focused-row=${attrFocusedRow}\n ?selected-row=${attrSelected}\n ></ox-grid-field>\n `\n })}\n ${start && end ? html` <div select-block></div> ` : html``}\n `\n }\n\n firstUpdated() {\n // TODO issue #13\n // this.addEventListener('scroll', this.handleOnScroll.bind(this))\n\n /* focus() 를 받을 수 있도록 함. */\n this.setAttribute('tabindex', '-1')\n\n /*\n * focusout 으로 property를 변경시키는 경우, focusout에 의해 update가 발생하는 경우에는,\n * 그리드 내부의 컴포넌트가 갱신되는 현상을 초래하게 된다.\n * 따라서, focusout 핸들러에서 update를 유발하는 코드는 강력하게 금지시킨다.\n */\n this.addEventListener('focusout', e => {\n if (this._focusedListener) {\n this.removeEventListener('keydown', this._focusedListener)\n delete this._focusedListener\n }\n })\n\n this.addEventListener('focusin', e => {\n if (!this._focusedListener) {\n this._focusedListener = dataGridBodyKeydownHandler.bind(this)\n this.addEventListener('keydown', this._focusedListener)\n }\n })\n\n this.addEventListener('set-select-block', async e => {\n e.stopPropagation()\n\n const { startRow = -1, startColumn = -1, endRow = -1, endColumn = -1 } = ((e as CustomEvent).detail as any) || {}\n\n const start = this.getFieldByIndex(startRow, startColumn) as DataGridField\n const end = this.getFieldByIndex(endRow, endColumn) as DataGridField\n\n this.setSelectBlock(start, end)\n })\n\n this.renderRoot.addEventListener('mousemove', (event: Event) => {\n const e = event as MouseEvent\n if (e.buttons !== 1) {\n this._selectBlockWillBeReset = true\n return\n }\n\n const field = e.target as DataGridField\n\n if (!this._selectBlock || this._selectBlockWillBeReset) {\n this._selectBlockWillBeReset = false\n this.setSelectBlock(field)\n\n // this.dispatchEvent(\n // new CustomEvent('focus-change', {\n // bubbles: true,\n // composed: true,\n // detail: undefined\n // })\n // )\n\n return\n }\n\n var { start, end } = this._selectBlock || {}\n\n if (start !== field && !end) {\n /* cancel all selected text */\n window.getSelection()?.removeAllRanges()\n }\n\n if (start === field && !end) {\n return\n }\n\n if (start && end !== field) {\n end = field\n\n this.setSelectBlock(start, end)\n }\n })\n\n this.renderRoot.addEventListener('mouseup', (event: Event) => {\n this._selectBlockWillBeReset = true\n })\n\n this.renderRoot.addEventListener('click', dataGridBodyClickHandler.bind(this))\n\n this.renderRoot.addEventListener('dblclick', dataGridBodyDblclickHandler.bind(this))\n\n this.addEventListener('wheel', this._onWheelEvent.bind(this), supportsPassive ? { passive: true } : false)\n\n const primaryColor = getComputedStyle(this).getPropertyValue('--primary-color')\n this.style.setProperty(\n '--focused-background-image',\n `url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10'><rect fill='${primaryColor}' x='0' y='0' width='100%' height='100%' style='opacity:.3'/></svg>\")`\n )\n\n this.addEventListener('show-record-view', (e: Event) =>\n this.popupRecordView((e as CustomEvent).detail as { row: number; record: GristRecord })\n )\n }\n\n getFieldByIndex(rowIndex: number, columnIndex: number) {\n if (rowIndex < 0) {\n return\n }\n\n var columns = this.columns.filter(column => !column.hidden).length\n\n return this.renderRoot.children.item(\n rowIndex * (columns + 1) /* 1 means last dummy column */ + ((columnIndex + columns) % columns)\n )\n }\n\n _onWheelEvent(e: WheelEvent) {\n if (this.scrollHeight <= this.clientHeight) {\n var delta = Math.max(-1, Math.min(1, e.deltaY || 0))\n this.scrollLeft = Math.max(0, this.scrollLeft - delta * 40)\n supportsPassive || e.preventDefault()\n }\n }\n\n startEditTarget(row: number, column: number) {\n var { editable } = this.columns.filter(column => !column.hidden)[column].record\n\n if (!editable) {\n return\n }\n\n this.editTarget = {\n row,\n column\n }\n }\n\n shouldUpdate(changes: any) {\n if (!changes.has('editTarget')) {\n /*\n * 큰 변화에 대해서는 실제 update가 발생되기 전에 editTarget을 초기화한다.\n */\n this.editTarget = null\n }\n\n return super.shouldUpdate(changes)\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('focused')) {\n let element = this.renderRoot?.querySelector('[focused]')\n if (!element) {\n return\n }\n\n this.setSelectBlock()\n\n let { top, left } = calcScrollPos(this, element)\n // TODO this.scroll()을 사용하면, 효과가 좋으나 left 계산에 문제가 있는 것 같음.\n // this.scroll({\n // top,\n // left,\n // behavior: 'smooth'\n // })\n if (top !== undefined) {\n this.scrollTop = top\n }\n if (left !== undefined) {\n this.scrollLeft = left\n }\n }\n\n if (this._recordView) {\n this._recordView.record = this.data.records[this._recordViewRow!]\n }\n }\n\n focus() {\n super.focus()\n\n if (this.focused === ZERO_FOCUS) {\n let { records } = this.data\n let row = records.findIndex(record => record['__selected__'])\n\n this.focused = { row: row == -1 ? 0 : row, column: 0 }\n }\n }\n\n popupRecordView({ record, row }: { row: number; record: GristRecord }) {\n var titleField = this.config.list.fields[0] || 'name'\n var title = record[titleField]\n\n /* field가 오브젝트형인 경우에는 렌더러를 타이틀로 사용한다. */\n if (typeof title == 'object') {\n var column = this.config.columns.find(column => column.name == titleField)\n title = column?.record.renderer(title, column, record, row, this /* cautious */)\n }\n\n this._recordViewRow = row\n this._recordView = RecordViewHandler(\n this.config.columns,\n record,\n row,\n this,\n {\n title\n },\n () => {\n delete this._recordView\n delete this._recordViewRow\n }\n )\n }\n\n getSelectedBlockValues(): Array<Array<any>> | any | undefined {\n var { start, end } = this._selectBlock || {}\n\n if (!(start && end)) {\n start = this.focusedField\n\n if (typeof start!.value === 'string' || typeof start!.value === 'number') {\n const selection = document.getSelection()\n return selection?.toString() || this.focusedField?.value\n }\n\n end = start\n }\n\n if (start && end) {\n const startRowIndex = start.rowIndex < end.rowIndex ? start.rowIndex : end.rowIndex\n const endRowIndex = start.rowIndex < end.rowIndex ? end.rowIndex : start.rowIndex\n const startColumnIndex = start.columnIndex < end.columnIndex ? start.columnIndex : end.columnIndex\n const endColumnIndex = start.columnIndex < end.columnIndex ? end.columnIndex : start.columnIndex\n\n const columnArray = new Array(endColumnIndex - startColumnIndex + 1).fill(startColumnIndex)\n const columns = this.columns.filter(column => !column.hidden)\n\n return new Array(endRowIndex - startRowIndex + 1).fill(startRowIndex).map((start, index) => {\n const rowIndex = start + index\n const record = this.data.records[rowIndex]\n\n return columnArray.map((start, index) => {\n const columnIndex = start + index\n const column = columns[columnIndex]\n\n return record?.[column.name]\n })\n })\n }\n }\n\n async copy() {\n const copied = this.getSelectedBlockValues()\n await navigator.clipboard.writeText(\n copied instanceof Array ? JSON.stringify(this.getSelectedBlockValues()) : copied\n )\n\n const selectBlock = this.selectBlock\n if (selectBlock) {\n selectBlock.setAttribute('data-tooltip', 'copied to clipboard!')\n selectBlock.style.backgroundColor = 'red'\n selectBlock.style.opacity = '0.5'\n await sleep(500)\n selectBlock.removeAttribute('data-tooltip')\n selectBlock.style.backgroundColor = ''\n selectBlock.style.opacity = ''\n }\n }\n\n async paste() {\n try {\n const text = await navigator.clipboard.readText()\n if (!text) {\n return\n }\n\n const { row, column } = this.focused\n const { records } = this.data\n const columns = this.columns.filter(column => !column.hidden)\n var block: Array<Array<any>>\n\n try {\n var parsed = JSON.parse(text)\n } catch (ex) {\n parsed = text\n }\n\n if (!(parsed instanceof Array)) {\n block = [[parsed]]\n } else {\n block = parsed\n }\n\n block.forEach((record, rowIndex) => {\n if (!(record instanceof Array)) {\n return\n }\n\n var targetRecord = records[row + rowIndex] || { __dirty__: '+' }\n if (row + rowIndex >= records.length) {\n records.push(targetRecord)\n }\n\n record.map((item, columnIndex) => {\n const targetColumn = columns[column + columnIndex]\n if (targetColumn && !targetColumn.gutterName && targetColumn.record.editable) {\n this.dispatchEvent(\n new CustomEvent('field-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: targetRecord[targetColumn.name],\n after: item,\n column: targetColumn,\n record: targetRecord,\n row: row + rowIndex\n }\n })\n )\n }\n })\n })\n } catch (e) {\n console.error(e)\n }\n }\n\n setSelectBlock(start?: DataGridField, end?: DataGridField) {\n this._selectBlock = start && { start, end }\n\n if (start && end && start !== end) {\n const left = start.columnIndex < end.columnIndex ? start : end\n const right = left === start ? end : start\n const top = start.rowIndex < end.rowIndex ? start : end\n const bottom = top === start ? end : start\n\n const { offsetLeft } = left\n const { offsetTop } = top\n const width = right.offsetLeft - offsetLeft + right.offsetWidth\n const height = bottom.offsetTop - offsetTop + bottom.offsetHeight\n\n this.style.setProperty('--select-box-left', offsetLeft - 1 + 'px')\n this.style.setProperty('--select-box-top', offsetTop - 1 + 'px')\n this.style.setProperty('--select-box-width', width + 'px')\n this.style.setProperty('--select-box-height', height + 'px')\n\n this.dispatchEvent(\n new CustomEvent('focus-change', {\n bubbles: true,\n composed: true,\n detail: undefined\n })\n )\n }\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '@operato/popup/ox-popup.js';
|
|
2
2
|
import '@material/mwc-icon';
|
|
3
|
-
import { LitElement, PropertyValues } from 'lit';
|
|
4
3
|
import { ColumnConfig, GristConfig, GristData } from '../types';
|
|
4
|
+
import { LitElement, PropertyValues } from 'lit';
|
|
5
5
|
export declare class DataGridHeader extends LitElement {
|
|
6
6
|
static styles: import("lit").CSSResult[];
|
|
7
7
|
config: GristConfig;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import '@operato/popup/ox-popup.js';
|
|
3
3
|
import '@material/mwc-icon';
|
|
4
|
-
import { css, html
|
|
5
|
-
import { customElement, property, state } from 'lit/decorators.js';
|
|
6
|
-
import throttle from 'lodash-es/throttle';
|
|
7
|
-
import { closestElement } from '@operato/utils';
|
|
4
|
+
import { LitElement, css, html } from 'lit';
|
|
8
5
|
import { ZERO_COLUMNS, ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config';
|
|
6
|
+
import { customElement, property, state } from 'lit/decorators.js';
|
|
9
7
|
import { FilterStyles } from '../filters/filter-styles';
|
|
8
|
+
import { closestElement } from '@operato/utils';
|
|
10
9
|
import { getFilterRenderer } from '../filters/registry';
|
|
10
|
+
import throttle from 'lodash-es/throttle';
|
|
11
11
|
let DataGridHeader = class DataGridHeader extends LitElement {
|
|
12
12
|
constructor() {
|
|
13
13
|
super(...arguments);
|
|
@@ -27,7 +27,14 @@ let DataGridHeader = class DataGridHeader extends LitElement {
|
|
|
27
27
|
}
|
|
28
28
|
this._sorters = [...(sorters || [])];
|
|
29
29
|
});
|
|
30
|
-
grid === null || grid === void 0 ? void 0 : grid.addEventListener('
|
|
30
|
+
grid === null || grid === void 0 ? void 0 : grid.addEventListener('filters-change', (e) => {
|
|
31
|
+
const { filters, from } = e.detail || {};
|
|
32
|
+
if (from === 'data-grid-header') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this._filters = [...(filters || [])];
|
|
36
|
+
});
|
|
37
|
+
this === null || this === void 0 ? void 0 : this.addEventListener('filter-change', (e) => {
|
|
31
38
|
const { name, operator, value } = e.detail;
|
|
32
39
|
const filters = this._filters instanceof Array ? [...this._filters] : [];
|
|
33
40
|
if (value === undefined || value === null) {
|
|
@@ -53,13 +60,6 @@ let DataGridHeader = class DataGridHeader extends LitElement {
|
|
|
53
60
|
}
|
|
54
61
|
}));
|
|
55
62
|
});
|
|
56
|
-
grid === null || grid === void 0 ? void 0 : grid.addEventListener('filters-change', (e) => {
|
|
57
|
-
const { filters, from } = e.detail || {};
|
|
58
|
-
if (from === 'data-grid-header') {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
this._filters = [...(filters || [])];
|
|
62
|
-
});
|
|
63
63
|
}
|
|
64
64
|
render() {
|
|
65
65
|
var columns = this.columns || [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-grid-header.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-header.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/popup/ox-popup.js'\nimport '@material/mwc-icon'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport throttle from 'lodash-es/throttle'\n\nimport { OxPopup } from '@operato/popup'\nimport { closestElement } from '@operato/utils'\n\nimport { ZERO_COLUMNS, ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { FilterStyles } from '../filters/filter-styles'\nimport { getFilterRenderer } from '../filters/registry'\nimport { ColumnConfig, FilterConfigObject, FilterValue, GristConfig, GristData, SortersConfig } from '../types'\n\n@customElement('ox-grid-header')\nexport class DataGridHeader extends LitElement {\n static styles = [\n FilterStyles,\n css`\n :host {\n display: grid;\n grid-template-columns: var(--grid-template-columns);\n\n overflow: hidden;\n }\n\n div[column] {\n display: flex;\n\n white-space: nowrap;\n overflow: hidden;\n background-color: var(--grid-header-background-color);\n border-top: var(--grid-header-top-border);\n border-bottom: var(--grid-header-bottom-border);\n padding: var(--grid-header-padding);\n\n text-overflow: ellipsis;\n font: var(--grid-header-font);\n color: var(--grid-header-color);\n }\n\n div[gutter] {\n padding: var(--padding-default) 0 var(--padding-narrow) 0;\n text-align: center;\n }\n\n span {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n }\n\n span[for-title] {\n flex: 1;\n text-overflow: ellipsis;\n line-height: 1.6;\n text-transform: capitalize;\n }\n span[for-title] mwc-icon {\n font-size: var(--grid-record-fontsize);\n }\n\n span[sorter],\n span[filter] {\n padding: 0;\n border: 0;\n }\n span[sorter] mwc-icon {\n font-size: var(--grid-header-sorter-size);\n }\n\n span[filter] > mwc-icon {\n font-size: var(--fontsize-default);\n line-height: 20px;\n }\n\n span[splitter] {\n cursor: col-resize;\n border-right: var(--grid-header-splitter-border);\n }\n span[splitter]:hover {\n border-right: var(--grid-header-splitter-border-hover);\n }\n input[type='checkbox'],\n input[type='radio'] {\n margin: 3px 0 0 0;\n zoom: var(--grist-input-zoom);\n }\n [filter-title] {\n color: var(--grid-header-filter-title-color);\n font: var(--grid-header-filter-title-font);\n text-transform: capitalize;\n }\n [filter-title] * {\n vertical-align: middle;\n }\n [filter-title] mwc-icon {\n opacity: 0.7;\n color: var(--grid-header-filter-title-icon-color);\n }\n [filter] input[type='checkbox'] {\n margin-left: 10px;\n margin-bottom: 5px;\n }\n\n @media print {\n :host {\n grid-template-columns: var(--grid-template-print-columns);\n }\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = ZERO_COLUMNS\n @property({ type: Object }) data: GristData = ZERO_DATA\n\n @state() private _sorters: SortersConfig = []\n @state() private _filters: FilterValue[] = []\n\n private _lastAccVal?: number\n private _throttledNotifier?: any\n\n connectedCallback() {\n super.connectedCallback()\n\n const grid = closestElement('ox-grist', this)\n grid?.addEventListener('sorters-change', (e: Event) => {\n const { sorters, from } = (e as CustomEvent).detail || {}\n if (from === 'data-grid-header') {\n return\n }\n\n this._sorters = [...(sorters || [])]\n })\n\n grid?.addEventListener('filter-change', (e: Event) => {\n const { name, operator, value } = (e as CustomEvent).detail\n const filters = this._filters instanceof Array ? [...this._filters] : []\n\n if (value === undefined || value === null) {\n const index = filters.findIndex(filter => filter.name === name)\n if (index === -1) {\n return\n }\n\n filters.splice(index, 1)\n } else {\n const index = filters.findIndex(filter => filter.name === name)\n if (index === -1) {\n filters.push({ name, operator, value })\n } else {\n filters.splice(index, 1, { name, operator, value })\n }\n }\n\n grid?.dispatchEvent(\n new CustomEvent('filters-change', {\n detail: {\n filters,\n from: 'data-grid-header'\n }\n })\n )\n })\n\n grid?.addEventListener('filters-change', (e: Event) => {\n const { filters, from } = (e as CustomEvent).detail || {}\n if (from === 'data-grid-header') {\n return\n }\n\n this._filters = [...(filters || [])]\n })\n }\n\n render() {\n var columns = this.columns || []\n\n return html`\n ${columns.map((column, idx) =>\n !column.hidden\n ? html`\n <div ?gutter=${column.type == 'gutter'} column>\n <span for-title @click=${(e: MouseEvent) => this._changeSort(column)}\n >${this._renderHeader(column)}\n </span>\n\n ${column.sortable\n ? html`\n <span sorter @click=${(e: MouseEvent) => this._changeSort(column)}>\n ${this._renderSortHeader(column)}\n </span>\n `\n : undefined}\n ${column.filter && (column.filter as FilterConfigObject).operator !== 'search'\n ? html` <span filter> ${this._renderFilterHeader(column)} </span> `\n : undefined}\n ${column.resizable !== false\n ? html`\n <span splitter draggable=\"false\" @mousedown=${(e: MouseEvent) => this._mousedown(e, idx)}\n > </span\n >\n `\n : undefined}\n </div>\n `\n : undefined\n )}\n\n <div column></div>\n `\n }\n\n _renderHeader(column: ColumnConfig) {\n var { renderer } = column.header || {}\n var title = renderer.call(this, column)\n\n return html` ${title} `\n }\n\n _renderSortHeader(column: ColumnConfig) {\n var sorters = this._sorters\n\n var sorter = sorters.find(sorter => column.type !== 'gutter' && column.name == sorter.name)\n if (!sorter) {\n return html``\n }\n\n if (sorters.length > 1) {\n var rank = sorters.indexOf(sorter) + 1\n return sorter.desc\n ? html` <mwc-icon>keyboard_arrow_up</mwc-icon><sub>${rank}</sub> `\n : html` <mwc-icon>keyboard_arrow_down</mwc-icon><sub>${rank}</sub> `\n } else {\n return sorter.desc\n ? html` <mwc-icon>keyboard_arrow_up</mwc-icon> `\n : html` <mwc-icon>keyboard_arrow_down</mwc-icon> `\n }\n }\n\n _renderFilterHeader(column: ColumnConfig) {\n const name = column.name\n const filter = column.filter as FilterConfigObject\n const type = filter.type\n const value = this._filters.find(filter => filter.name === name)?.value\n const idx = filter!.operator === 'between' ? 1 : 0\n const renderer = getFilterRenderer(type)[idx]\n\n return html`\n <mwc-icon\n @click=${(e: Event) => {\n const parent = (e.target as HTMLElement).closest('[column]') as HTMLElement\n const popup = parent.querySelector('ox-popup, ox-popup-list') as OxPopup | null\n // const popup = (e.target as HTMLElement).nextSibling as OxPopupList | null\n\n // absolute position인 popup의 위치 부모는 grist 이므로,\n // data-grid-header 의 포지션 부모(grist)의 위치로부터 계산해야함.\n // this의 position을 relative로 하지 못하는 이유 : ox-popup-list가 grid body에 덮히기 때문.\n const top = parent.offsetTop + parent.offsetHeight\n const right = this.clientWidth - (parent.offsetLeft + parent.offsetWidth - this.scrollLeft)\n\n popup?.open({\n right,\n top\n })\n }}\n >filter_alt</mwc-icon\n >\n\n ${!renderer\n ? html``\n : type !== 'select'\n ? html` <ox-popup\n ><div filter-title><mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong></div>\n ${renderer(column, value, this)}</ox-popup\n >`\n : filter!.operator === 'in'\n ? html`<ox-popup-list\n multiple\n attr-selected=\"checked\"\n .value=${value}\n with-search\n @select=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n bubbles: true,\n composed: true,\n detail: {\n name,\n operator: filter!.operator,\n value: !e.detail\n ? undefined\n : e.detail instanceof Array && e.detail.length === 0\n ? undefined\n : e.detail\n }\n })\n )}\n ><div filter-title slot=\"header\">\n <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>\n </div>\n ${renderer(column, value, this)}</ox-popup-list\n >`\n : html`<ox-popup-list\n .value=${value}\n with-search\n @select=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n bubbles: true,\n composed: true,\n detail: {\n name,\n operator: filter!.operator,\n value: e.detail ? e.detail : undefined\n }\n })\n )}\n ><div filter-title slot=\"header\">\n <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>\n </div>\n ${renderer(column, value, this)}</ox-popup-list\n >`}\n `\n }\n\n updated(changes: PropertyValues<this>) {\n // TODO config 에 의한 sorters 설정은 제거해야 한다.\n if (changes.has('config')) {\n this._sorters = this._sorters || this.config.sorters || []\n }\n }\n\n _changeSort(column: ColumnConfig) {\n if (!column.sortable) {\n return\n }\n\n var sorters = [...this._sorters]\n\n var idx = sorters.findIndex(sorter => sorter.name == column.name)\n if (idx !== -1) {\n let sorter = sorters[idx]\n if (sorter.desc) {\n sorters.splice(idx, 1)\n } else {\n sorter.desc = true\n }\n } else {\n var sorter = {\n name: column.name\n }\n\n sorters.push(sorter)\n }\n\n this._sorters = sorters\n\n this.dispatchEvent(\n new CustomEvent('sorters-change', {\n bubbles: true,\n composed: true,\n detail: {\n sorters: this._sorters,\n from: 'data-grid-header'\n }\n })\n )\n }\n\n _accumalate(x: number) {\n this._lastAccVal = (this._lastAccVal ?? 0) + x\n return this._lastAccVal\n }\n\n _notifyWidthChange(idx: number, width: number) {\n if (!this._throttledNotifier) {\n this._throttledNotifier = throttle((idx: number, width: number) => {\n this.dispatchEvent(\n new CustomEvent('column-width-change', {\n bubbles: true,\n composed: true,\n detail: {\n idx,\n width\n }\n })\n )\n\n this._lastAccVal = 0\n }, 100)\n }\n\n this._throttledNotifier(idx, width)\n }\n\n _mousedown(e: MouseEvent, idx: number) {\n e.stopPropagation()\n e.preventDefault()\n\n var mousemoveHandler = ((e: MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n let column = this.columns[idx]\n\n let width = Math.max(0, Number(column.width) + this._accumalate(e.movementX))\n if (width == 0) {\n /* CLARIFY-ME 왜 마지막 이벤트의 offsetX로 음수 값이 오는가 */\n return\n }\n\n this._notifyWidthChange(idx, width)\n }).bind(this)\n\n var mouseupHandler = ((e: MouseEvent) => {\n document.removeEventListener('mousemove', mousemoveHandler)\n document.removeEventListener('mouseup', mouseupHandler)\n\n mousemoveHandler(e)\n }).bind(this)\n\n document.addEventListener('mousemove', mousemoveHandler)\n document.addEventListener('mouseup', mouseupHandler)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"data-grid-header.js","sourceRoot":"","sources":["../../../src/data-grid/data-grid-header.ts"],"names":[],"mappings":"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","sourcesContent":["import '@operato/popup/ox-popup.js'\nimport '@material/mwc-icon'\n\nimport { ColumnConfig, FilterConfigObject, FilterValue, GristConfig, GristData, SortersConfig } from '../types'\nimport { LitElement, PropertyValues, css, html } from 'lit'\nimport { ZERO_COLUMNS, ZERO_CONFIG, ZERO_DATA } from '../configure/zero-config'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { FilterStyles } from '../filters/filter-styles'\nimport { OxPopup } from '@operato/popup'\nimport { closestElement } from '@operato/utils'\nimport { getFilterRenderer } from '../filters/registry'\nimport throttle from 'lodash-es/throttle'\n\n@customElement('ox-grid-header')\nexport class DataGridHeader extends LitElement {\n static styles = [\n FilterStyles,\n css`\n :host {\n display: grid;\n grid-template-columns: var(--grid-template-columns);\n\n overflow: hidden;\n }\n\n div[column] {\n display: flex;\n\n white-space: nowrap;\n overflow: hidden;\n background-color: var(--grid-header-background-color);\n border-top: var(--grid-header-top-border);\n border-bottom: var(--grid-header-bottom-border);\n padding: var(--grid-header-padding);\n\n text-overflow: ellipsis;\n font: var(--grid-header-font);\n color: var(--grid-header-color);\n }\n\n div[gutter] {\n padding: var(--padding-default) 0 var(--padding-narrow) 0;\n text-align: center;\n }\n\n span {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n }\n\n span[for-title] {\n flex: 1;\n text-overflow: ellipsis;\n line-height: 1.6;\n text-transform: capitalize;\n }\n span[for-title] mwc-icon {\n font-size: var(--grid-record-fontsize);\n }\n\n span[sorter],\n span[filter] {\n padding: 0;\n border: 0;\n }\n span[sorter] mwc-icon {\n font-size: var(--grid-header-sorter-size);\n }\n\n span[filter] > mwc-icon {\n font-size: var(--fontsize-default);\n line-height: 20px;\n }\n\n span[splitter] {\n cursor: col-resize;\n border-right: var(--grid-header-splitter-border);\n }\n span[splitter]:hover {\n border-right: var(--grid-header-splitter-border-hover);\n }\n input[type='checkbox'],\n input[type='radio'] {\n margin: 3px 0 0 0;\n zoom: var(--grist-input-zoom);\n }\n [filter-title] {\n color: var(--grid-header-filter-title-color);\n font: var(--grid-header-filter-title-font);\n text-transform: capitalize;\n }\n [filter-title] * {\n vertical-align: middle;\n }\n [filter-title] mwc-icon {\n opacity: 0.7;\n color: var(--grid-header-filter-title-icon-color);\n }\n [filter] input[type='checkbox'] {\n margin-left: 10px;\n margin-bottom: 5px;\n }\n\n @media print {\n :host {\n grid-template-columns: var(--grid-template-print-columns);\n }\n }\n `\n ]\n\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Array }) columns: ColumnConfig[] = ZERO_COLUMNS\n @property({ type: Object }) data: GristData = ZERO_DATA\n\n @state() private _sorters: SortersConfig = []\n @state() private _filters: FilterValue[] = []\n\n private _lastAccVal?: number\n private _throttledNotifier?: any\n\n connectedCallback() {\n super.connectedCallback()\n\n const grid = closestElement('ox-grist', this)\n grid?.addEventListener('sorters-change', (e: Event) => {\n const { sorters, from } = (e as CustomEvent).detail || {}\n if (from === 'data-grid-header') {\n return\n }\n\n this._sorters = [...(sorters || [])]\n })\n\n grid?.addEventListener('filters-change', (e: Event) => {\n const { filters, from } = (e as CustomEvent).detail || {}\n if (from === 'data-grid-header') {\n return\n }\n\n this._filters = [...(filters || [])]\n })\n\n this?.addEventListener('filter-change', (e: Event) => {\n const { name, operator, value } = (e as CustomEvent).detail\n const filters = this._filters instanceof Array ? [...this._filters] : []\n\n if (value === undefined || value === null) {\n const index = filters.findIndex(filter => filter.name === name)\n if (index === -1) {\n return\n }\n\n filters.splice(index, 1)\n } else {\n const index = filters.findIndex(filter => filter.name === name)\n if (index === -1) {\n filters.push({ name, operator, value })\n } else {\n filters.splice(index, 1, { name, operator, value })\n }\n }\n\n grid?.dispatchEvent(\n new CustomEvent('filters-change', {\n detail: {\n filters,\n from: 'data-grid-header'\n }\n })\n )\n })\n }\n\n render() {\n var columns = this.columns || []\n\n return html`\n ${columns.map((column, idx) =>\n !column.hidden\n ? html`\n <div ?gutter=${column.type == 'gutter'} column>\n <span for-title @click=${(e: MouseEvent) => this._changeSort(column)}\n >${this._renderHeader(column)}\n </span>\n\n ${column.sortable\n ? html`\n <span sorter @click=${(e: MouseEvent) => this._changeSort(column)}>\n ${this._renderSortHeader(column)}\n </span>\n `\n : undefined}\n ${column.filter && (column.filter as FilterConfigObject).operator !== 'search'\n ? html` <span filter> ${this._renderFilterHeader(column)} </span> `\n : undefined}\n ${column.resizable !== false\n ? html`\n <span splitter draggable=\"false\" @mousedown=${(e: MouseEvent) => this._mousedown(e, idx)}\n > </span\n >\n `\n : undefined}\n </div>\n `\n : undefined\n )}\n\n <div column></div>\n `\n }\n\n _renderHeader(column: ColumnConfig) {\n var { renderer } = column.header || {}\n var title = renderer.call(this, column)\n\n return html` ${title} `\n }\n\n _renderSortHeader(column: ColumnConfig) {\n var sorters = this._sorters\n\n var sorter = sorters.find(sorter => column.type !== 'gutter' && column.name == sorter.name)\n if (!sorter) {\n return html``\n }\n\n if (sorters.length > 1) {\n var rank = sorters.indexOf(sorter) + 1\n return sorter.desc\n ? html` <mwc-icon>keyboard_arrow_up</mwc-icon><sub>${rank}</sub> `\n : html` <mwc-icon>keyboard_arrow_down</mwc-icon><sub>${rank}</sub> `\n } else {\n return sorter.desc\n ? html` <mwc-icon>keyboard_arrow_up</mwc-icon> `\n : html` <mwc-icon>keyboard_arrow_down</mwc-icon> `\n }\n }\n\n _renderFilterHeader(column: ColumnConfig) {\n const name = column.name\n const filter = column.filter as FilterConfigObject\n const type = filter.type\n const value = this._filters.find(filter => filter.name === name)?.value\n const idx = filter!.operator === 'between' ? 1 : 0\n const renderer = getFilterRenderer(type)[idx]\n\n return html`\n <mwc-icon\n @click=${(e: Event) => {\n const parent = (e.target as HTMLElement).closest('[column]') as HTMLElement\n const popup = parent.querySelector('ox-popup, ox-popup-list') as OxPopup | null\n // const popup = (e.target as HTMLElement).nextSibling as OxPopupList | null\n\n // absolute position인 popup의 위치 부모는 grist 이므로,\n // data-grid-header 의 포지션 부모(grist)의 위치로부터 계산해야함.\n // this의 position을 relative로 하지 못하는 이유 : ox-popup-list가 grid body에 덮히기 때문.\n const top = parent.offsetTop + parent.offsetHeight\n const right = this.clientWidth - (parent.offsetLeft + parent.offsetWidth - this.scrollLeft)\n\n popup?.open({\n right,\n top\n })\n }}\n >filter_alt</mwc-icon\n >\n\n ${!renderer\n ? html``\n : type !== 'select'\n ? html` <ox-popup\n ><div filter-title><mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong></div>\n ${renderer(column, value, this)}</ox-popup\n >`\n : filter!.operator === 'in'\n ? html`<ox-popup-list\n multiple\n attr-selected=\"checked\"\n .value=${value}\n with-search\n @select=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n bubbles: true,\n composed: true,\n detail: {\n name,\n operator: filter!.operator,\n value: !e.detail\n ? undefined\n : e.detail instanceof Array && e.detail.length === 0\n ? undefined\n : e.detail\n }\n })\n )}\n ><div filter-title slot=\"header\">\n <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>\n </div>\n ${renderer(column, value, this)}</ox-popup-list\n >`\n : html`<ox-popup-list\n .value=${value}\n with-search\n @select=${(e: CustomEvent) =>\n e.target?.dispatchEvent(\n new CustomEvent('filter-change', {\n bubbles: true,\n composed: true,\n detail: {\n name,\n operator: filter!.operator,\n value: e.detail ? e.detail : undefined\n }\n })\n )}\n ><div filter-title slot=\"header\">\n <mwc-icon>filter_alt</mwc-icon> filter by <strong>${column.name}</strong>\n </div>\n ${renderer(column, value, this)}</ox-popup-list\n >`}\n `\n }\n\n updated(changes: PropertyValues<this>) {\n // TODO config 에 의한 sorters 설정은 제거해야 한다.\n if (changes.has('config')) {\n this._sorters = this._sorters || this.config.sorters || []\n }\n }\n\n _changeSort(column: ColumnConfig) {\n if (!column.sortable) {\n return\n }\n\n var sorters = [...this._sorters]\n\n var idx = sorters.findIndex(sorter => sorter.name == column.name)\n if (idx !== -1) {\n let sorter = sorters[idx]\n if (sorter.desc) {\n sorters.splice(idx, 1)\n } else {\n sorter.desc = true\n }\n } else {\n var sorter = {\n name: column.name\n }\n\n sorters.push(sorter)\n }\n\n this._sorters = sorters\n\n this.dispatchEvent(\n new CustomEvent('sorters-change', {\n bubbles: true,\n composed: true,\n detail: {\n sorters: this._sorters,\n from: 'data-grid-header'\n }\n })\n )\n }\n\n _accumalate(x: number) {\n this._lastAccVal = (this._lastAccVal ?? 0) + x\n return this._lastAccVal\n }\n\n _notifyWidthChange(idx: number, width: number) {\n if (!this._throttledNotifier) {\n this._throttledNotifier = throttle((idx: number, width: number) => {\n this.dispatchEvent(\n new CustomEvent('column-width-change', {\n bubbles: true,\n composed: true,\n detail: {\n idx,\n width\n }\n })\n )\n\n this._lastAccVal = 0\n }, 100)\n }\n\n this._throttledNotifier(idx, width)\n }\n\n _mousedown(e: MouseEvent, idx: number) {\n e.stopPropagation()\n e.preventDefault()\n\n var mousemoveHandler = ((e: MouseEvent) => {\n e.stopPropagation()\n e.preventDefault()\n let column = this.columns[idx]\n\n let width = Math.max(0, Number(column.width) + this._accumalate(e.movementX))\n if (width == 0) {\n /* CLARIFY-ME 왜 마지막 이벤트의 offsetX로 음수 값이 오는가 */\n return\n }\n\n this._notifyWidthChange(idx, width)\n }).bind(this)\n\n var mouseupHandler = ((e: MouseEvent) => {\n document.removeEventListener('mousemove', mousemoveHandler)\n document.removeEventListener('mouseup', mouseupHandler)\n\n mousemoveHandler(e)\n }).bind(this)\n\n document.addEventListener('mousemove', mousemoveHandler)\n document.addEventListener('mouseup', mouseupHandler)\n }\n}\n"]}
|
package/dist/src/data-grist.d.ts
CHANGED
|
@@ -28,9 +28,9 @@ export declare class DataGrist extends LitElement implements DataConsumer {
|
|
|
28
28
|
private _headroom?;
|
|
29
29
|
private orginPaddingTop?;
|
|
30
30
|
private originMarginTop?;
|
|
31
|
-
private _popstateEventHandler
|
|
32
|
-
private
|
|
33
|
-
private
|
|
31
|
+
private _popstateEventHandler;
|
|
32
|
+
private _filtersChangeEventHandler;
|
|
33
|
+
private _sortersChangeEventHandler;
|
|
34
34
|
head: HTMLElement;
|
|
35
35
|
grist: DataGrid | DataList | DataCard;
|
|
36
36
|
private wrap;
|