@one-grid-core/angular 0.4.0 → 0.5.1
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/README.md +3 -0
- package/esm2022/lib/core/instants/one-grid-api.class.mjs +103 -6
- package/esm2022/lib/core/models/one-grid-types.model.mjs +1 -1
- package/esm2022/lib/core/services/one-grid-row.service.mjs +10 -1
- package/fesm2022/one-grid-core-angular.mjs +111 -5
- package/fesm2022/one-grid-core-angular.mjs.map +1 -1
- package/lib/core/instants/one-grid-api.class.d.ts +13 -1
- package/lib/core/models/one-grid-types.model.d.ts +19 -0
- package/lib/core/services/one-grid-row.service.d.ts +7 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtdHlwZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvbW9kZWxzL29uZS1ncmlkLXR5cGVzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBPbmVHcmlkQXBpIH0gZnJvbSBcIi4uL2luc3RhbnRzL29uZS1ncmlkLWFwaS5jbGFzc1wiO1xuaW1wb3J0IHR5cGUgeyBPbmVSb3dOb2RlIH0gZnJvbSBcIi4uL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzc1wiO1xuaW1wb3J0IHR5cGUgeyBPbmVDb2x1bW5EZWYsIE9uZUdyb3VwQ29sdW1uRGVmIH0gZnJvbSBcIi4vb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgUm93U2VsZWN0aW9uTW9kZSB9IGZyb20gXCIuL29uZS1ldmVudC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBPbmVEZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tIFwiLi9vbmUtbWFzdGVyLWRldGFpbC5tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tIFwiLi9vbmUtdHJlZS1kYXRhLm1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIE9uZUdyaWRUeXBlID0gJ3NpbXBsZScgfCAnbWFzdGVyJyB8ICdkZXRhaWwnIHwgJ3RyZWUnIHwgbnVsbDtcblxuLyoqXG4gKiBFdmVyeXRoaW5nIGBPbmVHcmlkQXBpLmluaXRgIG5lZWRzIHRvIHN0YW5kIGEgZ3JpZCB1cC5cbiAqXG4gKiBBbiBvcHRpb25zIG9iamVjdCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uYWwgbGlzdDogdGhlIHByZXZpb3VzIHNpZ25hdHVyZSB0b29rXG4gKiB0ZW4gcG9zaXRpb25hbCBhcmd1bWVudHMsIGZvdXIgb2YgdGhlbSBvcHRpb25hbCBhbmQgdHdvIG9mIHRoZW0gYm9vbGVhbnMsIHNvXG4gKiBhIGNhbGwgc2l0ZSB3YXMgdW5yZWFkYWJsZSBhbmQgYWRkaW5nIGFuIG9wdGlvbiBtZWFudCB0b3VjaGluZyBldmVyeSBjYWxsZXIuXG4gKlxuICogYE9uZUdyaWRDb21wb25lbnRgIGNhbGxzIHRoaXMgZnJvbSBgbmdPbkluaXRgLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG5vdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmVHcmlkSW5pdE9wdGlvbnM8VCA9IGFueT4ge1xuICAgIC8qKiBXaGljaCByb2xlIHRoaXMgaW5zdGFuY2UgcGxheXMuIGBPbmVHcmlkQ29tcG9uZW50YCBkZXJpdmVzIGl0IGZyb20gaXRzIGlucHV0cy4gKi9cbiAgICBncmlkVHlwZTogT25lR3JpZFR5cGU7XG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucywgYmVmb3JlIGBkZWZhdWx0Q29sdW1uRGVmYCBpcyBtZXJnZWQgaW4uICovXG4gICAgY29sdW1uRGVmczogT25lQ29sdW1uRGVmPFQ+W107XG4gICAgLyoqIE1lcmdlZCBpbnRvIGV2ZXJ5IGNvbHVtbiBkZWZpbml0aW9uLiAqL1xuICAgIGRlZmF1bHRDb2x1bW5EZWY/OiBPbmVDb2x1bW5EZWY8VD47XG4gICAgLyoqIEhlYWRlciBncm91cHMuIENvbHVtbnMgam9pbiBvbmUgYnkgYGdyb3VwSWRgLiAqL1xuICAgIGdyb3VwQ29sdW1uRGVmcz86IE9uZUdyb3VwQ29sdW1uRGVmW107XG4gICAgLyoqIFBhc3NlZCB0byByZW5kZXJlcnMsIGdldHRlcnMgYW5kIHByZWRpY2F0ZXM7IGBjb21wb25lbnRQYXJlbnQuZ2V0Um93SWRgIGlzIHJlYWQgZnJvbSBpdC4gKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKiBgbnVsbGAgZGlzYWJsZXMgcm93IHNlbGVjdGlvbiBlbnRpcmVseS4gUmVhZCBvbmNlLCBoZXJlLiAqL1xuICAgIHJvd1NlbGVjdGlvbj86IFJvd1NlbGVjdGlvbk1vZGU7XG4gICAgLyoqIFR1cm5zIG9uIHRoZSBuZXN0ZWQgZGV0YWlsIGdyaWQuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGB0cmVlRGF0YWAuICovXG4gICAgbWFzdGVyRGV0YWlsPzogYm9vbGVhbjtcbiAgICAvKiogRGV0YWlsIGdyaWQgb3B0aW9ucyBwbHVzIGBnZXREZXRhaWxSb3dEYXRhYC4gUmVxdWlyZWQgd2hlbiBgbWFzdGVyRGV0YWlsYCBpcyBvbi4gKi9cbiAgICBkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM/OiBPbmVEZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM7XG4gICAgLyoqIFJlbmRlciBhIGNvbXBvbmVudCBpbiB0aGUgZGV0YWlsIGFyZWEgaW5zdGVhZCBvZiBhIG5lc3RlZCBncmlkLiAqL1xuICAgIGRldGFpbFJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQ+O1xuICAgIC8qKiBUdXJucyBvbiBoaWVyYXJjaGljYWwgcm93IGJ1aWxkaW5nLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgbWFzdGVyRGV0YWlsYC4gKi9cbiAgICB0cmVlRGF0YT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25lR3JpZFJlYWR5RXZlbnQ8VCA9IGFueT4ge1xuICAgIGFwaTogT25lR3JpZEFwaTxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VCA9IGFueT4ge1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgZGF0YTogVDtcbiAgICBhcGk/OiBPbmVHcmlkQXBpPFQ+O1xuICAgIGNvbHVtbj86IE9uZUNvbHVtbkRlZjtcbiAgICBub2RlOiBPbmVSb3dOb2RlPFQ+O1xuICAgIG1hc3Rlck5vZGU/OiBPbmVSb3dOb2RlPFQ+O1xuICAgIGdyaWRUeXBlPzogT25lR3JpZFR5cGU7XG4gICAgc2VsZWN0ZWQ/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtdHlwZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvbW9kZWxzL29uZS1ncmlkLXR5cGVzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBPbmVHcmlkQXBpIH0gZnJvbSBcIi4uL2luc3RhbnRzL29uZS1ncmlkLWFwaS5jbGFzc1wiO1xuaW1wb3J0IHR5cGUgeyBPbmVSb3dOb2RlIH0gZnJvbSBcIi4uL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzc1wiO1xuaW1wb3J0IHR5cGUgeyBPbmVDb2x1bW5EZWYsIE9uZUdyb3VwQ29sdW1uRGVmIH0gZnJvbSBcIi4vb25lLWNvbHVtbi1kZWYtdHlwZXMubW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgUm93U2VsZWN0aW9uTW9kZSB9IGZyb20gXCIuL29uZS1ldmVudC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBPbmVEZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXMgfSBmcm9tIFwiLi9vbmUtbWFzdGVyLWRldGFpbC5tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tIFwiLi9vbmUtdHJlZS1kYXRhLm1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIE9uZUdyaWRUeXBlID0gJ3NpbXBsZScgfCAnbWFzdGVyJyB8ICdkZXRhaWwnIHwgJ3RyZWUnIHwgbnVsbDtcblxuLyoqXG4gKiBFdmVyeXRoaW5nIGBPbmVHcmlkQXBpLmluaXRgIG5lZWRzIHRvIHN0YW5kIGEgZ3JpZCB1cC5cbiAqXG4gKiBBbiBvcHRpb25zIG9iamVjdCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uYWwgbGlzdDogdGhlIHByZXZpb3VzIHNpZ25hdHVyZSB0b29rXG4gKiB0ZW4gcG9zaXRpb25hbCBhcmd1bWVudHMsIGZvdXIgb2YgdGhlbSBvcHRpb25hbCBhbmQgdHdvIG9mIHRoZW0gYm9vbGVhbnMsIHNvXG4gKiBhIGNhbGwgc2l0ZSB3YXMgdW5yZWFkYWJsZSBhbmQgYWRkaW5nIGFuIG9wdGlvbiBtZWFudCB0b3VjaGluZyBldmVyeSBjYWxsZXIuXG4gKlxuICogYE9uZUdyaWRDb21wb25lbnRgIGNhbGxzIHRoaXMgZnJvbSBgbmdPbkluaXRgLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG5vdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmVHcmlkSW5pdE9wdGlvbnM8VCA9IGFueT4ge1xuICAgIC8qKiBXaGljaCByb2xlIHRoaXMgaW5zdGFuY2UgcGxheXMuIGBPbmVHcmlkQ29tcG9uZW50YCBkZXJpdmVzIGl0IGZyb20gaXRzIGlucHV0cy4gKi9cbiAgICBncmlkVHlwZTogT25lR3JpZFR5cGU7XG4gICAgLyoqIENvbHVtbiBkZWZpbml0aW9ucywgYmVmb3JlIGBkZWZhdWx0Q29sdW1uRGVmYCBpcyBtZXJnZWQgaW4uICovXG4gICAgY29sdW1uRGVmczogT25lQ29sdW1uRGVmPFQ+W107XG4gICAgLyoqIE1lcmdlZCBpbnRvIGV2ZXJ5IGNvbHVtbiBkZWZpbml0aW9uLiAqL1xuICAgIGRlZmF1bHRDb2x1bW5EZWY/OiBPbmVDb2x1bW5EZWY8VD47XG4gICAgLyoqIEhlYWRlciBncm91cHMuIENvbHVtbnMgam9pbiBvbmUgYnkgYGdyb3VwSWRgLiAqL1xuICAgIGdyb3VwQ29sdW1uRGVmcz86IE9uZUdyb3VwQ29sdW1uRGVmW107XG4gICAgLyoqIFBhc3NlZCB0byByZW5kZXJlcnMsIGdldHRlcnMgYW5kIHByZWRpY2F0ZXM7IGBjb21wb25lbnRQYXJlbnQuZ2V0Um93SWRgIGlzIHJlYWQgZnJvbSBpdC4gKi9cbiAgICBjb250ZXh0PzogYW55O1xuICAgIC8qKiBgbnVsbGAgZGlzYWJsZXMgcm93IHNlbGVjdGlvbiBlbnRpcmVseS4gUmVhZCBvbmNlLCBoZXJlLiAqL1xuICAgIHJvd1NlbGVjdGlvbj86IFJvd1NlbGVjdGlvbk1vZGU7XG4gICAgLyoqIFR1cm5zIG9uIHRoZSBuZXN0ZWQgZGV0YWlsIGdyaWQuIE11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGB0cmVlRGF0YWAuICovXG4gICAgbWFzdGVyRGV0YWlsPzogYm9vbGVhbjtcbiAgICAvKiogRGV0YWlsIGdyaWQgb3B0aW9ucyBwbHVzIGBnZXREZXRhaWxSb3dEYXRhYC4gUmVxdWlyZWQgd2hlbiBgbWFzdGVyRGV0YWlsYCBpcyBvbi4gKi9cbiAgICBkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM/OiBPbmVEZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXM7XG4gICAgLyoqIFJlbmRlciBhIGNvbXBvbmVudCBpbiB0aGUgZGV0YWlsIGFyZWEgaW5zdGVhZCBvZiBhIG5lc3RlZCBncmlkLiAqL1xuICAgIGRldGFpbFJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQ+O1xuICAgIC8qKiBUdXJucyBvbiBoaWVyYXJjaGljYWwgcm93IGJ1aWxkaW5nLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgbWFzdGVyRGV0YWlsYC4gKi9cbiAgICB0cmVlRGF0YT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25lR3JpZFJlYWR5RXZlbnQ8VCA9IGFueT4ge1xuICAgIGFwaTogT25lR3JpZEFwaTxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VCA9IGFueT4ge1xuICAgIHJvd0luZGV4OiBudW1iZXI7XG4gICAgZGF0YTogVDtcbiAgICBhcGk/OiBPbmVHcmlkQXBpPFQ+O1xuICAgIGNvbHVtbj86IE9uZUNvbHVtbkRlZjtcbiAgICBub2RlOiBPbmVSb3dOb2RlPFQ+O1xuICAgIG1hc3Rlck5vZGU/OiBPbmVSb3dOb2RlPFQ+O1xuICAgIGdyaWRUeXBlPzogT25lR3JpZFR5cGU7XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9uZUdyaWRHZXRSb3dJZFBhcmFtczxUID0gYW55PiB7XG4gICAgZGF0YTogVDtcbiAgICByb3dJbmRleDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9uZVNvcnRNb2RlbDxUID0gYW55PiB7XG4gIGNvbElkOiAga2V5b2YgVDtcbiAgc29ydDogJ2FzYycgfCAnZGVzYyc7XG59XG5cbi8qKlxuICogT25lIGJhdGNoIG9mIHJvdyBjaGFuZ2VzIGZvciBgYXBpLmFwcGx5VHJhbnNhY3Rpb25gIOKAlCB0aGUgd2F5IHRvIGFwcGVuZCxcbiAqIHBhdGNoIG9yIGRyb3Agcm93cyB3aXRob3V0IHJlYmluZGluZyB0aGUgd2hvbGUgZGF0YXNldCBmcm9tIHRoZSBob3N0LlxuICpcbiAqIFJvd3MgYXJlIG1hdGNoZWQgYnkgaWQsIHNvIGEgdHJhbnNhY3Rpb24gcmVxdWlyZXMgYVxuICogYGNvbnRleHQuY29tcG9uZW50UGFyZW50LmdldFJvd0lkYC4gU2VsZWN0aW9uIGFuZCBleHBhbnNpb24gc3Vydml2ZSwgdGhlXG4gKiBhY3RpdmUgc29ydCBhbmQgZmlsdGVycyByZS1hcHBseSwgYW5kIG9uIHRyZWUgZGF0YSBgcmVtb3ZlYCByZWFjaGVzIGFueVxuICogZGVwdGggd2hpbGUgYGFkZFRvUGFyZW50SWRgIHBsYWNlcyBhZGRlZCByb3dzIHVuZGVyIGFuIGV4aXN0aW5nIHBhcmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmVSb3dUcmFuc2FjdGlvbjxUID0gYW55PiB7XG4gIC8qKiBSb3dzIHRvIGFwcGVuZCDigJQgYXQgdGhlIHJvb3QsIG9yIHVuZGVyIGBhZGRUb1BhcmVudElkYC4gKi9cbiAgYWRkPzogVFtdO1xuICAvKiogUm93IGlkIG9mIHRoZSBwYXJlbnQgdGhlIGFkZGVkIHJvd3MgZ28gdW5kZXIgKHRyZWUgZGF0YSBvbmx5KS4gKi9cbiAgYWRkVG9QYXJlbnRJZD86IHN0cmluZztcbiAgLyoqIFJlcGxhY2VtZW50IHJvd3MsIG1hdGNoZWQgdG8gZXhpc3Rpbmcgcm93cyBieSBpZC4gKi9cbiAgdXBkYXRlPzogVFtdO1xuICAvKiogUm93cyAob3Igcm93IGlkcykgdG8gZHJvcCwgYXQgYW55IGRlcHRoLiAqL1xuICByZW1vdmU/OiAoVCB8IHN0cmluZylbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkUm93RGF0YSB7XG4gIHJvd0lkOiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IGFueTsgLy8gZmxleGlibGUgZXh0cmEgZmllbGRzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFJvd0RhdGFPcGVyYXRpb248VCBleHRlbmRzIEdyaWRSb3dEYXRhID0gR3JpZFJvd0RhdGE+IHtcbiAgLyoqXG4gICAqIE1vdmUgYSByb3cgZnJvbSBvbmUgaW5kZXggdG8gYW5vdGhlclxuICAgKiBAcGFyYW0gc291cmNlSW5kZXggLSB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgcm93XG4gICAqIEBwYXJhbSB0YXJnZXRJbmRleCAtIHRoZSBuZXcgaW5kZXggdG8gbW92ZSB0b1xuICAgKi9cbiAgbW92ZVJvdyhzb3VyY2VJbmRleDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgcm93IGJ5IGl0cyB1bmlxdWUgSURcbiAgICogQHBhcmFtIHJvd0lkIC0gdGhlIElEIG9mIHRoZSByb3cgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVSb3cocm93SWQ6IHN0cmluZyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEluc2VydCBhIG5ldyByb3cgYXQgdGhlIGdpdmVuIGluZGV4XG4gICAqIEBwYXJhbSByb3cgLSB0aGUgcm93IGRhdGFcbiAgICogQHBhcmFtIGluZGV4IC0gd2hlcmUgdG8gaW5zZXJ0XG4gICAqL1xuICBpbnNlcnRSb3cocm93OiBULCBpbmRleDogbnVtYmVyKTogdm9pZDtcbn1cbiJdfQ==
|
|
@@ -20,10 +20,19 @@ export class OneGridRowService {
|
|
|
20
20
|
}
|
|
21
21
|
return uuidv4();
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* The row's id, or null when it cannot be known — no id function, or one
|
|
25
|
+
* that answers nothing for this row. Unlike `generateRowId` this never
|
|
26
|
+
* mints an id, which is what row matching (transactions) needs: a minted
|
|
27
|
+
* id matches nothing and must not pretend otherwise.
|
|
28
|
+
*/
|
|
29
|
+
resolveRowId(data) {
|
|
30
|
+
return this._getRowId?.({ data, rowIndex: -1 }) ?? null;
|
|
31
|
+
}
|
|
23
32
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24
33
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowService }); }
|
|
25
34
|
}
|
|
26
35
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowService, decorators: [{
|
|
27
36
|
type: Injectable
|
|
28
37
|
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtcm93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvcmUvc2VydmljZXMvb25lLWdyaWQtcm93LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHcEMsTUFBTSxPQUFPLGlCQUFpQjtJQUQ5QjtRQUdZLGNBQVMsR0FBOEMsSUFBSSxDQUFDO0tBaUN2RTtJQS9CRzs7T0FFRztJQUNJLGFBQWEsQ0FBQyxRQUFtRDtRQUVwRSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsSUFBUyxFQUFFLFFBQWdCO1FBRTVDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRWpCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCxPQUFPLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxJQUFTO1FBRXpCLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVELENBQUM7K0dBbENRLGlCQUFpQjttSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lR3JpZEdldFJvd0lkUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL29uZS1ncmlkLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT25lR3JpZFJvd1NlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSBfZ2V0Um93SWQ6IChwYXJhbXM6IE9uZUdyaWRHZXRSb3dJZFBhcmFtcykgPT4gc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNldCBSb3cgSWQgRnVuY2l0b25cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0R2V0Um93SWRGbihnZXRSb3dJZDogKHBhcmFtczogT25lR3JpZEdldFJvd0lkUGFyYW1zKSA9PiBzdHJpbmcpIHtcblxuICAgICAgICB0aGlzLl9nZXRSb3dJZCA9IGdldFJvd0lkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlIFVuaXF1ZSBSb3cgSURcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVSb3dJZChkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXG4gICAgICAgIGlmICh0aGlzLl9nZXRSb3dJZCkge1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Um93SWQoeyBkYXRhLCByb3dJbmRleCB9KSA/PyB1dWlkdjQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcm93J3MgaWQsIG9yIG51bGwgd2hlbiBpdCBjYW5ub3QgYmUga25vd24g4oCUIG5vIGlkIGZ1bmN0aW9uLCBvciBvbmVcbiAgICAgKiB0aGF0IGFuc3dlcnMgbm90aGluZyBmb3IgdGhpcyByb3cuIFVubGlrZSBgZ2VuZXJhdGVSb3dJZGAgdGhpcyBuZXZlclxuICAgICAqIG1pbnRzIGFuIGlkLCB3aGljaCBpcyB3aGF0IHJvdyBtYXRjaGluZyAodHJhbnNhY3Rpb25zKSBuZWVkczogYSBtaW50ZWRcbiAgICAgKiBpZCBtYXRjaGVzIG5vdGhpbmcgYW5kIG11c3Qgbm90IHByZXRlbmQgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlUm93SWQoZGF0YTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFJvd0lkPy4oeyBkYXRhLCByb3dJbmRleDogLTEgfSkgPz8gbnVsbDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1014,6 +1014,15 @@ class OneGridRowService {
|
|
|
1014
1014
|
}
|
|
1015
1015
|
return v4();
|
|
1016
1016
|
}
|
|
1017
|
+
/**
|
|
1018
|
+
* The row's id, or null when it cannot be known — no id function, or one
|
|
1019
|
+
* that answers nothing for this row. Unlike `generateRowId` this never
|
|
1020
|
+
* mints an id, which is what row matching (transactions) needs: a minted
|
|
1021
|
+
* id matches nothing and must not pretend otherwise.
|
|
1022
|
+
*/
|
|
1023
|
+
resolveRowId(data) {
|
|
1024
|
+
return this._getRowId?.({ data, rowIndex: -1 }) ?? null;
|
|
1025
|
+
}
|
|
1017
1026
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1018
1027
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridRowService }); }
|
|
1019
1028
|
}
|
|
@@ -1496,6 +1505,65 @@ class OneGridApi {
|
|
|
1496
1505
|
updateRowData(rowData) {
|
|
1497
1506
|
this.rebuildRows(rowData, false);
|
|
1498
1507
|
}
|
|
1508
|
+
/**
|
|
1509
|
+
* Apply a batch of row changes without the host rebinding the dataset:
|
|
1510
|
+
* append rows (at the root, or under a parent by id on tree data), replace
|
|
1511
|
+
* rows by id, drop rows at any depth. Selection and expansion survive —
|
|
1512
|
+
* this is `updateRowData` fed from the grid's own current rows, so the
|
|
1513
|
+
* host keeps no parallel copy to reconcile.
|
|
1514
|
+
*
|
|
1515
|
+
* Requires a stable `context.componentParent.getRowId`: rows are matched by
|
|
1516
|
+
* id, and without an id function there is nothing to match on — the
|
|
1517
|
+
* transaction is refused with a warning rather than half-applied.
|
|
1518
|
+
*/
|
|
1519
|
+
applyTransaction(transaction) {
|
|
1520
|
+
if (this._destroyed || !transaction)
|
|
1521
|
+
return;
|
|
1522
|
+
const sample = transaction.update?.[0] ?? transaction.add?.[0]
|
|
1523
|
+
?? (transaction.remove ?? []).find(entry => typeof entry !== 'string');
|
|
1524
|
+
if (sample !== undefined && this.rowService.resolveRowId(sample) === null) {
|
|
1525
|
+
console.warn('[one-grid] applyTransaction needs context.componentParent.getRowId — rows are matched by id. Nothing was applied.');
|
|
1526
|
+
return;
|
|
1527
|
+
}
|
|
1528
|
+
const removeIds = new Set((transaction.remove ?? []).map(entry => typeof entry === 'string' ? entry : this.rowService.resolveRowId(entry)));
|
|
1529
|
+
const updates = new Map((transaction.update ?? []).map(data => [this.rowService.resolveRowId(data), data]));
|
|
1530
|
+
const childrenField = this.treeDataChildrenField;
|
|
1531
|
+
// Row grouping folds flat rows itself, so the transaction operates on the
|
|
1532
|
+
// leaves and re-groups; a parent target would name a synthetic group row,
|
|
1533
|
+
// which is not a place data can live.
|
|
1534
|
+
const grouping = this._rowGroupFields.length > 0;
|
|
1535
|
+
const addToParentId = grouping ? undefined : transaction.addToParentId;
|
|
1536
|
+
if (grouping && transaction.addToParentId) {
|
|
1537
|
+
console.warn('[one-grid] applyTransaction: addToParentId is ignored under row grouping — groups are synthetic. Rows were added at the root.');
|
|
1538
|
+
}
|
|
1539
|
+
// Copy-on-write over the grid's own current rows: the node graph carries
|
|
1540
|
+
// the data, so the host's original arrays are never mutated and untouched
|
|
1541
|
+
// branches keep their object identity for the node-reuse path.
|
|
1542
|
+
const applyTo = (rows) => rows
|
|
1543
|
+
.filter(data => !removeIds.has(this.rowService.resolveRowId(data)))
|
|
1544
|
+
.map(data => {
|
|
1545
|
+
const id = this.rowService.resolveRowId(data);
|
|
1546
|
+
let next = updates.get(id) ?? data;
|
|
1547
|
+
if (this.treeData && childrenField) {
|
|
1548
|
+
const children = next[childrenField];
|
|
1549
|
+
const rebuilt = children ? applyTo(children) : undefined;
|
|
1550
|
+
const withAdded = id != null && id === addToParentId
|
|
1551
|
+
? [...(rebuilt ?? []), ...(transaction.add ?? [])]
|
|
1552
|
+
: rebuilt;
|
|
1553
|
+
if (withAdded !== children)
|
|
1554
|
+
next = { ...next, [childrenField]: withAdded ?? [] };
|
|
1555
|
+
}
|
|
1556
|
+
return next;
|
|
1557
|
+
});
|
|
1558
|
+
const currentRows = grouping
|
|
1559
|
+
? this._rowNodes.filter(node => node.leaf).map(node => node.data)
|
|
1560
|
+
: this._rowNodes.filter(node => !node.parent).map(node => node.data);
|
|
1561
|
+
let roots = applyTo(currentRows);
|
|
1562
|
+
if (transaction.add?.length && !addToParentId) {
|
|
1563
|
+
roots = [...roots, ...transaction.add];
|
|
1564
|
+
}
|
|
1565
|
+
this.rebuildRows(roots, false);
|
|
1566
|
+
}
|
|
1499
1567
|
/**
|
|
1500
1568
|
* The one row-loading path. `setRowData` and `updateRowData` differed only in
|
|
1501
1569
|
* whether they cleared the state services first, so everything else — build,
|
|
@@ -1516,6 +1584,11 @@ class OneGridApi {
|
|
|
1516
1584
|
}
|
|
1517
1585
|
const validRowIds = new Set();
|
|
1518
1586
|
this.buildRowNodes(rowData, null, 0, validRowIds);
|
|
1587
|
+
// Prune BEFORE sorting and filtering: both read `_originalRowNodes`, and
|
|
1588
|
+
// with the prune last, a data swap while a sort was active resurrected
|
|
1589
|
+
// the removed rows into `_rowNodes` for one whole render — the old and
|
|
1590
|
+
// the new dataset on screen together until the next rebuild.
|
|
1591
|
+
this.pruneRemovedNodes(validRowIds);
|
|
1519
1592
|
// Re-apply the active sort. `buildRowNodes` rebuilds the row list in the
|
|
1520
1593
|
// order the data arrived, so without this a data update silently returned
|
|
1521
1594
|
// the rows to that order while `sortModel` — and therefore the header's
|
|
@@ -1524,12 +1597,11 @@ class OneGridApi {
|
|
|
1524
1597
|
if (this._sortModel.length > 0)
|
|
1525
1598
|
this.applySorting();
|
|
1526
1599
|
this.applyFilters();
|
|
1527
|
-
this.pruneRemovedNodes(validRowIds);
|
|
1528
1600
|
}
|
|
1529
1601
|
/**
|
|
1530
1602
|
* Recursive Build Row Nodes (Optimized)
|
|
1531
1603
|
*/
|
|
1532
|
-
buildRowNodes(rowData, parent = null, level = 0, validRowIds = new Set(), expandedIds = new Set(this.expansionService.getExpandedIds()), collapsedIds = new Set(this.expansionService.getCollapsedIds()), selectedIds = new Set(this.selectionService.getSelectedIds())) {
|
|
1604
|
+
buildRowNodes(rowData, parent = null, level = 0, validRowIds = new Set(), expandedIds = new Set(this.expansionService.getExpandedIds()), collapsedIds = new Set(this.expansionService.getCollapsedIds()), selectedIds = new Set(this.selectionService.getSelectedIds()), visitedData = new Set()) {
|
|
1533
1605
|
if (parent === null) {
|
|
1534
1606
|
this._rowNodes = [];
|
|
1535
1607
|
this._currentIndex = 0;
|
|
@@ -1539,6 +1611,16 @@ class OneGridApi {
|
|
|
1539
1611
|
const nodes = [];
|
|
1540
1612
|
for (const data of rowData) {
|
|
1541
1613
|
const rowId = this.rowService.generateRowId(data, this._currentIndex);
|
|
1614
|
+
// A cycle in the children graph — a row reachable from its own subtree,
|
|
1615
|
+
// the classic ORM back-reference — used to recurse until the stack blew,
|
|
1616
|
+
// freezing the app; and with generated row ids it did so while minting
|
|
1617
|
+
// nodes the whole way down. The same guard also drops a duplicate row id
|
|
1618
|
+
// (or the same row object appearing twice): first occurrence wins.
|
|
1619
|
+
if (visitedData.has(data) || validRowIds.has(rowId)) {
|
|
1620
|
+
console.warn(`[one-grid] cyclic or duplicate row (id "${rowId}") — skipped, first occurrence wins. Tree data must be acyclic and row ids unique.`);
|
|
1621
|
+
continue;
|
|
1622
|
+
}
|
|
1623
|
+
visitedData.add(data);
|
|
1542
1624
|
const children = data[this.treeDataChildrenField] || null;
|
|
1543
1625
|
let node = this._originalRowNodes.get(rowId);
|
|
1544
1626
|
validRowIds.add(rowId);
|
|
@@ -1575,7 +1657,7 @@ class OneGridApi {
|
|
|
1575
1657
|
this._currentIndex++;
|
|
1576
1658
|
this._rowNodes.push(node);
|
|
1577
1659
|
nodes.push(node);
|
|
1578
|
-
node.children = this.treeData && childrenExist ? this.buildRowNodes(children || [], node, level + 1, validRowIds, expandedIds, collapsedIds, selectedIds) : [];
|
|
1660
|
+
node.children = this.treeData && childrenExist ? this.buildRowNodes(children || [], node, level + 1, validRowIds, expandedIds, collapsedIds, selectedIds, visitedData) : [];
|
|
1579
1661
|
}
|
|
1580
1662
|
return nodes;
|
|
1581
1663
|
}
|
|
@@ -1774,7 +1856,7 @@ class OneGridApi {
|
|
|
1774
1856
|
this._rowNodes = [...this._originalRowNodes.values()];
|
|
1775
1857
|
return;
|
|
1776
1858
|
}
|
|
1777
|
-
|
|
1859
|
+
const comparator = (a, b) => {
|
|
1778
1860
|
for (const sortItem of this._sortModel) {
|
|
1779
1861
|
const { colId, sort } = sortItem;
|
|
1780
1862
|
const valA = getFieldValue(a.data, colId);
|
|
@@ -1785,7 +1867,31 @@ class OneGridApi {
|
|
|
1785
1867
|
}
|
|
1786
1868
|
}
|
|
1787
1869
|
return 0;
|
|
1788
|
-
}
|
|
1870
|
+
};
|
|
1871
|
+
if (!this.treeData) {
|
|
1872
|
+
this._rowNodes = [...this._originalRowNodes.values()].sort(comparator);
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1875
|
+
// A tree sorts siblings within their parent, never across it — a flat
|
|
1876
|
+
// sort of the whole list interleaved parents with other parents' children
|
|
1877
|
+
// and scrambled the hierarchy. Sorting the sibling arrays and re-walking
|
|
1878
|
+
// depth-first keeps every parent immediately above its own children,
|
|
1879
|
+
// which `refreshVisibleNodes` also depends on for its visibility cache.
|
|
1880
|
+
// Group rows carry their aggregates in `data`, so sorting a grouped grid
|
|
1881
|
+
// on an aggregated column orders the groups by their aggregate.
|
|
1882
|
+
const flattened = [];
|
|
1883
|
+
const walk = (siblings) => {
|
|
1884
|
+
const sorted = [...siblings].sort(comparator);
|
|
1885
|
+
for (const node of sorted) {
|
|
1886
|
+
flattened.push(node);
|
|
1887
|
+
if (node.children?.length) {
|
|
1888
|
+
node.children = walk(node.children);
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1891
|
+
return sorted;
|
|
1892
|
+
};
|
|
1893
|
+
walk([...this._originalRowNodes.values()].filter(node => !node.parent));
|
|
1894
|
+
this._rowNodes = flattened;
|
|
1789
1895
|
}
|
|
1790
1896
|
compareValues(valA, valB, sortDirection) {
|
|
1791
1897
|
// `undefined` has to be treated as empty alongside `null`: getFieldValue
|