@operato/data-grist 2.0.0-alpha.4 → 2.0.0-alpha.44
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 +196 -0
- package/dist/src/accumulator/accumulator.js +4 -4
- package/dist/src/accumulator/accumulator.js.map +1 -1
- package/dist/src/configure/rows-option-builder.js +2 -1
- package/dist/src/configure/rows-option-builder.js.map +1 -1
- package/dist/src/configure/zero-config.js +1 -0
- package/dist/src/configure/zero-config.js.map +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js +1 -1
- package/dist/src/data-card/event-handlers/record-card-click-handler.js.map +1 -1
- package/dist/src/data-grid/data-grid-accum-field.js +3 -2
- package/dist/src/data-grid/data-grid-accum-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-body.d.ts +2 -2
- package/dist/src/data-grid/data-grid-body.js +9 -4
- package/dist/src/data-grid/data-grid-body.js.map +1 -1
- package/dist/src/data-grid/data-grid-field.d.ts +1 -1
- package/dist/src/data-grid/data-grid-field.js +2 -2
- package/dist/src/data-grid/data-grid-field.js.map +1 -1
- package/dist/src/data-grid/data-grid-header.d.ts +1 -0
- package/dist/src/data-grid/data-grid-header.js +16 -14
- package/dist/src/data-grid/data-grid-header.js.map +1 -1
- package/dist/src/data-grist.d.ts +225 -3
- package/dist/src/data-grist.js +195 -3
- package/dist/src/data-grist.js.map +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js +1 -1
- package/dist/src/data-list/event-handlers/record-partial-click-handler.js.map +1 -1
- package/dist/src/data-manipulator.d.ts +6 -6
- package/dist/src/data-manipulator.js +44 -29
- package/dist/src/data-manipulator.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-checkbox.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-checkbox.js +9 -2
- package/dist/src/editors/ox-grist-editor-checkbox.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-datetime.js +1 -2
- package/dist/src/editors/ox-grist-editor-datetime.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-file.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-file.js +8 -2
- package/dist/src/editors/ox-grist-editor-file.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-image.d.ts +1 -1
- package/dist/src/editors/ox-grist-editor-image.js +8 -8
- package/dist/src/editors/ox-grist-editor-image.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-number.d.ts +2 -1
- package/dist/src/editors/ox-grist-editor-number.js +9 -9
- package/dist/src/editors/ox-grist-editor-number.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-text.d.ts +1 -0
- package/dist/src/editors/ox-grist-editor-text.js +3 -0
- package/dist/src/editors/ox-grist-editor-text.js.map +1 -1
- package/dist/src/editors/ox-grist-editor-textarea.d.ts +1 -0
- package/dist/src/editors/ox-grist-editor-textarea.js +3 -0
- package/dist/src/editors/ox-grist-editor-textarea.js.map +1 -1
- package/dist/src/editors/ox-grist-editor.d.ts +2 -2
- package/dist/src/editors/ox-grist-editor.js +14 -12
- package/dist/src/editors/ox-grist-editor.js.map +1 -1
- package/dist/src/filters/filter-range-date.js +12 -1
- package/dist/src/filters/filter-range-date.js.map +1 -1
- package/dist/src/filters/filters-form.d.ts +1 -0
- package/dist/src/filters/filters-form.js +21 -3
- package/dist/src/filters/filters-form.js.map +1 -1
- package/dist/src/handlers/contextmenu-tree-mutation.js +1 -19
- package/dist/src/handlers/contextmenu-tree-mutation.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +1 -8
- package/dist/src/types.js.map +1 -1
- package/dist/stories/accumulator.stories.js +10 -5
- package/dist/stories/accumulator.stories.js.map +1 -1
- package/dist/stories/dynamic-editable.stories.js +89 -80
- package/dist/stories/dynamic-editable.stories.js.map +1 -1
- package/dist/stories/fixed-column.stories.js +3 -3
- package/dist/stories/fixed-column.stories.js.map +1 -1
- package/dist/stories/grist-modes.stories.js +23 -2
- package/dist/stories/grist-modes.stories.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/default-value/default-value.md +1 -1
- package/docs/default-value/value-generator/date-generator.md +2 -2
- package/docs/default-value/value-generator/month-date-generator.md +2 -2
- package/docs/default-value/value-generator/week-date-generator.md +2 -2
- package/docs/default-value/value-generator/year-date-generator.md +2 -2
- package/package.json +19 -18
- package/src/accumulator/accumulator.ts +4 -4
- package/src/configure/rows-option-builder.ts +11 -1
- package/src/configure/zero-config.ts +1 -0
- package/src/data-card/event-handlers/record-card-click-handler.ts +1 -1
- package/src/data-grid/data-grid-accum-field.ts +3 -2
- package/src/data-grid/data-grid-body.ts +10 -5
- package/src/data-grid/data-grid-field.ts +1 -1
- package/src/data-grid/data-grid-header.ts +22 -18
- package/src/data-grist.ts +250 -3
- package/src/data-list/event-handlers/record-partial-click-handler.ts +1 -1
- package/src/data-manipulator.ts +52 -31
- package/src/editors/ox-grist-editor-checkbox.ts +12 -2
- package/src/editors/ox-grist-editor-datetime.ts +1 -2
- package/src/editors/ox-grist-editor-file.ts +12 -2
- package/src/editors/ox-grist-editor-image.ts +10 -7
- package/src/editors/ox-grist-editor-number.ts +11 -9
- package/src/editors/ox-grist-editor-text.ts +4 -0
- package/src/editors/ox-grist-editor-textarea.ts +4 -0
- package/src/editors/ox-grist-editor.ts +14 -10
- package/src/filters/filter-range-date.ts +16 -1
- package/src/filters/filters-form.ts +25 -2
- package/src/handlers/contextmenu-tree-mutation.ts +1 -19
- package/src/index.ts +0 -1
- package/src/types.ts +1 -9
- package/stories/accumulator.stories.ts +10 -5
- package/stories/dynamic-editable.stories.ts +96 -86
- package/stories/fixed-column.stories.ts +3 -3
- package/stories/grist-modes.stories.ts +23 -2
- package/themes/grist-theme.css +1 -1
- package/dist/src/value-generator/date-generator.d.ts +0 -6
- package/dist/src/value-generator/date-generator.js +0 -30
- package/dist/src/value-generator/date-generator.js.map +0 -1
- package/dist/src/value-generator/hour-time-generator.d.ts +0 -7
- package/dist/src/value-generator/hour-time-generator.js +0 -29
- package/dist/src/value-generator/hour-time-generator.js.map +0 -1
- package/dist/src/value-generator/index.d.ts +0 -1
- package/dist/src/value-generator/index.js +0 -2
- package/dist/src/value-generator/index.js.map +0 -1
- package/dist/src/value-generator/minute-time-generator.d.ts +0 -7
- package/dist/src/value-generator/minute-time-generator.js +0 -29
- package/dist/src/value-generator/minute-time-generator.js.map +0 -1
- package/dist/src/value-generator/month-date-generator.d.ts +0 -7
- package/dist/src/value-generator/month-date-generator.js +0 -31
- package/dist/src/value-generator/month-date-generator.js.map +0 -1
- package/dist/src/value-generator/now-generator.d.ts +0 -4
- package/dist/src/value-generator/now-generator.js +0 -8
- package/dist/src/value-generator/now-generator.js.map +0 -1
- package/dist/src/value-generator/registry.d.ts +0 -11
- package/dist/src/value-generator/registry.js +0 -50
- package/dist/src/value-generator/registry.js.map +0 -1
- package/dist/src/value-generator/time-generator.d.ts +0 -6
- package/dist/src/value-generator/time-generator.js +0 -28
- package/dist/src/value-generator/time-generator.js.map +0 -1
- package/dist/src/value-generator/today-generator.d.ts +0 -4
- package/dist/src/value-generator/today-generator.js +0 -8
- package/dist/src/value-generator/today-generator.js.map +0 -1
- package/dist/src/value-generator/week-date-generator.d.ts +0 -7
- package/dist/src/value-generator/week-date-generator.js +0 -29
- package/dist/src/value-generator/week-date-generator.js.map +0 -1
- package/dist/src/value-generator/year-date-generator.d.ts +0 -7
- package/dist/src/value-generator/year-date-generator.js +0 -29
- package/dist/src/value-generator/year-date-generator.js.map +0 -1
- package/src/value-generator/date-generator.ts +0 -35
- package/src/value-generator/hour-time-generator.ts +0 -43
- package/src/value-generator/index.ts +0 -1
- package/src/value-generator/minute-time-generator.ts +0 -43
- package/src/value-generator/month-date-generator.ts +0 -38
- package/src/value-generator/now-generator.ts +0 -10
- package/src/value-generator/registry.ts +0 -58
- package/src/value-generator/time-generator.ts +0 -33
- package/src/value-generator/today-generator.ts +0 -10
- package/src/value-generator/week-date-generator.ts +0 -40
- package/src/value-generator/year-date-generator.ts +0 -36
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-grist.js","sourceRoot":"","sources":["../../src/data-grist.ts"],"names":[],"mappings":";AAAA,OAAO,uBAAuB,CAAA;AAC9B,OAAO,uBAAuB,CAAA;AAC9B,OAAO,uBAAuB,CAAA;AAE9B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAkB,MAAM,KAAK,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,OAAO,MAAM,mBAAmB,CAAA;AACvC,OAAO,OAAO,MAAM,mBAAmB,CAAA;AAEvC,OAAO,QAAQ,MAAM,mBAAmB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAK7F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAa9C,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAA;AAGjF,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,UAAU;IAAlC;;QAmDO,SAAI,GAA6B,MAAM,CAAA;QAEvB,SAAI,GAAc,SAAS,CAAA;QAEG,kBAAa,GAAY,KAAK,CAAA;QAQ/E,UAAK,GAAc,SAAS,CAAA;QAC5B,YAAO,GAAgB,WAAW,CAAA;QAC1B,iBAAY,GAAY,KAAK,CAAA;QActC,iBAAY,GAA4D,EAAE,CAAA;QAE1E,yBAAoB,GAAkB,CAAC,CAAC,CAAQ,EAAE,EAAE;YAC1D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAA;YACpD,IACE,IAAI,CAAC,YAAY,CAAC,MAAM;gBACxB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,MAAM;oBAClC,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,QAAQ;oBACvC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,MAAM,CAAC,EACtC,CAAC;gBACD,OAAM;YACR,CAAC;YAED,IAAI,CAAC,YAAY,GAAG;gBAClB,MAAM;gBACN,QAAQ;gBACR,MAAM;aACP,CAAA;YAED,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,8BAA8B,CAAC,MAAM,CAAC,CAAA;YAE3E,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACvE,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,qBAAqB,EAAE;wBACrC,OAAO,EAAE,IAAI;wBACb,QAAQ,EAAE,IAAI;wBACd,MAAM,EAAE;4BACN,OAAO;4BACP,OAAO;4BACP,IAAI,EAAE,eAAe;yBACtB;qBACF,CAAC,CACH,CAAA;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,EAAE,CAAC,CAAA;YAClE,CAAC;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEL,kCAA6B,GAAkB,CAAC,CAAC,CAAQ,EAAE,EAAE;YACnE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAI,CAAiB,CAAC,MAAM,CAAA;YAE5D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAA;YACnC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAA;YAEnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;gBACzD,OAAM;YACR,CAAC;YAED,MAAM,WAAW,GAAG,8BAA8B,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YACtG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;YAEpE,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAqqBf,CAAC;IAnqBC,KAAK,CAAC,YAAY;QAChB,kDAAkD;QAClD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE;YAClD,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAEzB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAY,CAAC,CAAA;QAE/D,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAEhF,MAAM,IAAI,CAAC,cAAc,CAAA;IAC3B,CAAC;IAED,oBAAoB;;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAE5B,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAEnF,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;QAC9C,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;QAElD,OAAO,IAAI,CAAC,WAAW,CAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAA;QAEzB,MAAA,IAAI,CAAC,YAAY,0CAAE,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAA;IAC3B,CAAC;IAEO,kBAAkB;QACxB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAA;QACjC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9C,IAAI,CAAC,mBAAmB,GAAG,aAAa,CAAC;gBACvC,SAAS,EAAE,MAAM,IAAI,CAAC,IAAI;gBAC1B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB;gBAC1C,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACzB,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEO,SAAS;;QACf,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;YACzB,GAAG,IAAI,CAAC,MAAM;SACf,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,eAAe,EAAE;YAC/B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI,CAAC,cAAc;SAC5B,CAAC,CACH,CAAA;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,EAAE,CAAA;QAEtD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CAAA;YAC5C,MAAM,OAAO,GAAG,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CACzC,MAAM,CACL,MAAM,CAAC,EAAE,CACP,MAAM,CAAC,MAAM;gBACb,OAAO,IAAK,MAAM,CAAC,MAA6B;gBAC/C,MAAM,CAAC,MAA6B,CAAC,KAAK,EAE9C,GAAG,CAAC,MAAM,CAAC,EAAE;gBACZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4B,CAAA;gBAClD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAiB,CAAA;YAC7F,CAAC,CAAC,CAAA;YAEJ,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,qBAAqB,EAAE;gBACrC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,OAAO;oBACP,OAAO;oBACP,IAAI,EAAE,QAAQ;iBACf;aACF,CAAC,CACH,CAAA;QACH,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,eAAe,CAAA;YAChF,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAA;YAC1B,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACpD,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;IACH,CAAC;IAEO,WAAW;;QACjB,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,EAAE,CAAA;QAExB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAA;YAC9C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,IAAI,GAAG,CAAA;YAE7C,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;gBACtC,QAAQ,EAAE,IAAI,CAAC,KAAK;gBACpB,KAAK,EAAE,GAAG,EAAE;oBACV,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAgB,CAAA;oBACnD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAA;oBAEjD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;gBAC5D,CAAC;gBACD,QAAQ,EAAE,GAAG,EAAE;oBACb,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,eAAgB,CAAA;oBAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAA;oBAElD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;gBAC7D,CAAC;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QACtB,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAA;YAClD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,eAAgB,CAAA;QACpD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QAElE,OAAO,IAAI,CAAA;gCACiB,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;UAC7D,IAAI,CAAC,IAAI,IAAI,MAAM;YACnB,CAAC,CAAC,IAAI,CAAA;;;0BAGU,IAAI,CAAC,cAAc;wBACrB,IAAI,CAAC,KAAK;2BACP,IAAI,CAAC,OAAO,IAAI,EAAE;2BAClB,IAAI,CAAC,OAAO,IAAI,EAAE;8BACf,IAAI,CAAC,UAAU,IAAI,EAAE;yBAC1B,KAAK;;;aAGjB;YACH,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM;gBACrB,CAAC,CAAC,IAAI,CAAA;;;0BAGU,IAAI,CAAC,cAAc;wBACrB,IAAI,CAAC,KAAK;2BACP,IAAI,CAAC,OAAO,IAAI,EAAE;2BAClB,IAAI,CAAC,OAAO,IAAI,EAAE;yBACpB,KAAK;;;aAGjB;gBACH,CAAC,CAAC,IAAI,CAAA;;;0BAGU,IAAI,CAAC,cAAc;wBACrB,IAAI,CAAC,KAAK;2BACP,IAAI,CAAC,OAAO,IAAI,EAAE;2BAClB,IAAI,CAAC,OAAO,IAAI,EAAE;yBACpB,KAAK;;;aAGjB;;;gCAGmB,IAAI,CAAC,YAAY;;;KAG5C,CAAA;IACH,CAAC;IAED,6BAA6B;IACrB,SAAS,CAAC,CAAgB;QAChC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,EAAE,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,EAAE,CAAA;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;IAED,IAAI;;QACF,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,YAAY,CAAA,EAAE,CAAC;YACpC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAA,IAAI,CAAC,WAAW,0CAAE,QAAQ,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,IAAI;;QACF,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,WAAW,CAAA,EAAE,CAAC;YACnC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAA,IAAI,CAAC,WAAW,0CAAE,OAAO,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI;;QACtB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,sBAAsB;YACtB,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB;;;eAGG;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,EAAE,CAAA;YACzF,IAAI,EAAE,KAAK,GAAG,SAAS,IAAI,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,QAAQ,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAA;YAE/G,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACrC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;oBAC5B,KAAK;oBACL,IAAI;oBACJ,OAAO,EAAE,IAAI,CAAC,OAAO,KAAI,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CAAA;oBACrD,QAAQ,EAAE,IAAI,CAAC,OAAO,KAAI,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CAAA;oBACtD,OAAO,EAAE,IAAI,CAAC,OAAO;iBACtB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA6B;QACzC,IAAI,sBAAsB,GAAG,KAAK,CAAA;QAElC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC5B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,EAAE,CAAA;QAClB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;YACzE,sBAAsB,GAAG,IAAI,CAAA;QAC/B,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;QAC3E,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YACnD,CAAC;YAED,sBAAsB,GAAG,IAAI,CAAA;YAC7B,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;YACjC,IAAI,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAA;YAEhD,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAA;YAErC,kDAAkD;YAClD,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBACjC,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACrC,IAAI,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAC5B,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,cAAc,CAAC,GAAG,IAAI,CAAA;gBAC/B,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,yCAAyC;YACzC,IAAI,CAAC,OAAO,EAAE,CAAA;QAChB,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,YAAY;gBACZ,IAAI,CAAC,oBAAoB,EAAE,CAAA,CAAC,0BAA0B;gBAEtD,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;YACnE,CAAC;QACH,CAAC;QAED,IAAI,sBAAsB,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,SAAS;;QACX,OAAO,CAAA,MAAC,IAAI,CAAC,KAAa,0CAAE,IAAI,KAAI,EAAE,CAAA;IACxC,CAAC;IAED,IAAI,YAAY;QACd,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QACrC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IACtD,CAAC;IAED,eAAe,CAAC,EAAE,QAAQ,GAAG,WAAW,EAAE,SAAS,GAAG,GAAG,EAAE,WAAW,GAAG,GAAG,EAAE,YAAY,GAAG,GAAG,EAAE,OAAO,GAAG,IAAI,EAAE;QAChH,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACpC,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;YAE3B,IAAI,KAAK,GAAG;gBACV,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;aAC/E,CAAA;YAED,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;YAClC,CAAC;YAED,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;gBACvC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;YAC1B,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,aAAa,CAAC,EAAE,cAAc,GAAG,IAAI,EAAE,kBAAkB,GAAG,IAAI,EAAE,GAAG,EAAE;QACrE,IAAI,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QAEhE,IAAI,cAAc,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAA;QAC7B,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QACpF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACpD,CAAC;QACD,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEpD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACxB,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACzC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBACzB,OAAO,MAAM,CAAA;YACf,CAAC,EAAE,EAAS,CAAC,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,QAAQ;;QACV,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAA;QACvC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,IAAI,QAAQ,CAAC,QAAuB;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC/B,OAAM;QACR,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,QAA6B,EAAE,QAAiB,KAAK;;QAC1D,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAA;QAEvC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAA;QAChE,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;QAC1F,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,MAAM;QACJ,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAErD,IAAI,CAAC,IAAI,GAAG;YACV,IAAI;YACJ,KAAK;YACL,KAAK;YACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;gBAC5B,IAAI,MAAM,GAAG;oBACX,GAAG,MAAM;iBACV,CAAA;gBAED,OAAO,MAAM,CAAC,OAAO,CAAA;gBACrB,OAAO,MAAM,CAAC,SAAS,CAAA;gBACvB,OAAO,MAAM,CAAC,YAAY,CAAA;gBAC1B,OAAO,MAAM,CAAC,WAAW,CAAA;gBACzB,OAAO,MAAM,CAAC,eAAe,CAAA;gBAC7B,OAAO,MAAM,CAAC,UAAU,CAAA;gBACxB,OAAO,MAAM,CAAC,SAAS,CAAA;gBACvB,OAAO,MAAM,CAAC,YAAY,CAAA;gBAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAA;gBAC/B,OAAO,MAAM,CAAC,YAAY,CAAA;gBAC1B,OAAO,MAAM,CAAC,UAAU,CAAA;gBAExB,OAAO,MAAM,CAAA;YACf,CAAC,CAAC;SACH,CAAA;IACH,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;YACjC,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,YAAY;QACV,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;YAChC,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED,cAAc;QACZ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;YACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;YAE/D,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC;IAED;;;;;;OAMG;IACH,KAAK;;QACH,IAAI,EACF,KAAK,GAAG,eAAe,CAAC,KAAK,EAC7B,IAAI,GAAG,eAAe,CAAC,IAAI,EAC3B,KAAK,GAAG,eAAe,CAAC,KAAK,EAC7B,OAAO,GAAG,EAAE,EACb,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAA;QAEhC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAA;QAE/D,oCAAoC;QACpC,OAAO,GAAI,EAAoB,CAAC,MAAM,CACpC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAC7B,IAAI,CAAC,aAAa,CAChB,MAAM,EACN,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAC5D,CAAC,EACD,gBAAgB,EAChB,QAAyB,CAC1B,CACF,CACF,CAAA;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,GAAI,EAAoB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACjG,CAAC;QAED,IAAI,CAAC,KAAK,GAAG;YACX,KAAK;YACL,IAAI;YACJ,KAAK;YACL,OAAO;SACR,CAAA;QAED,MAAA,IAAI,CAAC,WAAW,0CAAE,KAAK,EAAE,CAAA;QACzB,MAAA,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEO,aAAa,CACnB,MAAmB,EACnB,GAAW,EACX,SAAiB,EACjB,gBAAoC,EACpC,QAAuB;QAEvB,MAAM,MAAM,GAAG;YACb,GAAG,MAAM;YACT,OAAO,EAAE,GAAG;YACZ,UAAU,EAAE,MAAM;SACnB,CAAA;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAkB,MAAM,CAAC,gBAAiB,CAAC,CAAA;YAEzD,MAAM,YAAY,GAAI,QAAqB,CAAC,MAAM,CAAC,CAAA;YACnD,MAAM,YAAY,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAChD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,GAAG,CAAC,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAC1E,CAAA;YAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,gBAAgB,CAAC,MAAmB;QAC1C,MAAM,EAAE,YAAY,EAAE,YAAY,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;QAElD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACpF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,YAAY;;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAA;QACjC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAA;QAElD,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;YAEvC,IAAI,WAAW,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,OAAO;iBACnD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;iBAChG,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACtB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;gBAEtB,GAAG,CAAC,IAAI,CAAC,GAAG;oBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;oBACpB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC;iBACpB,CAAA;gBAED,OAAO,GAAG,CAAA;YACZ,CAAC,EAAE,EAAS,CAAC,CAAC,CAAA;YAEhB,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAElC,MAAA,IAAI,CAAC,aAAa,0CAAE,KAAK,EAAE,CAAA;IAC7B,CAAC;IAED,oBAAoB;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAK,EAAoB,CAAA;QAEtD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,MAAM,GAAG;gBACX,SAAS,EAAE,GAAG;aACA,CAAA;YAEhB,IAAI,CAAC,cAAc,CAAC,OAAO;iBACxB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;iBACxC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAChB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAA;YACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YAExE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAED,qBAAqB,CAAC,KAAK,GAAG,IAAI;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAK,EAAoB,CAAA;QAEtD,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,SAAS,GAAG,GAAG,CAAA;YACxB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;YACxE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAED,IAAI,UAAU;;QACZ,OAAO,CAAA,MAAA,MAAC,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,0CAAE,KAAgB,0CAAE,KAAK,CAAC,YAAY,CAAC,0CAAG,CAAC,CAAC,KAAI,EAAE,CAAA;IACtH,CAAC;IAED,IAAI,UAAU,CAAC,UAAkB;QAC/B,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QAEhG,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YAC/F,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;gBACxD,MAAM,MAAM,GAAG,YAAY,CAAC,MAA4B,CAAA;gBACxD,OAAO,MAAO,CAAC,QAAQ,KAAK,QAAQ,CAAA;YACtC,CAAC,CAAC,CAAA;YAEF,OAAO,GAAG;gBACR,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAoB,EAAE,EAAE;oBAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;oBAEvB,OAAO;wBACL,IAAI;wBACJ,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,IAAI,UAAU,GAAG;qBACV,CAAA;gBAClB,CAAC,CAAC;gBACF,GAAG,OAAO;aACX,CAAA;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,CACtB,IAAI,WAAW,CAAC,qBAAqB,EAAE;YACrC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE;gBACN,OAAO;aACR;SACF,CAAC,CACH,CAAA;IACH,CAAC;;AAzyBM,gBAAM,GAAG;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CF;CACF,AAhDY,CAgDZ;AAEW;IAAX,QAAQ,EAAE;uCAAwC;AACvC;IAAX,QAAQ,EAAE;yCAAY;AACK;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uCAA4B;AAC5B;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;kDAAgC;AACA;IAAzD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;gDAA+B;AAC5E;IAAX,QAAQ,EAAE;+CAA4B;AAC3B;IAAX,QAAQ,EAAE;+CAAkB;AACF;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;0CAAwB;AACvB;IAA1B,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;0CAAwB;AACtB;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6CAA8B;AACO;IAA/D,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC;qDAA6B;AAEnF;IAAR,KAAK,EAAE;wCAA6B;AAC5B;IAAR,KAAK,EAAE;0CAAmC;AAC1B;IAAhB,KAAK,EAAE;+CAAsC;AAEhB;IAA7B,KAAK,CAAC,qBAAqB,CAAC;uCAAmB;AAC/B;IAAhB,KAAK,CAAC,QAAQ,CAAC;wCAAuC;AAC1B;IAA5B,UAAU,CAAC,OAAO,CAAC;uCAAoC;AArE7C,SAAS;IADrB,aAAa,CAAC,UAAU,CAAC;GACb,SAAS,CA2yBrB","sourcesContent":["import './data-grid/data-grid'\nimport './data-list/data-list'\nimport './data-card/data-card'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, queryAsync, state } from 'lit/decorators.js'\nimport isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\n\nimport Headroom from '@operato/headroom'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { HeadroomStyles, ScrollbarStyles, SpinnerStyles } from '@operato/styles'\nimport { SnapshotTaker, TimeCapsule } from '@operato/utils'\n\nimport { buildConfig } from './configure/config-builder'\nimport { ZERO_CONFIG, ZERO_DATA, ZERO_PAGES, ZERO_PAGINATION } from './configure/zero-config'\nimport { DataCard } from './data-card/data-card'\nimport { DataConsumer } from './data-consumer'\nimport { DataGrid } from './data-grid/data-grid'\nimport { DataList } from './data-list/data-list'\nimport { DataProvider } from './data-provider'\nimport {\n ColumnConfig,\n FetchHandler,\n FilterConfigObject,\n FilterValue,\n GristConfig,\n GristData,\n GristRecord,\n GristSelectFunction,\n PaginationConfig,\n SortersConfig\n} from './types'\nimport { convertListParamToSearchString, convertSearchStringToListParam } from './utils'\n\n@customElement('ox-grist')\nexport class DataGrist extends LitElement implements DataConsumer {\n static styles = [\n ScrollbarStyles,\n HeadroomStyles,\n SpinnerStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n min-height: 120px;\n\n overflow: hidden;\n\n /* for pulltorefresh controller */\n position: relative;\n\n padding: var(--ox-grist-padding);\n\n --mdc-icon-size: var(--grid-record-wide-fontsize);\n }\n\n #wrap {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n }\n\n ox-grid {\n flex: 1;\n border: var(--grid-wrap-container-border, 0px solid transparent);\n border-width: var(--grid-wrap-container-border-width, 0px);\n }\n\n slot[name='headroom'] {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n\n z-index: 1;\n }\n `\n ]\n\n @property() mode: 'GRID' | 'LIST' | 'CARD' = 'GRID'\n @property() config: any\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Array }) selectedRecords?: GristRecord[]\n @property({ type: Boolean, attribute: 'explicit-fetch' }) explicitFetch: boolean = false\n @property() fetchHandler?: FetchHandler\n @property() fetchOptions: any\n @property({ type: Array }) filters?: FilterValue[]\n @property({ type: Array }) sorters?: SortersConfig\n @property({ type: Object }) pagination?: PaginationConfig\n @property({ type: Boolean, attribute: 'url-params-sensitive' }) urlParamsSensitive?: boolean\n\n @state() _data: GristData = ZERO_DATA\n @state() _config: GristConfig = ZERO_CONFIG\n @state() private _showSpinner: boolean = false\n\n @query('slot[name=headroom]') head!: HTMLElement\n @query('#grist') grist!: DataGrid | DataList | DataCard\n @queryAsync('#wrap') private wrap!: Promise<HTMLElement>\n\n private timeCapsule?: TimeCapsule\n private snapshotTaker?: SnapshotTaker\n\n private dataProvider?: DataProvider\n private pulltorefreshHandle?: any\n private headroom?: Headroom\n private orginPaddingTop?: string\n private originMarginTop?: string\n private lastLocation: { origin?: string; pathname?: string; search?: string } = {}\n\n private popstateEventHandler: EventListener = ((e: Event) => {\n const { origin, pathname, search } = window.location\n if (\n this.lastLocation.origin &&\n (this.lastLocation.origin !== origin ||\n this.lastLocation.pathname !== pathname ||\n this.lastLocation.search === search)\n ) {\n return\n }\n\n this.lastLocation = {\n origin,\n pathname,\n search\n }\n\n var { filters = [], sorters = [] } = convertSearchStringToListParam(search)\n\n try {\n if (!isEqual(filters, this.filters) || !isEqual(sorters, this.sorters)) {\n this.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters,\n sorters,\n from: 'url-parameter'\n }\n })\n )\n }\n } catch (e) {\n console.error(`invalid fetch params on URL query string : ${e}`)\n }\n }).bind(this)\n\n private fetchParamsChangeEventHandler: EventListener = ((e: Event) => {\n const { sorters, filters, from } = (e as CustomEvent).detail\n\n sorters && (this.sorters = sorters)\n filters && (this.filters = filters)\n\n if (!this.urlParamsSensitive || from === 'url-parameter') {\n return\n }\n\n const queryString = convertListParamToSearchString({ filters, sorters, base: window.location.search })\n this.lastLocation.search = queryString ? `?${queryString}` : ''\n const url = `${window.location.pathname}${this.lastLocation.search}`\n\n history.pushState({}, document.title, url)\n }).bind(this)\n\n async firstUpdated() {\n // Mutation Observer를 사용하여 슬롯의 크기 변경을 감지하고 다시 그린다.\n const observer = new ResizeObserver(mutationsList => {\n this.setHeadroom()\n })\n\n observer.observe(this.head)\n }\n\n async connectedCallback() {\n super.connectedCallback()\n\n this.dataProvider = new DataProvider(this)\n\n this.timeCapsule = new TimeCapsule(10)\n this.snapshotTaker = new SnapshotTaker(this, this.timeCapsule!)\n\n this.addEventListener('fetch-params-change', this.fetchParamsChangeEventHandler)\n\n await this.updateComplete\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.removeEventListener('fetch-params-change', this.fetchParamsChangeEventHandler)\n\n this.timeCapsule && this.timeCapsule.dispose()\n this.snapshotTaker && this.snapshotTaker.dispose()\n\n delete this.timeCapsule\n delete this.snapshotTaker\n\n this.dataProvider?.dispose()\n this.resetPullToRefresh()\n }\n\n private resetPullToRefresh() {\n if (this.pulltorefreshHandle) {\n this.pulltorefreshHandle()\n delete this.pulltorefreshHandle\n }\n }\n\n private async setPullToRefresh() {\n this.resetPullToRefresh()\n if (this.mode !== 'GRID' && this.fetchHandler) {\n this.pulltorefreshHandle = pulltorefresh({\n container: await this.wrap,\n scrollable: this.grist.pullToRefreshTarget,\n refresh: () => {\n return this.fetch(true)\n }\n })\n }\n }\n\n private setConfig() {\n this._config = buildConfig({\n ...this.config\n })\n\n this.dispatchEvent(\n new CustomEvent('config-change', {\n bubbles: true,\n composed: true,\n detail: this.compiledConfig\n })\n )\n\n this.pagination = this.compiledConfig.pagination || {}\n\n if (!this.urlParamsSensitive) {\n const sorters = this.compiledConfig?.sorters\n const filters = this.compiledConfig?.columns\n .filter(\n column =>\n column.filter &&\n 'value' in (column.filter as FilterConfigObject) &&\n (column.filter as FilterConfigObject).value\n )\n .map(column => {\n const filter = column.filter as FilterConfigObject\n return { name: column.name, operator: filter.operator, value: filter.value } as FilterValue\n })\n\n this.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters,\n sorters,\n from: 'config'\n }\n })\n )\n }\n\n if (this.dataProvider) {\n const { limit, pages = ZERO_PAGES } = this._config.pagination || ZERO_PAGINATION\n this.dataProvider.page = 1\n this.dataProvider.limit = limit || pages[0] || ZERO_PAGES[0]\n }\n\n if (!this.urlParamsSensitive && !this.explicitFetch) {\n this.fetch()\n }\n }\n\n private setHeadroom() {\n this.headroom?.destroy()\n\n if (this.grist && this.head && this.head.style.display !== 'none') {\n const style = getComputedStyle(this.grist)\n\n this.orginPaddingTop = style.paddingTop || '0'\n this.originMarginTop = style.marginTop || '0'\n\n this.headroom = new Headroom(this.head, {\n scroller: this.grist,\n onTop: () => {\n this.grist.style.paddingTop = this.orginPaddingTop!\n this.originMarginTop = this.grist.style.marginTop\n\n this.grist.style.marginTop = this.head.clientHeight + 'px'\n },\n onNotTop: () => {\n this.grist.style.marginTop = this.originMarginTop!\n this.orginPaddingTop = this.grist.style.paddingTop\n\n this.grist.style.paddingTop = this.head.clientHeight + 'px'\n }\n })\n\n this.headroom.init()\n } else if (this.orginPaddingTop) {\n this.grist.style.paddingTop = this.orginPaddingTop\n this.grist.style.marginTop = this.originMarginTop!\n }\n }\n\n render() {\n const empty = !this._showSpinner && this._data.records.length == 0\n\n return html`\n <div id=\"wrap\" @keydown=${(e: KeyboardEvent) => this.onKeydown(e)}>\n ${this.mode == 'GRID'\n ? html`\n <ox-grid\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n .pagination=${this.pagination || {}}\n ?empty=${empty}\n >\n </ox-grid>\n `\n : this.mode == 'CARD'\n ? html`\n <ox-card\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n ?empty=${empty}\n >\n </ox-card>\n `\n : html`\n <ox-list\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n ?empty=${empty}\n >\n </ox-list>\n `}\n </div>\n\n <div id=\"spinner\" ?show=${this._showSpinner}></div>\n\n <slot name=\"headroom\"> </slot>\n `\n }\n\n /* for timecapsule feature */\n private onKeydown(e: KeyboardEvent) {\n if (e.key === 'z' && (e.metaKey || e.ctrlKey)) {\n if (e.shiftKey) {\n this.redo()\n } else {\n this.undo()\n }\n }\n }\n\n get state() {\n return JSON.stringify(this.dirtyData)\n }\n\n undo() {\n if (!this.timeCapsule?.backwardable) {\n return\n }\n\n this._data = JSON.parse(this.timeCapsule?.backward())\n }\n\n redo() {\n if (!this.timeCapsule?.forwardable) {\n return\n }\n\n this._data = JSON.parse(this.timeCapsule?.forward())\n }\n\n async fetch(reset = true) {\n if (!this.compiledConfig) {\n /* avoid to be here */\n console.warn('grist is not configured yet.')\n return\n }\n\n if (reset && this.grist) {\n /*\n * scroll 의 현재위치에 의해서 scroll 이벤트가 발생할 수 있으므로, 이를 방지하기 위해서 스크롤의 위치를 TOP으로 옮긴다.\n * (scroll 이 첫페이지 크기 이상으로 내려가 있는 경우, 첫페이지부터 다시 표시하는 경우에, scroll 이벤트가 발생한다.)\n */\n this.grist.scrollTop = 0\n }\n\n if (this.dataProvider) {\n let { limit: initLimit, page: initPage, infinite } = this.compiledConfig.pagination || {}\n let { limit = initLimit || ZERO_PAGINATION.limit, page = initPage || ZERO_PAGINATION.page } = this.dataProvider\n\n if (infinite || this.mode !== 'GRID') {\n await this.dataProvider.attach(reset)\n } else {\n await this.dataProvider.fetch({\n limit,\n page,\n sorters: this.sorters || this.compiledConfig?.sorters,\n sortings: this.sorters || this.compiledConfig?.sorters,\n filters: this.filters\n })\n }\n }\n }\n\n async updated(changes: PropertyValues<this>) {\n var needToSetPullToRefresh = false\n\n if (changes.has('filters')) {\n await this.requestUpdate()\n }\n\n if (changes.has('sorters')) {\n await this.requestUpdate()\n }\n\n if (changes.has('config')) {\n this.setConfig()\n }\n\n if (changes.has('fetchHandler')) {\n this.dataProvider && (this.dataProvider.fetchHandler = this.fetchHandler)\n needToSetPullToRefresh = true\n }\n\n if (changes.has('fetchOptions')) {\n this.dataProvider && (this.dataProvider.fetchOptions = this.fetchOptions)\n }\n\n if (changes.has('data')) {\n this.reset()\n }\n\n if (changes.has('mode')) {\n if (this.mode === 'GRID') {\n this.style.removeProperty('--ox-grist-padding')\n } else {\n this.style.setProperty('--ox-grist-padding', '0')\n }\n\n needToSetPullToRefresh = true\n this.setHeadroom()\n }\n\n if (changes.has('selectedRecords')) {\n var { records } = this.data || []\n var selectedRecords = this.selectedRecords || []\n\n var _records = this.dirtyData.records\n\n /* 원본데이타에서 index를 찾아서, 복사본 데이타의 selected를 설정한다. */\n selectedRecords.forEach(selected => {\n var index = records.indexOf(selected)\n var record = _records[index]\n if (record) {\n record['__selected__'] = true\n }\n })\n\n /* update _data property intentionally */\n this.refresh()\n }\n\n if (changes.has('urlParamsSensitive')) {\n if (this.urlParamsSensitive) {\n //@ts-ignore\n this.popstateEventHandler() // call for the first time\n\n window.addEventListener('popstate', this.popstateEventHandler)\n } else {\n window.removeEventListener('popstate', this.popstateEventHandler)\n }\n }\n\n if (needToSetPullToRefresh) {\n await this.setPullToRefresh()\n }\n }\n\n get compiledConfig(): GristConfig {\n return this._config\n }\n\n get dirtyData(): GristData {\n return (this.grist as any)?.data || {}\n }\n\n get dirtyRecords() {\n var { records = [] } = this.dirtyData\n return records.filter(record => record['__dirty__'])\n }\n\n exportPatchList({ flagName = 'patchFlag', addedFlag = '+', deletedFlag = '-', modifiedFlag = 'M', idField = 'id' }) {\n let dirtyRecords = this.dirtyRecords\n if (!dirtyRecords || dirtyRecords.length == 0) {\n return []\n }\n\n return dirtyRecords.map(record => {\n let flag = record.__dirty__\n\n let patch = {\n [flagName]: flag == 'M' ? modifiedFlag : flag == '+' ? addedFlag : deletedFlag\n }\n\n if (idField in record && record[idField]) {\n patch[idField] = record[idField]\n }\n\n for (let key in record.__dirtyfields__) {\n patch[key] = record[key]\n }\n return patch\n })\n }\n\n exportRecords({ ifSelectedOnly = true, includeHiddenField = true } = {}) {\n let records = ifSelectedOnly ? this.selected : this.data.records\n\n if (ifSelectedOnly && (!records || records.length == 0)) {\n records = this.data.records\n }\n\n let columns = this.compiledConfig.columns.filter(column => column.type !== 'gutter')\n if (!includeHiddenField) {\n columns = columns.filter(column => !column.hidden)\n }\n let columnNames = columns.map(column => column.name)\n\n return records.map(item => {\n return columnNames.reduce((record, name) => {\n record[name] = item[name]\n return record\n }, {} as any)\n })\n }\n\n get selected() {\n var { records = [] } = this.grist?.data\n return records.filter(record => record['__selected__'])\n }\n\n set selected(selected: GristRecord[]) {\n if (!this.grist) {\n console.warn('grist not ready')\n return\n }\n\n selected.forEach(record => (record.__selected__ = true))\n this.refresh()\n }\n\n select(selector: GristSelectFunction, reset: boolean = false) {\n var { records = [] } = this.grist?.data\n\n if (reset) {\n this.selected.forEach(record => (record.__selected__ = false))\n }\n\n records.filter(record => selector(record)).forEach(record => (record.__selected__ = true))\n this.refresh()\n }\n\n showSpinner() {\n this._showSpinner = true\n }\n\n hideSpinner() {\n this._showSpinner = false\n }\n\n focus() {\n super.focus()\n\n this.grist.focus()\n }\n\n commit() {\n var { page, total, limit, records } = this.grist.data\n\n this.data = {\n page,\n total,\n limit,\n records: records.map(record => {\n var copied = {\n ...record\n }\n\n delete copied.__seq__\n delete copied.__dirty__\n delete copied.__selected__\n delete copied.__changes__\n delete copied.__dirtyfields__\n delete copied.__origin__\n delete copied.__depth__\n delete copied.__expanded__\n delete copied.__check_in_tree__\n delete copied.__children__\n delete copied.__typename\n\n return copied\n })\n }\n }\n\n showHeadroom() {\n if (this.head) {\n this.head.style.display = 'block'\n this.setHeadroom()\n }\n }\n\n hideHeadroom() {\n if (this.head) {\n this.head.style.display = 'none'\n this.setHeadroom()\n }\n }\n\n toggleHeadroom() {\n if (this.head) {\n const display = this.head.style.display\n this.head.style.display = display !== 'none' ? 'none' : 'block'\n\n this.setHeadroom()\n }\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh() {\n this.grist.refresh()\n }\n\n /**\n * This method cancels all changes in the dirty state before being reflected in the data.\n *\n * @method\n *\n * TODO tree 형태의 데이타로 _data를 만들 때, children, collapsed 등을 감안한다.\n */\n reset() {\n var {\n limit = ZERO_PAGINATION.limit,\n page = ZERO_PAGINATION.page,\n total = ZERO_PAGINATION.total,\n records = []\n } = this.data || ZERO_PAGINATION\n\n const { childrenProperty, expanded } = this.compiledConfig.tree\n\n /* 원본 데이타를 남기고, 복사본(_data)을 사용한다. */\n records = ([] as GristRecord[]).concat(\n ...records.map((record, idx) =>\n this.traverseReset(\n record,\n this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1,\n 0,\n childrenProperty,\n expanded as () => boolean\n )\n )\n )\n\n if (childrenProperty) {\n records = ([] as GristRecord[]).concat(...records.map(record => this.traverseExpanded(record)))\n }\n\n this._data = {\n limit,\n page,\n total,\n records\n }\n\n this.timeCapsule?.reset()\n this.snapshotTaker?.take(true)\n }\n\n private traverseReset(\n record: GristRecord,\n seq: number,\n __depth__: number,\n childrenProperty: string | undefined,\n expanded: () => boolean\n ): GristRecord {\n const copied = {\n ...record,\n __seq__: seq,\n __origin__: record\n }\n\n if (childrenProperty) {\n const children: GristRecord[] = record[childrenProperty!]\n\n const __expanded__ = (expanded as Function)(record)\n const __children__ = (children || []).map(child =>\n this.traverseReset(child, seq, __depth__ + 1, childrenProperty, expanded)\n )\n\n Object.assign(copied, { __depth__, __children__, __expanded__ })\n }\n\n return copied\n }\n\n private traverseExpanded(record: GristRecord): GristRecord[] {\n const { __expanded__, __children__ = [] } = record\n\n if (__expanded__ && __children__.length > 0) {\n return [record].concat(...__children__.map(child => this.traverseExpanded(child)))\n } else {\n return [record]\n }\n }\n\n checkDirties() {\n const records = this.dirtyRecords\n const { columns = [] } = this.compiledConfig || {}\n\n for (var record of records || []) {\n var origin = record['__origin__'] || {}\n\n var dirtyFields = (record['__dirtyfields__'] = columns\n .filter(column => column.type !== 'gutter' && !isEqual(origin[column.name], record[column.name]))\n .reduce((sum, column) => {\n var name = column.name\n\n sum[name] = {\n before: origin[name],\n after: record[name]\n }\n\n return sum\n }, {} as any))\n\n if (record['__dirty__'] == 'M' && isEmpty(dirtyFields)) {\n delete record['__dirty__']\n }\n }\n\n this._data = { ...this.dirtyData }\n\n this.snapshotTaker?.touch()\n }\n\n cloneSelectedRecords() {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n var cloned = {\n __dirty__: '+'\n } as GristRecord\n\n this.compiledConfig.columns\n .filter(column => column.record.editable)\n .forEach(column => {\n cloned[column.name] = record[column.name]\n })\n const rowIndex = this.dirtyData.records.findIndex(rec => rec === record)\n\n this.dirtyData.records.splice(rowIndex + 1, 0, cloned)\n })\n\n this.checkDirties()\n }\n\n deleteSelectedRecords(dirty = true) {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n if (dirty) {\n record.__dirty__ = '-'\n }\n\n const rowIndex = this.dirtyData.records.findIndex(rec => rec === record)\n this.dirtyData.records.splice(rowIndex, 1)\n })\n\n this.checkDirties()\n }\n\n get searchText() {\n return (this.filters?.find(filter => filter.operator === 'search')?.value as string)?.match(/^\\%(.*)\\%$/)?.[1] || ''\n }\n\n set searchText(searchText: string) {\n var filters = (this.filters || []).filter((filter: FilterValue) => filter.operator !== 'search')\n\n if (searchText) {\n const filtersConfig = this.compiledConfig.columns.filter(columnConfig => !!columnConfig.filter)\n const searchColumns = filtersConfig.filter(columnConfig => {\n const filter = columnConfig.filter as FilterConfigObject\n return filter!.operator === 'search'\n })\n\n filters = [\n ...searchColumns.map((column: ColumnConfig) => {\n const { name } = column\n\n return {\n name,\n operator: 'search',\n value: `%${searchText}%`\n } as FilterValue\n }),\n ...filters\n ]\n }\n\n this.grist.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters\n }\n })\n )\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"data-grist.js","sourceRoot":"","sources":["../../src/data-grist.ts"],"names":[],"mappings":"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","sourcesContent":["import './data-grid/data-grid'\nimport './data-list/data-list'\nimport './data-card/data-card'\n\nimport { css, html, LitElement, PropertyValues } from 'lit'\nimport { customElement, property, query, queryAsync, state } from 'lit/decorators.js'\nimport isEmpty from 'lodash-es/isEmpty'\nimport isEqual from 'lodash-es/isEqual'\n\nimport Headroom from '@operato/headroom'\nimport { pulltorefresh } from '@operato/pull-to-refresh'\nimport { HeadroomStyles, ScrollbarStyles, SpinnerStyles } from '@operato/styles'\nimport { SnapshotTaker, TimeCapsule } from '@operato/utils'\n\nimport { buildConfig } from './configure/config-builder'\nimport { ZERO_CONFIG, ZERO_DATA, ZERO_PAGES, ZERO_PAGINATION } from './configure/zero-config'\nimport { DataCard } from './data-card/data-card'\nimport { DataConsumer } from './data-consumer'\nimport { DataGrid } from './data-grid/data-grid'\nimport { DataList } from './data-list/data-list'\nimport { DataProvider } from './data-provider'\nimport {\n ColumnConfig,\n FetchHandler,\n FilterConfigObject,\n FilterValue,\n GristConfig,\n GristData,\n GristRecord,\n GristSelectFunction,\n PaginationConfig,\n SortersConfig\n} from './types'\nimport { convertListParamToSearchString, convertSearchStringToListParam } from './utils'\n\n/**\n * A custom element for rendering data in a grid, list, or card format.\n *\n * @element ox-grist\n */\n@customElement('ox-grist')\nexport class DataGrist extends LitElement implements DataConsumer {\n static styles = [\n ScrollbarStyles,\n HeadroomStyles,\n SpinnerStyles,\n css`\n :host {\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n min-height: 120px;\n\n overflow: hidden;\n\n /* for pulltorefresh controller */\n position: relative;\n\n padding: var(--ox-grist-padding);\n\n --mdc-icon-size: var(--grid-record-wide-fontsize);\n }\n\n #wrap {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: auto;\n }\n\n ox-grid {\n flex: 1;\n border: var(--grid-wrap-container-border, 0px solid transparent);\n border-width: var(--grid-wrap-container-border-width, 0px);\n }\n\n slot[name='headroom'] {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n\n width: 100%;\n box-sizing: border-box;\n background-color: var(--grist-background-color);\n\n z-index: 1;\n }\n `\n ]\n\n /**\n * The rendering mode of the component, which can be 'GRID', 'LIST', or 'CARD'.\n * Default is 'GRID'.\n *\n * @property {string}\n */\n @property() mode: 'GRID' | 'LIST' | 'CARD' = 'GRID'\n\n /**\n * The configuration object for the data grist.\n *\n * @property {Object}\n */\n @property() config: any\n\n /**\n * The data to be displayed in the data grist.\n *\n * @property {GristData}\n */\n @property({ type: Object }) data: GristData = ZERO_DATA\n\n /**\n * An array of selected records in the data grist.\n *\n * @property {GristRecord[]}\n */\n @property({ type: Array }) selectedRecords?: GristRecord[]\n\n /**\n * Indicates whether explicit fetching of data is enabled. If true, data will be fetched\n * only when `fetch` method is called. Default is false.\n *\n * @property {boolean}\n */\n @property({ type: Boolean, attribute: 'explicit-fetch' }) explicitFetch: boolean = false\n\n /**\n * The fetch handler function used to retrieve data from a remote source.\n *\n * @property {FetchHandler}\n */\n @property() fetchHandler?: FetchHandler\n\n /**\n * Additional fetch options to be passed to the fetch handler.\n *\n * @property {Object}\n */\n @property() fetchOptions: any\n\n /**\n * An array of filter values to be applied to the data grist.\n *\n * @property {FilterValue[]}\n */\n @property({ type: Array }) filters?: FilterValue[]\n\n /**\n * An array of sorters to determine the order of records in the data grist.\n *\n * @property {SortersConfig}\n */\n @property({ type: Array }) sorters?: SortersConfig\n\n /**\n * The pagination configuration for the data grist.\n *\n * @property {PaginationConfig}\n */\n @property({ type: Object }) pagination?: PaginationConfig\n\n /**\n * Indicates whether URL parameters are sensitive to changes. If true, changes in URL\n * parameters will trigger data fetching. Default is undefined.\n *\n * @property {boolean}\n */\n @property({ type: Boolean, attribute: 'url-params-sensitive' }) urlParamsSensitive?: boolean\n\n @state() _data: GristData = ZERO_DATA\n @state() _config: GristConfig = ZERO_CONFIG\n @state() private _showSpinner: boolean = false\n\n @query('slot[name=headroom]') head!: HTMLElement\n @query('#grist') grist!: DataGrid | DataList | DataCard\n @queryAsync('#wrap') private wrap!: Promise<HTMLElement>\n\n private timeCapsule?: TimeCapsule\n private snapshotTaker?: SnapshotTaker\n\n private dataProvider?: DataProvider\n private pulltorefreshHandle?: any\n private headroom?: Headroom\n private orginPaddingTop?: string\n private originMarginTop?: string\n private lastLocation: { origin?: string; pathname?: string; search?: string } = {}\n\n private popstateEventHandler: EventListener = ((e: Event) => {\n const { origin, pathname, search } = window.location\n if (\n this.lastLocation.origin &&\n (this.lastLocation.origin !== origin ||\n this.lastLocation.pathname !== pathname ||\n this.lastLocation.search === search)\n ) {\n return\n }\n\n this.lastLocation = {\n origin,\n pathname,\n search\n }\n\n var { filters = [], sorters = [] } = convertSearchStringToListParam(search)\n\n try {\n if (!isEqual(filters, this.filters) || !isEqual(sorters, this.sorters)) {\n this.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters,\n sorters,\n from: 'url-parameter'\n }\n })\n )\n }\n } catch (e) {\n console.error(`invalid fetch params on URL query string : ${e}`)\n }\n }).bind(this)\n\n private fetchParamsChangeEventHandler: EventListener = ((e: Event) => {\n const { sorters, filters, from } = (e as CustomEvent).detail\n\n sorters && (this.sorters = sorters)\n filters && (this.filters = filters)\n\n if (!this.urlParamsSensitive || from === 'url-parameter') {\n return\n }\n\n const queryString = convertListParamToSearchString({ filters, sorters, base: window.location.search })\n this.lastLocation.search = queryString ? `?${queryString}` : ''\n const url = `${window.location.pathname}${this.lastLocation.search}`\n\n history.pushState({}, document.title, url)\n }).bind(this)\n\n async firstUpdated() {\n // Mutation Observer를 사용하여 슬롯의 크기 변경을 감지하고 다시 그린다.\n const observer = new ResizeObserver(mutationsList => {\n this.setHeadroom()\n })\n\n observer.observe(this.head)\n }\n\n async connectedCallback() {\n super.connectedCallback()\n\n this.dataProvider = new DataProvider(this)\n\n this.timeCapsule = new TimeCapsule(10)\n this.snapshotTaker = new SnapshotTaker(this, this.timeCapsule!)\n\n this.addEventListener('fetch-params-change', this.fetchParamsChangeEventHandler)\n\n await this.updateComplete\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n\n this.removeEventListener('fetch-params-change', this.fetchParamsChangeEventHandler)\n\n this.timeCapsule && this.timeCapsule.dispose()\n this.snapshotTaker && this.snapshotTaker.dispose()\n\n delete this.timeCapsule\n delete this.snapshotTaker\n\n this.dataProvider?.dispose()\n this.resetPullToRefresh()\n }\n\n private resetPullToRefresh() {\n if (this.pulltorefreshHandle) {\n this.pulltorefreshHandle()\n delete this.pulltorefreshHandle\n }\n }\n\n private async setPullToRefresh() {\n this.resetPullToRefresh()\n if (this.mode !== 'GRID' && this.fetchHandler) {\n this.pulltorefreshHandle = pulltorefresh({\n container: await this.wrap,\n scrollable: this.grist.pullToRefreshTarget,\n refresh: () => {\n return this.fetch(true)\n }\n })\n }\n }\n\n private setConfig() {\n this._config = buildConfig({\n ...this.config\n })\n\n this.dispatchEvent(\n new CustomEvent('config-change', {\n bubbles: true,\n composed: true,\n detail: this.compiledConfig\n })\n )\n\n this.pagination = this.compiledConfig.pagination || {}\n\n if (!this.urlParamsSensitive) {\n const sorters = this.compiledConfig?.sorters\n const filters = this.compiledConfig?.columns\n .filter(\n column =>\n column.filter &&\n 'value' in (column.filter as FilterConfigObject) &&\n (column.filter as FilterConfigObject).value\n )\n .map(column => {\n const filter = column.filter as FilterConfigObject\n return { name: column.name, operator: filter.operator, value: filter.value } as FilterValue\n })\n\n this.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters,\n sorters,\n from: 'config'\n }\n })\n )\n }\n\n if (this.dataProvider) {\n const { limit, pages = ZERO_PAGES } = this._config.pagination || ZERO_PAGINATION\n this.dataProvider.page = 1\n this.dataProvider.limit = limit || pages[0] || ZERO_PAGES[0]\n }\n\n if (!this.urlParamsSensitive && !this.explicitFetch) {\n this.fetch()\n }\n }\n\n private setHeadroom() {\n this.headroom?.destroy()\n\n if (this.grist && this.head && this.head.style.display !== 'none') {\n const style = getComputedStyle(this.grist)\n\n this.orginPaddingTop = style.paddingTop || '0'\n this.originMarginTop = style.marginTop || '0'\n\n this.headroom = new Headroom(this.head, {\n scroller: this.grist,\n onTop: () => {\n this.grist.style.paddingTop = this.orginPaddingTop!\n this.originMarginTop = this.grist.style.marginTop\n\n this.grist.style.marginTop = this.head.clientHeight + 'px'\n },\n onNotTop: () => {\n this.grist.style.marginTop = this.originMarginTop!\n this.orginPaddingTop = this.grist.style.paddingTop\n\n this.grist.style.paddingTop = this.head.clientHeight + 'px'\n }\n })\n\n this.headroom.init()\n } else if (this.orginPaddingTop) {\n this.grist.style.paddingTop = this.orginPaddingTop\n this.grist.style.marginTop = this.originMarginTop!\n }\n }\n\n render() {\n const empty = !this._showSpinner && this._data.records.length == 0\n\n return html`\n <div id=\"wrap\" @keydown=${(e: KeyboardEvent) => this.onKeydown(e)}>\n ${this.mode == 'GRID'\n ? html`\n <ox-grid\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n .pagination=${this.pagination || {}}\n ?empty=${empty}\n >\n </ox-grid>\n `\n : this.mode == 'CARD'\n ? html`\n <ox-card\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n ?empty=${empty}\n >\n </ox-card>\n `\n : html`\n <ox-list\n id=\"grist\"\n .config=${this.compiledConfig}\n .data=${this._data}\n .sorters=${this.sorters || []}\n .filters=${this.filters || []}\n ?empty=${empty}\n >\n </ox-list>\n `}\n </div>\n\n <div id=\"spinner\" ?show=${this._showSpinner}></div>\n\n <slot name=\"headroom\"> </slot>\n `\n }\n\n /* for timecapsule feature */\n private onKeydown(e: KeyboardEvent) {\n if (e.key === 'z' && (e.metaKey || e.ctrlKey)) {\n if (e.shiftKey) {\n this.redo()\n } else {\n this.undo()\n }\n }\n }\n\n /**\n * Gets the current state of the component. The state includes information about the\n * dirty records and their changes.\n *\n * @getter\n * @public\n * @type {string}\n */\n get state() {\n return JSON.stringify(this.dirtyData)\n }\n\n /**\n * Undoes the previous change in the component's data by restoring it to the previous state.\n * This method is part of the TimeCapsule feature, allowing users to revert changes.\n */\n undo() {\n if (!this.timeCapsule?.backwardable) {\n return\n }\n\n this._data = JSON.parse(this.timeCapsule?.backward())\n }\n\n /**\n * Redoes the previously undone change in the component's data by restoring it to the next state.\n * This method is part of the TimeCapsule feature, allowing users to reapply changes.\n */\n redo() {\n if (!this.timeCapsule?.forwardable) {\n return\n }\n\n this._data = JSON.parse(this.timeCapsule?.forward())\n }\n\n /**\n * Fetches data from a data source and updates the component's data. This method is used to retrieve\n * new data or refresh the existing data in the component.\n *\n * @method\n * @param {boolean} reset - If true, the method resets the scroll position to the top.\n */\n async fetch(reset = true) {\n if (!this.compiledConfig) {\n /* avoid to be here */\n console.warn('grist is not configured yet.')\n return\n }\n\n if (reset && this.grist) {\n /*\n * scroll 의 현재위치에 의해서 scroll 이벤트가 발생할 수 있으므로, 이를 방지하기 위해서 스크롤의 위치를 TOP으로 옮긴다.\n * (scroll 이 첫페이지 크기 이상으로 내려가 있는 경우, 첫페이지부터 다시 표시하는 경우에, scroll 이벤트가 발생한다.)\n */\n this.grist.scrollTop = 0\n }\n\n if (this.dataProvider) {\n let { limit: initLimit, page: initPage, infinite } = this.compiledConfig.pagination || {}\n let { limit = initLimit || ZERO_PAGINATION.limit, page = initPage || ZERO_PAGINATION.page } = this.dataProvider\n\n if (infinite || this.mode !== 'GRID') {\n await this.dataProvider.attach(reset)\n } else {\n await this.dataProvider.fetch({\n limit,\n page,\n sorters: this.sorters || this.compiledConfig?.sorters,\n sortings: this.sorters || this.compiledConfig?.sorters,\n filters: this.filters\n })\n }\n }\n }\n\n async updated(changes: PropertyValues<this>) {\n var needToSetPullToRefresh = false\n\n if (changes.has('filters')) {\n await this.requestUpdate()\n }\n\n if (changes.has('sorters')) {\n await this.requestUpdate()\n }\n\n if (changes.has('config')) {\n this.setConfig()\n }\n\n if (changes.has('fetchHandler')) {\n this.dataProvider && (this.dataProvider.fetchHandler = this.fetchHandler)\n needToSetPullToRefresh = true\n }\n\n if (changes.has('fetchOptions')) {\n this.dataProvider && (this.dataProvider.fetchOptions = this.fetchOptions)\n }\n\n if (changes.has('data')) {\n this.reset()\n }\n\n if (changes.has('mode')) {\n if (this.mode === 'GRID') {\n this.style.removeProperty('--ox-grist-padding')\n } else {\n this.style.setProperty('--ox-grist-padding', '0')\n }\n\n needToSetPullToRefresh = true\n this.setHeadroom()\n }\n\n if (changes.has('selectedRecords')) {\n var { records } = this.data || []\n var selectedRecords = this.selectedRecords || []\n\n var _records = this.dirtyData.records\n\n /* 원본데이타에서 index를 찾아서, 복사본 데이타의 selected를 설정한다. */\n selectedRecords.forEach(selected => {\n var index = records.indexOf(selected)\n var record = _records[index]\n if (record) {\n record['__selected__'] = true\n }\n })\n\n /* update _data property intentionally */\n this.refresh()\n }\n\n if (changes.has('urlParamsSensitive')) {\n if (this.urlParamsSensitive) {\n //@ts-ignore\n this.popstateEventHandler() // call for the first time\n\n window.addEventListener('popstate', this.popstateEventHandler)\n } else {\n window.removeEventListener('popstate', this.popstateEventHandler)\n }\n }\n\n if (needToSetPullToRefresh) {\n await this.setPullToRefresh()\n }\n }\n\n /**\n * Represents the compiled configuration of the component, which includes various settings and\n * column configurations. You can access this property to get information about how the component\n * is configured.\n *\n * @getter\n * @public\n * @type {GristConfig}\n */\n get compiledConfig(): GristConfig {\n return this._config\n }\n\n /**\n * Returns the dirty data in the component, which includes the records that have been added,\n * modified, or deleted but have not been committed to the main data yet.\n *\n * @getter\n * @public\n * @type {GristData} - An object representing the dirty data.\n */\n get dirtyData(): GristData {\n return (this.grist as any)?.data || {}\n }\n\n /**\n * Returns an array of GristRecord objects representing the records in the dirty state. These are\n * the records that have been added, modified, or deleted but have not been committed to the main\n * data yet.\n *\n * @getter\n * @public\n * @type {GristRecord[]} - An array of GristRecord objects representing the dirty records.\n */\n get dirtyRecords() {\n var { records = [] } = this.dirtyData\n return records.filter(record => record['__dirty__'])\n }\n\n /**\n * Exports a list of patches representing the changes in the dirty state of records. Each patch\n * contains information about whether a record was added, modified, or deleted, along with the\n * record's unique identifier and the changed field values.\n *\n * @param {Object} options - Export options that control the format of the patch list.\n * @param {string} options.flagName - The name of the flag field in the patch indicating the change type (default: 'patchFlag').\n * @param {string} options.addedFlag - The flag value for added records (default: '+').\n * @param {string} options.deletedFlag - The flag value for deleted records (default: '-').\n * @param {string} options.modifiedFlag - The flag value for modified records (default: 'M').\n * @param {string} options.idField - The name of the unique identifier field (default: 'id').\n * @returns {Object[]} - An array of objects representing the patches.\n */\n exportPatchList({ flagName = 'patchFlag', addedFlag = '+', deletedFlag = '-', modifiedFlag = 'M', idField = 'id' }) {\n let dirtyRecords = this.dirtyRecords\n if (!dirtyRecords || dirtyRecords.length == 0) {\n return []\n }\n\n return dirtyRecords.map(record => {\n let flag = record.__dirty__\n\n let patch = {\n [flagName]: flag == 'M' ? modifiedFlag : flag == '+' ? addedFlag : deletedFlag\n }\n\n if (idField in record && record[idField]) {\n patch[idField] = record[idField]\n }\n\n for (let key in record.__dirtyfields__) {\n patch[key] = record[key]\n }\n return patch\n })\n }\n\n /**\n * Exports the selected records or all records in the component, depending on the specified options.\n * You can use this method to export data from the component in various formats or for different purposes.\n *\n * @param {Object} options - Export options that control the behavior of the export.\n * @param {boolean} options.ifSelectedOnly - If true, exports only the selected records. If false, exports all records.\n * @param {boolean} options.includeHiddenField - If true, includes hidden fields in the exported data.\n * @returns {Object[]} - An array of objects representing the exported records.\n */\n exportRecords({ ifSelectedOnly = true, includeHiddenField = true } = {}) {\n let records = ifSelectedOnly ? this.selected : this.data.records\n\n if (ifSelectedOnly && (!records || records.length == 0)) {\n records = this.data.records\n }\n\n let columns = this.compiledConfig.columns.filter(column => column.type !== 'gutter')\n if (!includeHiddenField) {\n columns = columns.filter(column => !column.hidden)\n }\n let columnNames = columns.map(column => column.name)\n\n return records.map(item => {\n return columnNames.reduce((record, name) => {\n record[name] = item[name]\n return record\n }, {} as any)\n })\n }\n\n /**\n * Gets the currently selected records in the component. It returns an array of GristRecord objects\n * that are currently selected. You can access this getter to retrieve the selected records.\n *\n * @getter\n * @public\n * @type {GristRecord[]}\n */\n get selected() {\n var { records = [] } = this.grist?.data\n return records.filter(record => record['__selected__'])\n }\n\n /**\n * Sets the currently selected records in the component. You can use this setter to programmatically\n * select specific records by providing an array of GristRecord objects to be selected.\n *\n * @setter\n * @public\n * @type {GristRecord[]}\n */\n set selected(selected: GristRecord[]) {\n if (!this.grist) {\n console.warn('grist not ready')\n return\n }\n\n selected.forEach(record => (record.__selected__ = true))\n this.refresh()\n }\n\n /**\n * Selects records in the component based on the provided selector function. You can use this method\n * to programmatically select specific records in the component.\n *\n * @method\n * @param {GristSelectFunction} selector - A function that determines which records to select.\n * @param {boolean} reset - If true, clears the previous selection before applying the new one.\n * If false, adds to the existing selection.\n */\n select(selector: GristSelectFunction, reset: boolean = false) {\n var { records = [] } = this.grist?.data\n\n if (reset) {\n this.selected.forEach(record => (record.__selected__ = false))\n }\n\n records.filter(record => selector(record)).forEach(record => (record.__selected__ = true))\n this.refresh()\n }\n\n /**\n * Shows the loading spinner in the component's UI to indicate ongoing data loading or processing.\n * You can call this method to display the spinner when necessary.\n */\n showSpinner() {\n this._showSpinner = true\n }\n\n /**\n * Hides the loading spinner in the component's UI to indicate that data loading or processing has completed.\n * You can call this method to hide the spinner when loading or processing is finished.\n */\n hideSpinner() {\n this._showSpinner = false\n }\n\n /**\n * Focuses on the component, making it the active element in the document. This method is useful\n * when you want to programmatically set focus to the component.\n */\n focus() {\n super.focus()\n\n this.grist.focus()\n }\n\n /**\n * Commits the changes made in the dirty state to the component's data. This method updates the\n * component's data with the changes made in the dirty state and clears the dirty state.\n */\n commit() {\n var { page, total, limit, records } = this.grist.data\n\n this.data = {\n page,\n total,\n limit,\n records: records.map(record => {\n var copied = {\n ...record\n }\n\n delete copied.__seq__\n delete copied.__dirty__\n delete copied.__selected__\n delete copied.__changes__\n delete copied.__dirtyfields__\n delete copied.__origin__\n delete copied.__depth__\n delete copied.__expanded__\n delete copied.__check_in_tree__\n delete copied.__children__\n delete copied.__typename\n\n return copied\n })\n }\n }\n\n /**\n * Shows the headroom element in the component. The headroom element is typically used for\n * displaying additional information or controls at the top of the component.\n */\n showHeadroom() {\n if (this.head) {\n this.head.style.display = 'block'\n this.setHeadroom()\n }\n }\n\n /**\n * Hides the headroom element in the component. This method hides the additional information\n * or controls displayed at the top of the component.\n */\n hideHeadroom() {\n if (this.head) {\n this.head.style.display = 'none'\n this.setHeadroom()\n }\n }\n\n /**\n * Toggles the visibility of the headroom element in the component. If the headroom element is\n * currently visible, this method hides it. If it's hidden, this method shows it.\n */\n toggleHeadroom() {\n if (this.head) {\n const display = this.head.style.display\n this.head.style.display = display !== 'none' ? 'none' : 'block'\n\n this.setHeadroom()\n }\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh() {\n this.grist.refresh()\n }\n\n /**\n * Resets the component's data to its original state before any changes were made.\n * This method discards all unsaved changes and restores the data to its initial state.\n *\n * @method\n * @public\n */\n reset() {\n // TODO tree 형태의 데이타로 _data를 만들 때, children, collapsed 등을 감안한다.\n var {\n limit = ZERO_PAGINATION.limit,\n page = ZERO_PAGINATION.page,\n total = ZERO_PAGINATION.total,\n records = []\n } = this.data || ZERO_PAGINATION\n\n const { childrenProperty, expanded } = this.compiledConfig.tree\n\n /* 원본 데이타를 남기고, 복사본(_data)을 사용한다. */\n records = ([] as GristRecord[]).concat(\n ...records.map((record, idx) =>\n this.traverseReset(\n record,\n this.mode == 'GRID' ? (page - 1) * limit + idx + 1 : idx + 1,\n 0,\n childrenProperty,\n expanded as () => boolean\n )\n )\n )\n\n if (childrenProperty) {\n records = ([] as GristRecord[]).concat(...records.map(record => this.traverseExpanded(record)))\n }\n\n this._data = {\n limit,\n page,\n total,\n records\n }\n\n this.timeCapsule?.reset()\n this.snapshotTaker?.take(true)\n }\n\n private traverseReset(\n record: GristRecord,\n seq: number,\n __depth__: number,\n childrenProperty: string | undefined,\n expanded: () => boolean\n ): GristRecord {\n const copied = {\n ...record,\n __seq__: seq,\n __origin__: record\n }\n\n if (childrenProperty) {\n const children: GristRecord[] = record[childrenProperty!]\n\n const __expanded__ = (expanded as Function)(record)\n const __children__ = (children || []).map(child =>\n this.traverseReset(child, seq, __depth__ + 1, childrenProperty, expanded)\n )\n\n Object.assign(copied, { __depth__, __children__, __expanded__ })\n }\n\n return copied\n }\n\n private traverseExpanded(record: GristRecord): GristRecord[] {\n const { __expanded__, __children__ = [] } = record\n\n if (__expanded__ && __children__.length > 0) {\n return [record].concat(...__children__.map(child => this.traverseExpanded(child)))\n } else {\n return [record]\n }\n }\n\n /**\n * Checks for dirty records in the component's data and marks them as dirty.\n * Dirty records are those that have unsaved changes.\n */\n checkDirties() {\n const records = this.dirtyRecords\n const { columns = [] } = this.compiledConfig || {}\n\n for (var record of records || []) {\n var origin = record['__origin__'] || {}\n\n var dirtyFields = (record['__dirtyfields__'] = columns\n .filter(column => column.type !== 'gutter' && !isEqual(origin[column.name], record[column.name]))\n .reduce((sum, column) => {\n var name = column.name\n\n sum[name] = {\n before: origin[name],\n after: record[name]\n }\n\n return sum\n }, {} as any))\n\n if (record['__dirty__'] == 'M' && isEmpty(dirtyFields)) {\n delete record['__dirty__']\n }\n }\n\n this._data = { ...this.dirtyData }\n\n this.snapshotTaker?.touch()\n }\n\n /**\n * Clones the selected records in the component's data. It creates a copy of the selected records\n * and marks them as new (added) records.\n */\n cloneSelectedRecords() {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n var cloned = {\n __dirty__: '+'\n } as GristRecord\n\n this.compiledConfig.columns\n .filter(column => column.record.editable)\n .forEach(column => {\n cloned[column.name] = record[column.name]\n })\n const rowIndex = this.dirtyData.records.findIndex(rec => rec === record)\n\n this.dirtyData.records.splice(rowIndex + 1, 0, cloned)\n })\n\n this.checkDirties()\n }\n\n /**\n * Adds child nodes to selected records in the component's tree data. It allows users to add child nodes\n * to the selected parent records.\n */\n addChildNodes() {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n this.grist.addChildNode(record)\n })\n }\n\n /**\n * Adds sibling nodes to selected records in the component's tree data. It allows users to add sibling nodes\n * to the selected records.\n */\n addSiblingNodes() {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n this.grist.addSiblingNode(record)\n })\n }\n\n /**\n * Deletes the selected records in the component's data. It removes the selected records from the data,\n * optionally marking them as deleted.\n *\n * @method\n * @param {boolean} dirty - If true, the method marks the records as deleted.\n */\n deleteSelectedRecords(dirty = true) {\n const records = this.selected || ([] as GristRecord[])\n\n records.forEach(record => {\n if (dirty) {\n record.__dirty__ = '-'\n }\n\n const rowIndex = this.dirtyData.records.findIndex(rec => rec === record)\n this.dirtyData.records.splice(rowIndex, 1)\n })\n\n this.checkDirties()\n }\n\n /**\n * Retrieves the search text used for filtering records.\n *\n * @property {string}\n */\n get searchText() {\n return (this.filters?.find(filter => filter.operator === 'search')?.value as string)?.match(/^\\%(.*)\\%$/)?.[1] || ''\n }\n\n /**\n * Sets the search text for filtering records.\n *\n * @property {string}\n */\n set searchText(searchText: string) {\n var filters = (this.filters || []).filter((filter: FilterValue) => filter.operator !== 'search')\n\n if (searchText) {\n const filtersConfig = this.compiledConfig.columns.filter(columnConfig => !!columnConfig.filter)\n const searchColumns = filtersConfig.filter(columnConfig => {\n const filter = columnConfig.filter as FilterConfigObject\n return filter!.operator === 'search'\n })\n\n filters = [\n ...searchColumns.map((column: ColumnConfig) => {\n const { name } = column\n\n return {\n name,\n operator: 'search',\n value: `%${searchText}%`\n } as FilterValue\n }),\n ...filters\n ]\n }\n\n this.grist.dispatchEvent(\n new CustomEvent('fetch-params-change', {\n bubbles: true,\n composed: true,\n detail: {\n filters\n }\n })\n )\n }\n}\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"record-partial-click-handler.js","sourceRoot":"","sources":["../../../../src/data-list/event-handlers/record-partial-click-handler.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAsB,CAAa;IAC1E,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uEAAuE;IACvE,IAAI,MAAM,GAAI,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,+BAA+B,CAAmC,CAAA;IAC7G,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvC,6BAA6B;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC5E,OAAM;QACR,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAA;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAClF,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,IAAI,CAAC,eAAe,EAAE,CAAA;
|
1
|
+
{"version":3,"file":"record-partial-click-handler.js","sourceRoot":"","sources":["../../../../src/data-list/event-handlers/record-partial-click-handler.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAsB,CAAa;IAC1E,CAAC,CAAC,eAAe,EAAE,CAAA;IAEnB,uEAAuE;IACvE,IAAI,MAAM,GAAI,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,+BAA+B,CAAmC,CAAA;IAC7G,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,EAAE,CAAA;IAEvC,6BAA6B;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC5E,OAAM;QACR,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAA;IACpD,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAClF,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,EAAE,CAAA;IACrD,CAAC;AACH,CAAC","sourcesContent":["import { DataListField } from '../data-list-field'\nimport { DataListGutter } from '../data-list-gutter'\nimport { RecordPartial } from '../record-partial'\n\n/**\n * record-partial 의 click handler\n *\n * - handler의 this 는 record-partial임.\n */\nexport function recordPartialClickHandler(this: RecordPartial, e: MouseEvent): void {\n e.stopPropagation()\n\n /* target should be [content] or 'ox-card-field' or 'ox-card-gutter' */\n var target = (e.target as Element).closest('ox-list-field, ox-list-gutter') as DataListField | DataListGutter\n var { column, rowIndex } = target || {}\n\n /* do column click handler */\n if (column) {\n var { click } = column.handlers\n if (click) {\n click(this.config.columns, this.data, column, this.record, rowIndex, target)\n return\n }\n }\n\n /* do rows click handler */\n var { click: rowsClick } = this.config.rows.handlers\n if (rowsClick) {\n rowsClick(this.config.columns, this.data, column, this.record, rowIndex, target)\n } else {\n /* content 가 클릭된 경우 - 레코드뷰 팝업을 실행한다. */\n this.config.rows.editable && this.popupRecordView()\n }\n}\n"]}
|
@@ -20,12 +20,12 @@ export declare class DataManipulator extends LitElement {
|
|
20
20
|
removed: GristRecord[];
|
21
21
|
}): void;
|
22
22
|
onRecordChanged(recordData: GristRecord, row: number, column: ColumnConfig | null): void;
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
collapseAll(): void;
|
24
|
+
expandAll(): void;
|
25
|
+
collapseNode(record: GristRecord): void;
|
26
|
+
expandNode(record: GristRecord): void;
|
27
|
+
addSiblingNode(record: GristRecord): void;
|
28
|
+
addChildNode(record: GristRecord): void;
|
29
29
|
onCheckInTree(e: CustomEvent): void;
|
30
30
|
/**
|
31
31
|
* Forced internal data to be reflected on the screen
|
@@ -29,13 +29,13 @@ export class DataManipulator extends LitElement {
|
|
29
29
|
this.onRecordChanged(record['__origin__'], row, null);
|
30
30
|
});
|
31
31
|
/* tree processing */
|
32
|
-
this.addEventListener('collapse-all', (e) => this.
|
33
|
-
this.addEventListener('expand-all', (e) => this.
|
34
|
-
this.addEventListener('collapse-node', (e) => this.
|
35
|
-
this.addEventListener('expand-node', (e) => this.
|
32
|
+
this.addEventListener('collapse-all', (e) => this.collapseAll());
|
33
|
+
this.addEventListener('expand-all', (e) => this.expandAll());
|
34
|
+
this.addEventListener('collapse-node', (e) => this.collapseNode(e.detail));
|
35
|
+
this.addEventListener('expand-node', (e) => this.expandNode(e.detail));
|
36
36
|
this.addEventListener('check-in-tree', (e) => this.onCheckInTree(e));
|
37
|
-
this.addEventListener('add-sibling-node', (e) => this.
|
38
|
-
this.addEventListener('add-child-node', (e) => this.
|
37
|
+
this.addEventListener('add-sibling-node', (e) => this.addSiblingNode(e.detail));
|
38
|
+
this.addEventListener('add-child-node', (e) => this.addChildNode(e.detail));
|
39
39
|
}
|
40
40
|
onFieldChange({ after, before, column, record, row }) {
|
41
41
|
/* compare changes */
|
@@ -141,27 +141,33 @@ export class DataManipulator extends LitElement {
|
|
141
141
|
}));
|
142
142
|
this.requestUpdate();
|
143
143
|
}
|
144
|
-
|
144
|
+
collapseAll() {
|
145
145
|
this.refresh(false);
|
146
146
|
}
|
147
|
-
|
147
|
+
expandAll() {
|
148
148
|
this.refresh(true);
|
149
149
|
}
|
150
|
-
|
151
|
-
const record = e.detail;
|
150
|
+
collapseNode(record) {
|
152
151
|
record.__expanded__ = false;
|
153
152
|
this.refresh();
|
154
153
|
}
|
155
|
-
|
156
|
-
const record = e.detail;
|
154
|
+
expandNode(record) {
|
157
155
|
record.__expanded__ = true;
|
158
156
|
this.refresh();
|
159
157
|
}
|
160
|
-
|
158
|
+
// onCollapse(e: CustomEvent) {
|
159
|
+
// const record = e.detail as GristRecord
|
160
|
+
// record.__expanded__ = false
|
161
|
+
// this.refresh()
|
162
|
+
// }
|
163
|
+
// onExpand(e: CustomEvent) {
|
164
|
+
// const record = e.detail as GristRecord
|
165
|
+
// record.__expanded__ = true
|
166
|
+
// this.refresh()
|
167
|
+
// }
|
168
|
+
addSiblingNode(record) {
|
161
169
|
const { records } = this.data;
|
162
170
|
const toplevelRecords = records.filter(record => !record.__depth__); /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */
|
163
|
-
const field = e.detail;
|
164
|
-
const { record } = field;
|
165
171
|
const { __depth__ } = record;
|
166
172
|
function findParent(record, parent) {
|
167
173
|
var children = (parent ? parent.__children__ || [] : toplevelRecords);
|
@@ -183,12 +189,23 @@ export class DataManipulator extends LitElement {
|
|
183
189
|
__dirty__: '+'
|
184
190
|
};
|
185
191
|
if (parent) {
|
186
|
-
const {
|
187
|
-
|
192
|
+
const { id } = parent;
|
193
|
+
sibling.parent = { id };
|
194
|
+
if (!parent.__children__) {
|
188
195
|
parent.__children__ = [sibling];
|
189
196
|
}
|
190
197
|
else {
|
191
|
-
|
198
|
+
let index = parent.__children__.indexOf(record);
|
199
|
+
if (index !== -1) {
|
200
|
+
parent.__children__ = [
|
201
|
+
...parent.__children__.slice(0, index + 1),
|
202
|
+
sibling,
|
203
|
+
...parent.__children__.slice(index + 1)
|
204
|
+
];
|
205
|
+
}
|
206
|
+
else {
|
207
|
+
parent.__children__ = [...parent.__children__, sibling];
|
208
|
+
}
|
192
209
|
}
|
193
210
|
parent.__expanded__ = true;
|
194
211
|
}
|
@@ -197,22 +214,23 @@ export class DataManipulator extends LitElement {
|
|
197
214
|
}
|
198
215
|
this.refresh();
|
199
216
|
}
|
200
|
-
|
201
|
-
const
|
202
|
-
const { record } = field;
|
203
|
-
const { __children__, __depth__, __seq__ } = record;
|
217
|
+
addChildNode(record) {
|
218
|
+
const { id: parentId, __children__, __depth__ } = record;
|
204
219
|
const child = {
|
220
|
+
parent: {
|
221
|
+
id: parentId
|
222
|
+
},
|
205
223
|
__depth__: (__depth__ || 0) + 1,
|
206
224
|
__dirty__: '+'
|
207
225
|
};
|
208
|
-
if (!__children__) {
|
226
|
+
if (!record.__children__) {
|
209
227
|
record.__children__ = [child];
|
210
228
|
}
|
211
229
|
else {
|
212
|
-
record.__children__.
|
230
|
+
record.__children__.unshift(child);
|
213
231
|
}
|
214
232
|
record.__expanded__ = true;
|
215
|
-
|
233
|
+
// this.requestUpdate()
|
216
234
|
this.refresh();
|
217
235
|
}
|
218
236
|
onCheckInTree(e) {
|
@@ -277,10 +295,7 @@ export class DataManipulator extends LitElement {
|
|
277
295
|
}
|
278
296
|
traverseRefresh(record, forceExpandOrCollapse) {
|
279
297
|
if (forceExpandOrCollapse !== undefined) {
|
280
|
-
record =
|
281
|
-
...record,
|
282
|
-
__expanded__: forceExpandOrCollapse
|
283
|
-
};
|
298
|
+
record.__expanded__ = forceExpandOrCollapse;
|
284
299
|
}
|
285
300
|
const { __expanded__, __children__ = [] } = record;
|
286
301
|
if (__expanded__ && __children__.length > 0) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data-manipulator.js","sourceRoot":"","sources":["../../src/data-manipulator.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyValues } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { ZERO_CONFIG, ZERO_DATA } from './configure/zero-config'\nimport {\n ColumnConfig,\n FilterValue,\n GristConfig,\n GristData,\n GristRecord,\n PaginationConfig,\n SortersConfig\n} from './types'\n\nexport class DataManipulator extends LitElement {\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Array }) sorters: SortersConfig = []\n @property({ type: Array }) filters: FilterValue[] = []\n @property({ type: Object }) pagination: PaginationConfig = {}\n\n constructor() {\n super()\n\n this.addEventListener('select-record-change', e => {\n var {\n records: selectedRecords,\n added = [],\n removed = []\n } = (e as CustomEvent).detail as {\n records: GristRecord[]\n added: GristRecord[]\n removed: GristRecord[]\n }\n\n this.onSelectRecordChanged({\n selectedRecords,\n added,\n removed\n })\n })\n\n /* field change processing */\n this.addEventListener('field-change', e => {\n var { after, before, column, record, row } = (e as CustomEvent).detail as {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }\n\n this.onFieldChange({ after, before, column, record, row })\n })\n\n /* record reset processing */\n this.addEventListener('record-reset', e => {\n var { record, row } = (e as CustomEvent).detail as {\n record: GristRecord\n row: number\n }\n\n this.onRecordChanged(record['__origin__'], row, null)\n })\n\n /* tree processing */\n this.addEventListener('collapse-all', (e: Event) => this.onCollapseAll(e as CustomEvent))\n this.addEventListener('expand-all', (e: Event) => this.onExpandAll(e as CustomEvent))\n this.addEventListener('collapse-node', (e: Event) => this.onCollapse(e as CustomEvent))\n this.addEventListener('expand-node', (e: Event) => this.onExpand(e as CustomEvent))\n this.addEventListener('check-in-tree', (e: Event) => this.onCheckInTree(e as CustomEvent))\n\n this.addEventListener('add-sibling-node', (e: Event) => this.onAddSiblingNode(e as CustomEvent))\n this.addEventListener('add-child-node', (e: Event) => this.onAddChildNode(e as CustomEvent))\n }\n\n onFieldChange({\n after,\n before,\n column,\n record,\n row\n }: {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }) {\n /* compare changes */\n if (after === before) {\n return\n }\n\n var validation = column.validation\n if (validation && typeof validation == 'function') {\n if (!validation.call(this, after, before, record, column)) {\n return\n }\n }\n\n this.onRecordChanged({ [column.name]: after }, row, column)\n }\n\n onSelectRecordChanged({\n selectedRecords,\n added = [],\n removed = []\n }: {\n selectedRecords: GristRecord[]\n added: GristRecord[]\n removed: GristRecord[]\n }) {\n var { records } = this.data || {}\n var { selectable = false } = this.config.rows || {}\n\n if (!records || !selectable) {\n return\n }\n\n if (selectable && !selectable.multiple) {\n records.forEach(record => (record['__selected__'] = false))\n }\n\n if (selectedRecords) {\n records.forEach(record => (record['__selected__'] = false))\n selectedRecords.forEach(record => (record['__selected__'] = true))\n } else {\n removed.forEach(record => (record['__selected__'] = false))\n added.forEach(record => (record['__selected__'] = true))\n }\n\n this.requestUpdate()\n }\n\n onRecordChanged(\n recordData: GristRecord,\n row: number,\n column: ColumnConfig | null /* TODO column should be removed */\n ) {\n // TODO 오브젝트나 배열 타입인 경우 deepCompare 후에 변경 적용 여부를 결정한다.\n\n /* 빈 그리드로 시작한 경우, data 설정이 되어있지 않을 수 있다. */\n var records = this.data.records\n\n var beforeRecord = records[row]\n var afterRecord: GristRecord\n var wantToDelete = false\n var wantToAppend = false\n\n if (!recordData) {\n if (!beforeRecord) {\n /* recordData가 없고, beforeRecord도 없다면, 레코드 생성 중에 리셋된 경우이므로 아무것도 하지 않는다. */\n this.requestUpdate()\n return\n } else {\n /*\n * beforeRecord가 있는데, 빈데이타로 업데이트하고자 한다면,\n * 삭제하고자 하는 의도로 이해된다. (주의 필요)\n */\n if (beforeRecord['__dirty__'] == '+') {\n wantToDelete = true\n } else {\n afterRecord = {\n ...beforeRecord,\n __dirty__: '-'\n }\n }\n }\n } else {\n if (!beforeRecord) {\n /* 기존 레코드가 없는 경우에는 새로운 레코드가 생성된다 */\n afterRecord = {\n ...recordData,\n __dirty__: '+'\n }\n\n wantToAppend = true\n } else {\n let beforeDirty = beforeRecord['__dirty__']\n if (beforeDirty == '+') {\n /* 기존에 새로 생성된 레코드가 있었으며 계속 수정중이다.(레코드 레퍼런스를 유지해야한다) */\n afterRecord = Object.assign(beforeRecord, recordData, { __dirty__: '+' })\n } else {\n /* 기존에 레코드가 있었으며 계속 수정중이다.(레코드 레퍼런스를 유지해야한다) */\n afterRecord = Object.assign(beforeRecord, recordData, { __dirty__: 'M' })\n }\n }\n }\n\n if (wantToAppend) {\n records.push(afterRecord!)\n } else if (wantToDelete) {\n records.splice(row, 1)\n } else {\n records.splice(row, 1, afterRecord!)\n }\n\n this.dispatchEvent(\n new CustomEvent('record-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: beforeRecord,\n after: afterRecord!,\n column,\n row\n }\n })\n )\n\n this.requestUpdate()\n }\n\n onCollapseAll(e: CustomEvent) {\n this.refresh(false)\n }\n\n onExpandAll(e: CustomEvent) {\n this.refresh(true)\n }\n\n onCollapse(e: CustomEvent) {\n const record = e.detail as GristRecord\n record.__expanded__ = false\n\n this.refresh()\n }\n\n onExpand(e: CustomEvent) {\n const record = e.detail as GristRecord\n record.__expanded__ = true\n\n this.refresh()\n }\n\n onAddSiblingNode(e: CustomEvent) {\n const { records } = this.data\n const toplevelRecords = records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n\n const field = e.detail\n const { record } = field\n const { __depth__ } = record as GristRecord\n\n function findParent(record: GristRecord, parent?: GristRecord): GristRecord | undefined {\n var children = (parent ? parent.__children__ || [] : toplevelRecords) as GristRecord[]\n\n if (children.find(child => child === record)) {\n return parent\n } else {\n for (let child of children) {\n const found = findParent(record, child)\n if (found) {\n return found\n }\n }\n }\n }\n\n const parent = findParent(record)\n\n const sibling = {\n __depth__,\n __dirty__: '+'\n }\n\n if (parent) {\n const { __children__ } = parent as GristRecord\n\n if (!__children__) {\n parent.__children__ = [sibling]\n } else {\n parent.__children__ = [...__children__, sibling]\n }\n\n parent.__expanded__ = true\n } else {\n this.data.records = [...toplevelRecords, sibling]\n }\n\n this.refresh()\n }\n\n onAddChildNode(e: CustomEvent) {\n const field = e.detail\n const { record } = field\n\n const { __children__, __depth__, __seq__ } = record as GristRecord\n const child = {\n __depth__: (__depth__ || 0) + 1,\n __dirty__: '+'\n }\n\n if (!__children__) {\n record.__children__ = [child]\n } else {\n record.__children__.push(child)\n }\n\n record.__expanded__ = true\n\n field.requestUpdate()\n\n this.refresh()\n }\n\n onCheckInTree(e: CustomEvent) {\n function walkTreeCheckedUpdate(record: GristRecord, checked: 'checked' | 'unchecked') {\n const children = record.__children__\n\n children?.forEach(child => walkTreeCheckedUpdate(child, checked))\n record.__check_in_tree__ = checked\n record.__selected__ = checked == 'checked'\n }\n\n function updateCheckedAll(record: GristRecord) {\n /* 자식들의 checked 상태로 record의 checked 상태를 수정한다. */\n const children = record.__children__\n\n if (!children || children.length == 0) {\n return\n }\n\n children.forEach(child => updateCheckedAll(child))\n\n var checked: 'checked' | 'half-checked' | 'unchecked' | undefined =\n record.__check_in_tree__ == 'checked' ? 'checked' : undefined\n\n children.forEach(child => {\n const { __check_in_tree__ } = child\n\n if (__check_in_tree__ == 'half-checked') {\n checked = 'half-checked'\n } else if (__check_in_tree__ == 'checked') {\n checked = checked == 'checked' ? 'checked' : 'half-checked'\n } else {\n checked = checked == 'unchecked' || !checked ? 'unchecked' : 'half-checked'\n }\n })\n\n record.__check_in_tree__ = checked\n record.__selected__ = checked == 'checked'\n }\n\n e.stopPropagation()\n\n const record = e.detail\n var checked = record.__check_in_tree__\n\n walkTreeCheckedUpdate(record, !checked || checked == 'unchecked' ? 'checked' : 'unchecked')\n const toplevelRecords = this.data.records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n\n toplevelRecords.forEach(record => updateCheckedAll(record))\n\n this.refresh()\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh(forceExpandOrCollapse?: boolean) {\n /*\n - TODO 여기에서 TREE 형태 데이터의 접고, 펴는 것을 재구성한다.\n - 동적으로 서브항목을 fetch 하는 기능은 제공하지 않는다.\n\n 1. 빈배열에서 시작한다.\n 2. 기존 배열을 traverseRefresh하면서, collapsed 여부에 따라서, 자식의 포함여부를 결정하고 준비한 배열에 하나씩 추가한다.\n\n */\n const { records } = this.data\n const toplevelRecords = records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n this.data = {\n ...this.data,\n records: ([] as GristRecord[]).concat(\n ...toplevelRecords.map(record => this.traverseRefresh(record, forceExpandOrCollapse))\n )\n }\n }\n\n private traverseRefresh(record: GristRecord, forceExpandOrCollapse?: boolean): GristRecord[] {\n if (forceExpandOrCollapse !== undefined) {\n record = {\n ...record,\n __expanded__: forceExpandOrCollapse\n }\n }\n\n const { __expanded__, __children__ = [] } = record\n\n if (__expanded__ && __children__.length > 0) {\n return [record].concat(...__children__.map(child => this.traverseRefresh(child, forceExpandOrCollapse)))\n } else {\n return [record]\n }\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"data-manipulator.js","sourceRoot":"","sources":["../../src/data-manipulator.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyValues } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport { ZERO_CONFIG, ZERO_DATA } from './configure/zero-config'\nimport {\n ColumnConfig,\n FilterValue,\n GristConfig,\n GristData,\n GristRecord,\n PaginationConfig,\n SortersConfig\n} from './types'\n\nexport class DataManipulator extends LitElement {\n @property({ type: Object }) config: GristConfig = ZERO_CONFIG\n @property({ type: Object }) data: GristData = ZERO_DATA\n @property({ type: Array }) sorters: SortersConfig = []\n @property({ type: Array }) filters: FilterValue[] = []\n @property({ type: Object }) pagination: PaginationConfig = {}\n\n constructor() {\n super()\n\n this.addEventListener('select-record-change', e => {\n var {\n records: selectedRecords,\n added = [],\n removed = []\n } = (e as CustomEvent).detail as {\n records: GristRecord[]\n added: GristRecord[]\n removed: GristRecord[]\n }\n\n this.onSelectRecordChanged({\n selectedRecords,\n added,\n removed\n })\n })\n\n /* field change processing */\n this.addEventListener('field-change', e => {\n var { after, before, column, record, row } = (e as CustomEvent).detail as {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }\n\n this.onFieldChange({ after, before, column, record, row })\n })\n\n /* record reset processing */\n this.addEventListener('record-reset', e => {\n var { record, row } = (e as CustomEvent).detail as {\n record: GristRecord\n row: number\n }\n\n this.onRecordChanged(record['__origin__'], row, null)\n })\n\n /* tree processing */\n this.addEventListener('collapse-all', (e: Event) => this.collapseAll())\n this.addEventListener('expand-all', (e: Event) => this.expandAll())\n this.addEventListener('collapse-node', (e: Event) => this.collapseNode((e as CustomEvent).detail as GristRecord))\n this.addEventListener('expand-node', (e: Event) => this.expandNode((e as CustomEvent).detail as GristRecord))\n this.addEventListener('check-in-tree', (e: Event) => this.onCheckInTree(e as CustomEvent))\n\n this.addEventListener('add-sibling-node', (e: Event) =>\n this.addSiblingNode((e as CustomEvent).detail as GristRecord)\n )\n this.addEventListener('add-child-node', (e: Event) => this.addChildNode((e as CustomEvent).detail as GristRecord))\n }\n\n onFieldChange({\n after,\n before,\n column,\n record,\n row\n }: {\n after: any\n before: any\n column: ColumnConfig\n record: GristRecord\n row: number\n }) {\n /* compare changes */\n if (after === before) {\n return\n }\n\n var validation = column.validation\n if (validation && typeof validation == 'function') {\n if (!validation.call(this, after, before, record, column)) {\n return\n }\n }\n\n this.onRecordChanged({ [column.name]: after }, row, column)\n }\n\n onSelectRecordChanged({\n selectedRecords,\n added = [],\n removed = []\n }: {\n selectedRecords: GristRecord[]\n added: GristRecord[]\n removed: GristRecord[]\n }) {\n var { records } = this.data || {}\n var { selectable = false } = this.config.rows || {}\n\n if (!records || !selectable) {\n return\n }\n\n if (selectable && !selectable.multiple) {\n records.forEach(record => (record['__selected__'] = false))\n }\n\n if (selectedRecords) {\n records.forEach(record => (record['__selected__'] = false))\n selectedRecords.forEach(record => (record['__selected__'] = true))\n } else {\n removed.forEach(record => (record['__selected__'] = false))\n added.forEach(record => (record['__selected__'] = true))\n }\n\n this.requestUpdate()\n }\n\n onRecordChanged(\n recordData: GristRecord,\n row: number,\n column: ColumnConfig | null /* TODO column should be removed */\n ) {\n // TODO 오브젝트나 배열 타입인 경우 deepCompare 후에 변경 적용 여부를 결정한다.\n\n /* 빈 그리드로 시작한 경우, data 설정이 되어있지 않을 수 있다. */\n var records = this.data.records\n\n var beforeRecord = records[row]\n var afterRecord: GristRecord\n var wantToDelete = false\n var wantToAppend = false\n\n if (!recordData) {\n if (!beforeRecord) {\n /* recordData가 없고, beforeRecord도 없다면, 레코드 생성 중에 리셋된 경우이므로 아무것도 하지 않는다. */\n this.requestUpdate()\n return\n } else {\n /*\n * beforeRecord가 있는데, 빈데이타로 업데이트하고자 한다면,\n * 삭제하고자 하는 의도로 이해된다. (주의 필요)\n */\n if (beforeRecord['__dirty__'] == '+') {\n wantToDelete = true\n } else {\n afterRecord = {\n ...beforeRecord,\n __dirty__: '-'\n }\n }\n }\n } else {\n if (!beforeRecord) {\n /* 기존 레코드가 없는 경우에는 새로운 레코드가 생성된다 */\n afterRecord = {\n ...recordData,\n __dirty__: '+'\n }\n\n wantToAppend = true\n } else {\n let beforeDirty = beforeRecord['__dirty__']\n if (beforeDirty == '+') {\n /* 기존에 새로 생성된 레코드가 있었으며 계속 수정중이다.(레코드 레퍼런스를 유지해야한다) */\n afterRecord = Object.assign(beforeRecord, recordData, { __dirty__: '+' })\n } else {\n /* 기존에 레코드가 있었으며 계속 수정중이다.(레코드 레퍼런스를 유지해야한다) */\n afterRecord = Object.assign(beforeRecord, recordData, { __dirty__: 'M' })\n }\n }\n }\n\n if (wantToAppend) {\n records.push(afterRecord!)\n } else if (wantToDelete) {\n records.splice(row, 1)\n } else {\n records.splice(row, 1, afterRecord!)\n }\n\n this.dispatchEvent(\n new CustomEvent('record-change', {\n bubbles: true,\n composed: true,\n detail: {\n before: beforeRecord,\n after: afterRecord!,\n column,\n row\n }\n })\n )\n\n this.requestUpdate()\n }\n\n collapseAll() {\n this.refresh(false)\n }\n\n expandAll() {\n this.refresh(true)\n }\n\n collapseNode(record: GristRecord) {\n record.__expanded__ = false\n\n this.refresh()\n }\n\n expandNode(record: GristRecord) {\n record.__expanded__ = true\n\n this.refresh()\n }\n\n // onCollapse(e: CustomEvent) {\n // const record = e.detail as GristRecord\n // record.__expanded__ = false\n\n // this.refresh()\n // }\n\n // onExpand(e: CustomEvent) {\n // const record = e.detail as GristRecord\n // record.__expanded__ = true\n\n // this.refresh()\n // }\n\n addSiblingNode(record: GristRecord) {\n const { records } = this.data\n const toplevelRecords = records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n\n const { __depth__ } = record as GristRecord\n\n function findParent(record: GristRecord, parent?: GristRecord): GristRecord | undefined {\n var children = (parent ? parent.__children__ || [] : toplevelRecords) as GristRecord[]\n\n if (children.find(child => child === record)) {\n return parent\n } else {\n for (let child of children) {\n const found = findParent(record, child)\n if (found) {\n return found\n }\n }\n }\n }\n\n const parent = findParent(record)\n\n const sibling = {\n __depth__,\n __dirty__: '+'\n } as GristRecord\n\n if (parent) {\n const { id } = parent as GristRecord\n\n sibling.parent = { id }\n\n if (!parent.__children__) {\n parent.__children__ = [sibling]\n } else {\n let index = parent.__children__.indexOf(record)\n\n if (index !== -1) {\n parent.__children__ = [\n ...parent.__children__.slice(0, index + 1),\n sibling,\n ...parent.__children__.slice(index + 1)\n ]\n } else {\n parent.__children__ = [...parent.__children__, sibling]\n }\n }\n\n parent.__expanded__ = true\n } else {\n this.data.records = [...toplevelRecords, sibling]\n }\n\n this.refresh()\n }\n\n addChildNode(record: GristRecord) {\n const { id: parentId, __children__, __depth__ } = record as GristRecord\n const child = {\n parent: {\n id: parentId\n },\n __depth__: (__depth__ || 0) + 1,\n __dirty__: '+'\n }\n\n if (!record.__children__) {\n record.__children__ = [child]\n } else {\n record.__children__.unshift(child)\n }\n\n record.__expanded__ = true\n\n // this.requestUpdate()\n\n this.refresh()\n }\n\n onCheckInTree(e: CustomEvent) {\n function walkTreeCheckedUpdate(record: GristRecord, checked: 'checked' | 'unchecked') {\n const children = record.__children__\n\n children?.forEach(child => walkTreeCheckedUpdate(child, checked))\n record.__check_in_tree__ = checked\n record.__selected__ = checked == 'checked'\n }\n\n function updateCheckedAll(record: GristRecord) {\n /* 자식들의 checked 상태로 record의 checked 상태를 수정한다. */\n const children = record.__children__\n\n if (!children || children.length == 0) {\n return\n }\n\n children.forEach(child => updateCheckedAll(child))\n\n var checked: 'checked' | 'half-checked' | 'unchecked' | undefined =\n record.__check_in_tree__ == 'checked' ? 'checked' : undefined\n\n children.forEach(child => {\n const { __check_in_tree__ } = child\n\n if (__check_in_tree__ == 'half-checked') {\n checked = 'half-checked'\n } else if (__check_in_tree__ == 'checked') {\n checked = checked == 'checked' ? 'checked' : 'half-checked'\n } else {\n checked = checked == 'unchecked' || !checked ? 'unchecked' : 'half-checked'\n }\n })\n\n record.__check_in_tree__ = checked\n record.__selected__ = checked == 'checked'\n }\n\n e.stopPropagation()\n\n const record = e.detail\n var checked = record.__check_in_tree__\n\n walkTreeCheckedUpdate(record, !checked || checked == 'unchecked' ? 'checked' : 'unchecked')\n const toplevelRecords = this.data.records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n\n toplevelRecords.forEach(record => updateCheckedAll(record))\n\n this.refresh()\n }\n\n /**\n * Forced internal data to be reflected on the screen\n * Data changing through a normal method is automatically reflected on the screen, so it is a method that does not need to be used in general.\n * Therefore, it will be deprecated.\n * @method\n */\n refresh(forceExpandOrCollapse?: boolean) {\n /*\n - TODO 여기에서 TREE 형태 데이터의 접고, 펴는 것을 재구성한다.\n - 동적으로 서브항목을 fetch 하는 기능은 제공하지 않는다.\n\n 1. 빈배열에서 시작한다.\n 2. 기존 배열을 traverseRefresh하면서, collapsed 여부에 따라서, 자식의 포함여부를 결정하고 준비한 배열에 하나씩 추가한다.\n\n */\n const { records } = this.data\n const toplevelRecords = records.filter(\n record => !record.__depth__\n ) /* __depth__ 가 설정되지 않았거나, 0 인 경우만 수집 */\n this.data = {\n ...this.data,\n records: ([] as GristRecord[]).concat(\n ...toplevelRecords.map(record => this.traverseRefresh(record, forceExpandOrCollapse))\n )\n }\n }\n\n private traverseRefresh(record: GristRecord, forceExpandOrCollapse?: boolean): GristRecord[] {\n if (forceExpandOrCollapse !== undefined) {\n record.__expanded__ = forceExpandOrCollapse\n }\n\n const { __expanded__, __children__ = [] } = record\n\n if (__expanded__ && __children__.length > 0) {\n return [record].concat(...__children__.map(child => this.traverseRefresh(child, forceExpandOrCollapse)))\n } else {\n return [record]\n }\n }\n}\n"]}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js';
|
2
2
|
export declare class OxGristEditorCheckbox extends OxGristEditor {
|
3
|
-
|
3
|
+
_onchange(e: Event): void;
|
4
|
+
formatFromEditor(value: any): boolean | undefined;
|
4
5
|
formatForEditor(value: any): any;
|
5
6
|
get editorTemplate(): import("lit").TemplateResult<1>;
|
6
7
|
}
|
@@ -3,8 +3,15 @@ import { OxGristEditor } from './ox-grist-editor.js';
|
|
3
3
|
import { customElement } from 'lit/decorators.js';
|
4
4
|
import { html } from 'lit';
|
5
5
|
let OxGristEditorCheckbox = class OxGristEditorCheckbox extends OxGristEditor {
|
6
|
-
|
7
|
-
|
6
|
+
_onchange(e) {
|
7
|
+
e.stopPropagation();
|
8
|
+
const input = e.target;
|
9
|
+
this._dirtyValue = this.formatFromEditor(input.checked);
|
10
|
+
}
|
11
|
+
formatFromEditor(value) {
|
12
|
+
if (typeof value == 'boolean') {
|
13
|
+
return value;
|
14
|
+
}
|
8
15
|
}
|
9
16
|
formatForEditor(value) {
|
10
17
|
return value == !!value && !!String(value).match(/true/i);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-grist-editor-checkbox.js","sourceRoot":"","sources":["../../../src/editors/ox-grist-editor-checkbox.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAGnB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,aAAa;IACtD,
|
1
|
+
{"version":3,"file":"ox-grist-editor-checkbox.js","sourceRoot":"","sources":["../../../src/editors/ox-grist-editor-checkbox.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAGnB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,aAAa;IACtD,SAAS,CAAC,CAAQ;QAChB,CAAC,CAAC,eAAe,EAAE,CAAA;QAEnB,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B,CAAA;QAE1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACzD,CAAC;IAED,gBAAgB,CAAC,KAAU;QACzB,IAAI,OAAO,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,eAAe,CAAC,KAAU;QACxB,OAAO,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,oCAAoC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;IAC1G,CAAC;CACF,CAAA;AAtBY,qBAAqB;IADjC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,qBAAqB,CAsBjC","sourcesContent":["import { OxGristEditor } from './ox-grist-editor.js'\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\n\n@customElement('ox-grist-editor-checkbox')\nexport class OxGristEditorCheckbox extends OxGristEditor {\n _onchange(e: Event) {\n e.stopPropagation()\n\n const input = e.target as HTMLInputElement\n\n this._dirtyValue = this.formatFromEditor(input.checked)\n }\n\n formatFromEditor(value: any) {\n if (typeof value == 'boolean') {\n return value\n }\n }\n\n formatForEditor(value: any): any {\n return value == !!value && !!String(value).match(/true/i)\n }\n\n get editorTemplate() {\n return html` <input type=\"checkbox\" .checked=${!!this.value && !!String(this.value).match(/true/i)} /> `\n }\n}\n"]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { OxGristEditor } from './ox-grist-editor.js';
|
2
2
|
export declare class OxGristEditorDateTime extends OxGristEditor {
|
3
3
|
formatForEditor(timestamp: any): string;
|
4
|
-
formatFromEditor(
|
4
|
+
formatFromEditor(value: any): number;
|
5
5
|
get editorTemplate(): import("lit").TemplateResult<1>;
|
6
6
|
}
|
@@ -11,8 +11,7 @@ let OxGristEditorDateTime = class OxGristEditorDateTime extends OxGristEditor {
|
|
11
11
|
var tzoffset = datetime.getTimezoneOffset() * 60000; //offset in milliseconds
|
12
12
|
return new Date(timestamp - tzoffset).toISOString().slice(0, -1);
|
13
13
|
}
|
14
|
-
formatFromEditor(
|
15
|
-
var value = e.target.value;
|
14
|
+
formatFromEditor(value) {
|
16
15
|
var datetime = new Date(value);
|
17
16
|
return datetime.getTime();
|
18
17
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ox-grist-editor-datetime.js","sourceRoot":"","sources":["../../../src/editors/ox-grist-editor-datetime.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAGnB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,aAAa;IACtD,eAAe,CAAC,SAAc;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,CAAC;QACD,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;QAElC,IAAI,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAA,CAAC,wBAAwB;QAE5E,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,gBAAgB,CAAC,
|
1
|
+
{"version":3,"file":"ox-grist-editor-datetime.js","sourceRoot":"","sources":["../../../src/editors/ox-grist-editor-datetime.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAGnB,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,aAAa;IACtD,eAAe,CAAC,SAAc;QAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACxB,CAAC;QACD,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;QAElC,IAAI,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAA,CAAC,wBAAwB;QAE5E,OAAO,IAAI,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,gBAAgB,CAAC,KAAU;QACzB,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;QAE9B,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAA,wCAAwC,IAAI,CAAC,KAAK,MAAM,CAAA;IACrE,CAAC;CACF,CAAA;AArBY,qBAAqB;IADjC,aAAa,CAAC,0BAA0B,CAAC;GAC7B,qBAAqB,CAqBjC","sourcesContent":["import { OxGristEditor } from './ox-grist-editor.js'\nimport { customElement } from 'lit/decorators.js'\nimport { html } from 'lit'\n\n@customElement('ox-grist-editor-datetime')\nexport class OxGristEditorDateTime extends OxGristEditor {\n formatForEditor(timestamp: any) {\n if (!timestamp) {\n timestamp = Date.now()\n }\n var datetime = new Date(timestamp)\n\n var tzoffset = datetime.getTimezoneOffset() * 60000 //offset in milliseconds\n\n return new Date(timestamp - tzoffset).toISOString().slice(0, -1)\n }\n\n formatFromEditor(value: any) {\n var datetime = new Date(value)\n\n return datetime.getTime()\n }\n\n get editorTemplate() {\n return html` <input type=\"datetime-local\" .value=${this.value} /> `\n }\n}\n"]}
|