@easyquery/core 7.2.0 → 7.2.1-rc03
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/dist/bundles/easyquery.core.js +108 -54
- package/dist/bundles/easyquery.core.js.map +1 -1
- package/dist/bundles/easyquery.core.min.js +1 -1
- package/dist/bundles/easyquery.core.min.js.map +1 -1
- package/dist/lib/dm/data_model.d.ts +6 -1
- package/dist/lib/dm/data_model.js +8 -0
- package/dist/lib/dm/data_model.js.map +1 -1
- package/dist/lib/dm/value_editor.js.map +1 -1
- package/dist/lib/main/context.d.ts +13 -0
- package/dist/lib/main/context.js +57 -18
- package/dist/lib/main/context.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack://easyqueryCore/webpack/universalModuleDefinition","webpack://easyqueryCore/webpack/bootstrap","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easyqueryCore/c:/dev/azure-devops-agent/_work/15/s/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easyqueryCore/./src/data/google_data_converter.ts","webpack://easyqueryCore/./src/utils/format_parser.ts","webpack://easyqueryCore/./src/types/link_type.ts","webpack://easyqueryCore/./src/utils/utils.ts","webpack://easyqueryCore/./src/utils/constants.ts","webpack://easyqueryCore/./src/dm/aggr_function.ts","webpack://easyqueryCore/./src/dm/value_editor.ts","webpack://easyqueryCore/./src/types/data_kind.ts","webpack://easyqueryCore/./src/dm/operator.ts","webpack://easyqueryCore/./src/dm/entity.ts","webpack://easyqueryCore/./src/types/eq_editor_tag.ts","webpack://easyqueryCore/./src/types/expr_tag.ts","webpack://easyqueryCore/./src/common/tree.ts","webpack://easyqueryCore/./src/dm/data_model.ts","webpack://easyqueryCore/./src/query/expression.ts","webpack://easyqueryCore/./src/query/query_events.ts","webpack://easyqueryCore/./src/query/query_column.ts","webpack://easyqueryCore/./src/types/cond_tag.ts","webpack://easyqueryCore/./src/types/cond_part.ts","webpack://easyqueryCore/./src/query/condition.ts","webpack://easyqueryCore/./src/query/query.ts","webpack://easyqueryCore/./src/main/query_storage.ts","webpack://easyqueryCore/./src/main/model_loader.ts","webpack://easyqueryCore/./src/eqs/eqs_model_loader.ts","webpack://easyqueryCore/./src/eqs/eqs_data_fetcher.ts","webpack://easyqueryCore/./src/eqs/eqs_query_synchronizer.ts","webpack://easyqueryCore/./src/eqs/eqs_value_list_resolver.ts","webpack://easyqueryCore/./src/eqs/eqs_query_file_loader.ts","webpack://easyqueryCore/./src/data/eq_aggr_container.ts","webpack://easyqueryCore/./src/common/eq_services.ts","webpack://easyqueryCore/./src/data/eq_data_loader.ts","webpack://easyqueryCore/./src/types/widget_group.ts","webpack://easyqueryCore/./src/main/eq_actions.ts","webpack://easyqueryCore/./src/main/model_storage.ts","webpack://easyqueryCore/./src/main/action.ts","webpack://easyqueryCore/./src/eqs/eqs_exporter.ts","webpack://easyqueryCore/./src/main/context.ts","webpack://easyqueryCore/./src/main/widget.ts","webpack://easyqueryCore/./src/utils/version_info.ts","webpack://easyqueryCore/./src/i18n/text_resources.ts","webpack://easyqueryCore/./src/public_api.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B,qC;;AC7CO;AACP;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC,4C;;ACNO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;ACdO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC,uC;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,wC;;ACzDO;AACP;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC;;AC/B8C;AACP;AACvC;AACA;AACA;AACO,IAAI,SAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAK;AACjB;AACA;AACA;AACA;AACA,kCAAkC,WAAK,cAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAK,cAAc;AACxD;AACA,iCAAiC,WAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iDAAiD;AAClE,QAAQ,WAAK;AACb;AACA;AACA;AACA;AACA;AACA,2BAA2B,WAAK,cAAc;AAC9C;AACA,8BAA8B,WAAK,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAK,cAAc;AACxD;AACA;AACA;AACA,QAAQ,WAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAK,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA;AACA,eAAe,WAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB,EAAE;AAC7D,mCAAmC,qBAAqB,EAAE;AAC1D;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,SAAI,KAAK,SAAI,KAAK;AACrB,gC;;ACnduC;AACO;AACV;AAC7B,IAAI,WAAK;AAChB;AACA;AACA,6BAA6B,QAAQ,0BAA0B,iCAAiC,EAAE;AAClG;AACA;AACA;AACA,gBAAgB,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AACtD;AACA;AACA;AACA,gBAAgB,QAAQ,SAAS,QAAQ,OAAO,QAAQ;AACxD;AACA;AACA,yBAAyB,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AAC/D,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ;AACnE;AACA;AACA;AACA;AACA,qBAAqB,QAAQ,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0BAA0B;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,QAAQ,qBAAqB,QAAQ;AAC3H,6CAA6C,QAAQ,kBAAkB,QAAQ;AAC/E,yBAAyB,QAAQ,sBAAsB,QAAQ;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,YAAiB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT,eAAe,aAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,kBAAkB,SAAI;AACtB,iBAAiB,SAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAI;AACnD;AACA;AACA;AACA,CAAC,EAAE,WAAK,KAAK,WAAK,KAAK;AACvB,iC;;ACvgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,8C;;ACvBA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuC;AACiB;AACb;AACE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;AAC7B,IAAI,sBAAU;AACd;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK,2BAA2B;AACxD;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,yCAAyC,6CAA6C;AACtF,kDAAkD;AAClD;AACA;AACA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;AACtB,uC;;AC5I8C;AACa;AACpB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qBAAqB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oCAAoC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B,EAAE;AACnF;AACA;AACA,CAAC;AACqB;AACtB,IAAI,0BAAc;AAClB;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAK;AACnC,8BAA8B,WAAK;AACnC,8BAA8B,WAAK;AACnC,gCAAgC,WAAK;AACrC,8BAA8B,WAAK;AACnC,gCAAgC,WAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,uC;;AC7IgD;AACF;AAC9C;AACA;AACA;AACA,IAAI,wBAAW;AACf;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,wC;;AChEoC;AACG;AACS;AACF;AACa;AACd;AAC7C;AACA;AACA;AACA,IAAI,kBAAQ;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA,mBAAmB,0BAAc;AACjC;AACA;AACA,mBAAmB,wBAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,gBAAgB,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,8BAA8B,SAAI;AAClC;AACA;AACA;AACA,iCAAiC,WAAK,8BAA8B,yDAAyD;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA;AACA,8BAA8B,SAAI;AAClC;AACA;AACA,iCAAiC,WAAK,8BAA8B,sDAAsD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,8BAA8B,SAAI;AAClC,iCAAiC,WAAK;AACtC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kCAAkC,WAAK,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA;AACA,8BAA8B,SAAI;AAClC,0CAA0C,WAAK;AAC/C;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAI;AAC1B;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,SAAS,OAAO,QAAQ;AACzE;AACA,6CAA6C,SAAS,WAAW,QAAQ;AACzE,6CAA6C,SAAS,WAAW,QAAQ;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAI;AACjC;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,KAAK;AACtD,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmB;AACpB,qC;;AC1eA,IAAI,oBAAQ,IAAI,SAAI,IAAI,SAAI;AAC5B,IAAI,oBAAQ;AACZ,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oBAAQ,EAAE,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAQ,CAAC,oBAAQ,GAAG,SAAS,sEAAsE;AACtH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA,sCAAsC,6BAA6B,EAAE;AACrE;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,gBAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B,yC;;AChM8C;AACP;AAChC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C,IAAI,sBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAK,yBAAyB,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB,IAAI,0BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,sBAAU;AAC3C;AACA;AACA;AACA,sBAAsB,sBAAU;AAChC;AACA;AACA;AACA;AACA,aAAa,QAAQ,OAAO,QAAQ,WAAW,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS,QAAQ,OAAO,QAAQ,WAAW,QAAQ,8BAA8B,EAAE;AACvH,wCAAwC,cAAc,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,uC;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB,oC;;AC5C+C;AACV;AACS;AACP;AACvC,IAAI,6BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAAc;AAC1C;AACA;AACA,kDAAkD,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD,mCAAmC,yCAAyC,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD,gCAAgC,kCAAkC;AAClE,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC,yBAAyB,WAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uBAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB,2C;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmB;AACpB,qC;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,0BAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,cAAc;AAChD,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gBAAgB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB,yC;;AC5HO;AACP;AACA;AACA;AACA;AACA;AACA,oDAAoD,EAAE,WAAW,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB,kC;;ACd8B;AAC9B,SAAI;AACJ,wD;;ACFA;AACkC;AACO;AACN;AACnC;AACmC;AACC;AACD;AACnC;AACiC;AACE;AACC;AACC;AACF;AACH;AACO;AACvC;AACsC;AACtC;AAC4B;AAC5B;AACkC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","file":"easyquery.core.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easyqueryCore\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easyqueryCore\"] = factory();\n\telse\n\t\troot[\"easyqueryCore\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/** Represents the common types of the data. */\r\nexport var DataType;\r\n(function (DataType) {\r\n /** Unknown type value*/\r\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\r\n /** String value*/\r\n DataType[DataType[\"String\"] = 1] = \"String\";\r\n /** 8-bit integer value */\r\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\r\n /** 16-bit integer value */\r\n DataType[DataType[\"Word\"] = 3] = \"Word\";\r\n /** 32-bit integer value */\r\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\r\n /** 64-bit integer value */\r\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\r\n /** Boolean value */\r\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\r\n /** Floating-point numeric value */\r\n DataType[DataType[\"Float\"] = 7] = \"Float\";\r\n /** Money value */\r\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\r\n /** Binary-coded decimal value */\r\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\r\n /** Date value */\r\n DataType[DataType[\"Date\"] = 10] = \"Date\";\r\n /** Time value */\r\n DataType[DataType[\"Time\"] = 11] = \"Time\";\r\n /** Date and time value */\r\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\r\n /** Autoincrement 32-bit integer value */\r\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\r\n /** MEMO value (text with unlimited length) */\r\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\r\n /** BLOB value (any data with unlimited length) */\r\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\r\n /** Fixed character value */\r\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\r\n /** The unique identifier */\r\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\r\n /*-------- Spatial data types ----------*/\r\n /** Any geometry data */\r\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\r\n /** Any data that represents some geography objects</summary> */\r\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\r\n})(DataType || (DataType = {}));\r\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\r\n(function (EntityAttrKind) {\r\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\r\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\r\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\r\n})(EntityAttrKind || (EntityAttrKind = {}));\r\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\r\n /** Unknown tag value */\r\n Unknown: \"Unknown\",\r\n /** Edit tag value */\r\n Edit: \"EDIT\",\r\n /** DateTime tag value */\r\n DateTime: \"DATETIME\",\r\n /** List tag value */\r\n List: \"LIST\",\r\n /** CustomList tag value */\r\n CustomList: \"CUSTOMLIST\",\r\n /** File tag value */\r\n File: \"FILE\"\r\n};\r\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\r\n(function (HttpMethod) {\r\n HttpMethod[\"Trace\"] = \"TRACE\";\r\n HttpMethod[\"Options\"] = \"OPTIONS\";\r\n HttpMethod[\"Get\"] = \"GET\";\r\n HttpMethod[\"Put\"] = \"PUT\";\r\n HttpMethod[\"Post\"] = \"POST\";\r\n HttpMethod[\"Delete\"] = \"DELETE\";\r\n})(HttpMethod || (HttpMethod = {}));\r\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\r\n function HttpRequest(xhr, descriptor) {\r\n this.xhr = xhr;\r\n this.method = descriptor.method;\r\n this.url = descriptor.url;\r\n this.headers = descriptor.headers;\r\n this.queryParams = descriptor.queryParams;\r\n this.data = descriptor.data;\r\n }\r\n HttpRequest.prototype.setHeader = function (name, value) {\r\n this.headers[name] = value;\r\n };\r\n HttpRequest.prototype.setQueryParam = function (name, value) {\r\n this.queryParams[name] = value;\r\n };\r\n HttpRequest.prototype.getXMLHttpRequest = function () {\r\n return this.xhr;\r\n };\r\n HttpRequest.prototype.getResponseHeaders = function () {\r\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\r\n var headers = this.xhr.getAllResponseHeaders();\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n // Create a map of header names to values\r\n var headerMap = {};\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var line = arr_1[_i];\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n headerMap[header] = value;\r\n }\r\n return headerMap;\r\n }\r\n return {};\r\n };\r\n HttpRequest.prototype.open = function () {\r\n var _this = this;\r\n if (this.xhr.readyState !== this.xhr.UNSENT)\r\n return;\r\n var url = this.url;\r\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\r\n url += encodeURI('?' + Object.keys(this.queryParams)\r\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\r\n .join('&'));\r\n }\r\n this.xhr.open(this.method, url, true);\r\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n for (var header in this.headers) {\r\n this.xhr.setRequestHeader(header, this.headers[header]);\r\n }\r\n };\r\n HttpRequest.prototype.abort = function () {\r\n this.xhr.abort();\r\n };\r\n return HttpRequest;\r\n}());\r\nexport { HttpRequest };\r\n//# sourceMappingURL=http_request.js.map","export function repeatString(str, times) {\r\n var result = \"\";\r\n for (var i = 0; i < times; i++) {\r\n result += str;\r\n }\r\n return result;\r\n}\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\nexport function strEndsWith(str, symbol) {\r\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\r\n}\r\n/**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1\r\n * @param path2\r\n */\r\nexport function combinePath(path1, path2) {\r\n var result = path1;\r\n if (result != null && result.length > 0) {\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=string_utils.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Contains internatialization functionality.\r\n */\r\nexport var i18n;\r\n(function (i18n) {\r\n var englishUSLocaleSettings = {\r\n shortDateFormat: 'MM/dd/yyyy',\r\n longDateFormat: 'dd MMM, yyyy',\r\n editDateFormat: 'MM/dd/yyyy',\r\n shortTimeFormat: 'HH:mm',\r\n editTimeFormat: 'HH:mm',\r\n longTimeFormat: 'HH:mm:ss',\r\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'],\r\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n decimalSeparator: '.',\r\n currency: 'USD'\r\n };\r\n var defaultLocale = {\r\n localeId: 'en-US',\r\n englishName: 'English',\r\n displayName: 'English',\r\n texts: {\r\n ButtonOK: 'OK',\r\n ButtonCancel: 'Cancel',\r\n Yes: 'Yes',\r\n No: 'No',\r\n True: 'True',\r\n False: 'False'\r\n },\r\n settings: englishUSLocaleSettings\r\n };\r\n var allLocales = {\r\n 'en-US': defaultLocale\r\n };\r\n var currentLocale;\r\n var mappers = [];\r\n function mapInfo(info) {\r\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\r\n var mapper = mappers_1[_i];\r\n mapper(info);\r\n }\r\n }\r\n function addMapper(mapper) {\r\n mappers.push(mapper);\r\n }\r\n i18n.addMapper = addMapper;\r\n /**\r\n * Gets added locales with their names.\r\n * @returns The locales.\r\n */\r\n function getLocales() {\r\n var result = [];\r\n for (var locale in allLocales) {\r\n result.push({\r\n locale: locale,\r\n englishName: allLocales[locale].englishName,\r\n displayName: allLocales[locale].displayName\r\n });\r\n }\r\n return result.sort(function (a, b) {\r\n if (a.englishName > b.englishName) {\r\n return 1;\r\n }\r\n else if (a.englishName === b.englishName) {\r\n return 0;\r\n }\r\n return -1;\r\n });\r\n }\r\n i18n.getLocales = getLocales;\r\n /**\r\n * Gets the current locale ID.\r\n * @returns The locale.\r\n */\r\n function getCurrentLocale() {\r\n return currentLocale.localeId;\r\n }\r\n i18n.getCurrentLocale = getCurrentLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @deprecated Use setCurrentLocale instead\r\n * @param l The locale.\r\n */\r\n function setLocale(l) {\r\n console.warn('This method is deprecated. Use setCurrentLocale instead');\r\n setCurrentLocale(l);\r\n }\r\n i18n.setLocale = setLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @param localeId The locale.\r\n */\r\n function setCurrentLocale(localeId) {\r\n var newLocale = allLocales[localeId];\r\n if (newLocale) {\r\n utils.assignDeep(currentLocale, newLocale);\r\n }\r\n else {\r\n currentLocale.englishName = localeId;\r\n currentLocale.displayName = localeId;\r\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\r\n }\r\n currentLocale.localeId = localeId;\r\n }\r\n i18n.setCurrentLocale = setCurrentLocale;\r\n /**\r\n * Returns localized text by the key defined in parameter.\r\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\r\n *\r\n ```\r\n const text = i18n.getText('CmdClickToAddCondition')\r\n ```\r\n * @param args The keys of the resource string.\r\n * @returns Text of the resource defined by key or null if the key is not found\r\n *\r\n */\r\n function getText() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var textsObj = currentLocale.texts;\r\n var resText = '';\r\n if (args && args.length) {\r\n var argLength = args.length;\r\n for (var i = 0; i < argLength; i++) {\r\n resText = textsObj[args[i]];\r\n if (typeof resText === 'object') {\r\n textsObj = resText;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return resText;\r\n }\r\n i18n.getText = getText;\r\n function getLocaleSettings() {\r\n return currentLocale.settings;\r\n }\r\n i18n.getLocaleSettings = getLocaleSettings;\r\n function getOneLocaleSetting(key) {\r\n return currentLocale.settings[key];\r\n }\r\n i18n.getOneLocaleSetting = getOneLocaleSetting;\r\n function getShortMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.shortMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getShortMonthName = getShortMonthName;\r\n function getLongMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.longMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getLongMonthName = getLongMonthName;\r\n function getShortWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.shortWeekDayNames.length >= dayNum\r\n ? settings.shortWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getShortWeekDayName = getShortWeekDayName;\r\n function getLongWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.longWeekDayNames.length >= dayNum\r\n ? settings.longWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getLongWeekDayName = getLongWeekDayName;\r\n /**\r\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\r\n * @param settingsToUpdate a LocaleSettings object\r\n */\r\n function updateLocaleSettings(settingsToUpdate) {\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\r\n }\r\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\r\n }\r\n i18n.updateLocaleSettings = updateLocaleSettings;\r\n /**\r\n * Updates the texts for the current locale\r\n * @param texts A plain JS object that contains textual resources\r\n */\r\n function updateLocaleTexts(texts) {\r\n if (typeof texts !== 'object') {\r\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\r\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\r\n return;\r\n }\r\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\r\n utils.assignDeep(currentLocale.texts, texts);\r\n }\r\n i18n.updateLocaleTexts = updateLocaleTexts;\r\n function updateDefaultTexts(texts) {\r\n for (var localeId in allLocales) {\r\n var locale = allLocales[localeId];\r\n locale.texts = utils.assignDeep({}, texts, locale.texts);\r\n }\r\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\r\n }\r\n i18n.updateDefaultTexts = updateDefaultTexts;\r\n /**\r\n * Updates the information for the specified locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be added\r\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function updateLocaleInfo(localeId, localeData) {\r\n mapInfo(localeData);\r\n var localeInfoToUpdate = currentLocale;\r\n if (localeId) {\r\n if (!localeData.localeId) {\r\n localeData.localeId = localeId;\r\n }\r\n localeInfoToUpdate = allLocales[localeId];\r\n if (!localeInfoToUpdate) {\r\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\r\n allLocales[localeId] = localeInfoToUpdate;\r\n }\r\n }\r\n utils.assignDeep(localeInfoToUpdate, localeData);\r\n }\r\n i18n.updateLocaleInfo = updateLocaleInfo;\r\n /**\r\n * Adds the locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be created\r\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function addLocale(localeId, localeInfo) {\r\n updateLocaleInfo(localeId, localeInfo);\r\n }\r\n i18n.addLocale = addLocale;\r\n /**\r\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\r\n */\r\n function determineSettingsByLocale(localeId) {\r\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\r\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\r\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\r\n var dateFormat = dateStr\r\n .replace('07', 'dd')\r\n .replace('7', 'd')\r\n .replace('06', 'MM')\r\n .replace('6', 'M')\r\n .replace('2020', 'yyyy')\r\n .replace('20', 'yy');\r\n var timeFormat = timeStr\r\n .replace('19', 'HH')\r\n .replace('07', 'hh')\r\n .replace('7', 'h')\r\n .replace('34', 'mm')\r\n .replace('56', 'ss')\r\n .replace('PM', 'tt');\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = {};\r\n }\r\n var localeSettings = {\r\n shortDateFormat: dateFormat,\r\n shortTimeFormat: timeFormat\r\n };\r\n updateLocaleSettings(localeSettings);\r\n }\r\n function loadBrowserLocaleSettings() {\r\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\r\n determineSettingsByLocale(lang);\r\n }\r\n function resetLocales() {\r\n if (!currentLocale) {\r\n currentLocale = utils.assignDeep({}, defaultLocale);\r\n loadBrowserLocaleSettings();\r\n }\r\n }\r\n i18n.resetLocales = resetLocales;\r\n function dateTimeToStr(dateTime, dataType, format) {\r\n if (format) {\r\n if (format == 'd') {\r\n format = buildShortDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'D') {\r\n format = buildLongDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'f') {\r\n format = buildShortDateTimeFormat(DataType.DateTime);\r\n }\r\n else if (format == 'F') {\r\n format = buildLongDateTimeFormat(DataType.DateTime);\r\n }\r\n }\r\n else {\r\n format = buildShortDateTimeFormat(dataType);\r\n }\r\n return utils.dateTimeToStr(dateTime, format);\r\n }\r\n i18n.dateTimeToStr = dateTimeToStr;\r\n function buildShortDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.shortDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.shortTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function buildLongDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.longDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.longTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function numberToStr(number, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n return formatWithSequence(number, format.slice(1));\r\n }\r\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\r\n var locale = getCurrentLocale();\r\n return number.toLocaleString(locale, getNumberFromatOptions(format));\r\n }\r\n else {\r\n return convertWithMask(Math.trunc(number), format);\r\n }\r\n }\r\n var localeSettings = getLocaleSettings();\r\n return utils.numberToStr(number, localeSettings.decimalSeparator);\r\n }\r\n i18n.numberToStr = numberToStr;\r\n function booleanToStr(bool, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n var values = format.slice(1).split('|');\r\n if (values.length > 1) {\r\n var value = values[(bool) ? 1 : 0];\r\n return i18n.getText(value) || value;\r\n }\r\n }\r\n }\r\n return \"\" + bool;\r\n }\r\n i18n.booleanToStr = booleanToStr;\r\n var cachedSequenceFormats = {};\r\n function formatWithSequence(number, format) {\r\n if (!cachedSequenceFormats[format]) {\r\n // parse and save in cache format values \r\n var values_2 = format.split('|')\r\n .filter(function (v) { return v.length > 0; })\r\n .map(function (v) { return v.split('='); });\r\n cachedSequenceFormats[format] = {};\r\n if (values_2.length > 0) {\r\n if (values_2[0].length > 1) {\r\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\r\n var value = values_1[_i];\r\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\r\n }\r\n }\r\n else {\r\n values_2.forEach(function (value, index) {\r\n cachedSequenceFormats[format][index] = value[0];\r\n });\r\n }\r\n }\r\n }\r\n var values = cachedSequenceFormats[format];\r\n if (values[number] !== undefined) {\r\n var value = values[number];\r\n return i18n.getText(value) || value;\r\n }\r\n return number.toString();\r\n }\r\n function convertWithMask(number, mask) {\r\n var value = number.toString();\r\n var result = '';\r\n var index = value.length - 1;\r\n for (var i = mask.length - 1; i >= 0; i--) {\r\n var ch = mask.charAt(i);\r\n if (ch === '#' || ch === '0') {\r\n if (index >= 0) {\r\n result += value.charAt(index);\r\n index--;\r\n }\r\n else {\r\n if (ch === '0') {\r\n result += 0;\r\n }\r\n }\r\n }\r\n else {\r\n result += ch;\r\n }\r\n }\r\n return result.split('').reverse().join('');\r\n }\r\n function getNumberFromatOptions(format) {\r\n var localeSettings = getLocaleSettings();\r\n var type = format[0].toUpperCase();\r\n var digits = (format.length > 1)\r\n ? Number.parseInt(format.slice(1))\r\n : type == 'D' ? 1 : 2;\r\n switch (type) {\r\n case 'D':\r\n return {\r\n style: 'decimal',\r\n useGrouping: false,\r\n minimumIntegerDigits: digits\r\n };\r\n case 'C':\r\n return {\r\n style: 'currency',\r\n currency: localeSettings.currency,\r\n minimumFractionDigits: digits\r\n };\r\n default:\r\n return {\r\n style: 'decimal',\r\n minimumFractionDigits: digits\r\n };\r\n }\r\n }\r\n})(i18n || (i18n = {}));\r\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\r\nimport { DataType } from '../types/data_type';\r\nimport { i18n } from '../i18n/i18n';\r\nexport var utils;\r\n(function (utils) {\r\n function getAllDataTypes() {\r\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\r\n }\r\n utils.getAllDataTypes = getAllDataTypes;\r\n function getDateDataTypes() {\r\n return [DataType.Time, DataType.Date, DataType.DateTime];\r\n }\r\n utils.getDateDataTypes = getDateDataTypes;\r\n function getStringDataTypes() {\r\n return [DataType.String, DataType.Memo, DataType.FixedChar];\r\n }\r\n utils.getStringDataTypes = getStringDataTypes;\r\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\r\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\r\n function getNumericDataTypes() {\r\n return _numericTypes;\r\n }\r\n utils.getNumericDataTypes = getNumericDataTypes;\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\r\n //-------------- object functions -------------------\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function copies only the first level properties.\r\n * For a deep copy please use `assignDeep`\r\n * @param target - the target object\r\n * @param args - an array of the source objects\r\n */\r\n function assign(target) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n var source = args[i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n utils.assign = assign;\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function make a deep copy -\r\n * so `assignDeep` will be called recursively for all object properties\r\n * on the first level.\r\n * @param target - the target object\r\n * @param sources - an array of the source objects\r\n */\r\n function assignDeep(target) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n return assignDeepCore(new WeakMap(), target, sources);\r\n }\r\n utils.assignDeep = assignDeep;\r\n function assignDeepCore(hashSet, target, sources) {\r\n if (!target) {\r\n target = {};\r\n }\r\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\r\n var source = sources_1[_i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n var sourceVal = source[key];\r\n if (sourceVal !== null && typeof sourceVal === 'object') {\r\n if (hashSet.has(sourceVal)) {\r\n target[key] = hashSet.get(sourceVal);\r\n }\r\n else {\r\n if (Array.isArray(sourceVal)) {\r\n target[key] = createArrayFrom(sourceVal);\r\n hashSet.set(sourceVal, target[key]);\r\n }\r\n else {\r\n if (typeof target[key] == 'undefined' || target[key] == null) {\r\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\r\n }\r\n hashSet.set(sourceVal, target[key]);\r\n assignDeepCore(hashSet, target[key], [sourceVal]);\r\n }\r\n }\r\n }\r\n else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n function getIfDefined(value, defaultValue) {\r\n return (typeof value !== 'undefined') ? value : defaultValue;\r\n }\r\n utils.getIfDefined = getIfDefined;\r\n function IsDefinedAndNotNull(value) {\r\n return typeof value !== 'undefined' && value !== null;\r\n }\r\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\r\n function copyArrayTo(collection1, collection2) {\r\n var len1 = collection1.length;\r\n var len2 = collection2.length;\r\n for (var i = 0; i < len1 && i < len2; i++) {\r\n collection2[i] = collection1[i];\r\n }\r\n }\r\n utils.copyArrayTo = copyArrayTo;\r\n function createArrayFrom(collection) {\r\n var result = [];\r\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\r\n var item = collection_1[_i];\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n utils.createArrayFrom = createArrayFrom;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the found object or null.\r\n * @param array\r\n * @param id\r\n */\r\n function findItemById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return array[idx];\r\n }\r\n return null;\r\n }\r\n utils.findItemById = findItemById;\r\n function findItemIndexById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return idx;\r\n }\r\n return -1;\r\n }\r\n utils.findItemIndexById = findItemIndexById;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the index of the found element, or -1 if nothing was found.\r\n * @param array\r\n * @param id\r\n */\r\n function indexOfArrayItem(arr, item) {\r\n if (arr.indexOf) {\r\n return arr.indexOf(item);\r\n }\r\n else {\r\n var len = arr.length;\r\n for (var i = 0; i < len; i++) {\r\n if (item == arr[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n utils.indexOfArrayItem = indexOfArrayItem;\r\n /**\r\n * Moves an item in some array to a new position\r\n * @param array\r\n * @param index1\r\n * @param index2\r\n */\r\n function moveArrayItem(array, index1, index2) {\r\n if (index1 >= array.length) {\r\n throw 'Index out of bounds: ' + index1;\r\n }\r\n if (index2 >= array.length) {\r\n index2 = array.length - 1;\r\n }\r\n var item = array.splice(index1, 1)[0];\r\n array.splice(index2, 0, item);\r\n }\r\n utils.moveArrayItem = moveArrayItem;\r\n /**\r\n * Searches for a particular item in the array are removes that item if found.\r\n * @param arr\r\n * @param value\r\n */\r\n function removeArrayItem(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index != -1) {\r\n return arr.splice(index, 1)[0];\r\n }\r\n }\r\n utils.removeArrayItem = removeArrayItem;\r\n function insertArrayItem(arr, index, value) {\r\n arr.splice(index, 0, value);\r\n }\r\n utils.insertArrayItem = insertArrayItem;\r\n function fillArray(arr, value, start, end) {\r\n if (start === void 0) { start = 0; }\r\n var len = arr.length >>> 0;\r\n var relativeStart = start >> 0;\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n while (k < final) {\r\n arr[k] = value;\r\n k++;\r\n }\r\n return arr;\r\n }\r\n utils.fillArray = fillArray;\r\n //------------ DOM utils ------------\r\n /**\r\n * Calculates the shift on which we need to move our element horizontally\r\n * to find current window\r\n * @param absLeft\r\n * @param width\r\n */\r\n function shiftToFitWindow(absLeft, width) {\r\n var body = document.getElementsByTagName('body')[0];\r\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\r\n var absRight = absLeft + width;\r\n var shift = 0;\r\n if (absRight > winWidth) {\r\n shift = winWidth - absRight - 10;\r\n if (absLeft + shift < 0) {\r\n shift = 10 - absLeft;\r\n }\r\n }\r\n return shift;\r\n }\r\n utils.shiftToFitWindow = shiftToFitWindow;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an object\r\n * @param val\r\n */\r\n function isObject(val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ((typeof val === 'function') || (typeof val === 'object'));\r\n }\r\n utils.isObject = isObject;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isNumericType(dtype) {\r\n var index = _numericTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isNumericType = isNumericType;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isIntType(dtype) {\r\n var index = _intTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isIntType = isIntType;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an a numeric value\r\n * @param val\r\n */\r\n function isNumeric(val) {\r\n return !isNaN(parseFloat(val)) && isFinite(val);\r\n }\r\n utils.isNumeric = isNumeric;\r\n /**\r\n * Returns `true` if two data types passed in parameters\r\n * are compatible - so it's safe to copy the values between\r\n * two expressions with these two types\r\n * @param type1\r\n * @param type2\r\n */\r\n function areCompatibleDataTypes(type1, type2) {\r\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\r\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\r\n || (type1 == DataType.DateTime && type2 == DataType.Date);\r\n }\r\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\r\n /**\r\n * Returns `true` if the property with named `propName`\r\n * in the object `obj` has some value\r\n * @param obj\r\n * @param propName\r\n */\r\n function isPropSet(obj, propName) {\r\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\r\n }\r\n utils.isPropSet = isPropSet;\r\n //-------------- ID generator -----------\r\n var prefixIdLen = 4;\r\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n var magicTicks = 636712160627685350;\r\n /**\r\n * Generates an unique ID\r\n */\r\n function generateId(prefix) {\r\n if (!prefix) {\r\n prefix = 'easy';\r\n }\r\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\r\n if (prfx && prfx.length > 0) {\r\n prfx += \"-\";\r\n }\r\n //adding 2 random symbols\r\n var randValue = strf.repeatString(\"\", 2);\r\n ;\r\n var maxSymbolIndex = symbols.length - 1;\r\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n //generating main ID part (64-base representation of the current value of the time ticks)\r\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\r\n return prfx + randValue + ticksNum64;\r\n }\r\n utils.generateId = generateId;\r\n function intToNum36(value) {\r\n var targetBase = 36;\r\n var i = 14;\r\n var buffer = strf.repeatString(\"\", i);\r\n var rest = value;\r\n do {\r\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\r\n rest = Math.floor(rest /= targetBase);\r\n } while (rest > 0);\r\n return strf.reverseString(buffer.trim());\r\n }\r\n function squeezeMoniker(str, maxlen) {\r\n var parts = str.split('-');\r\n var pml = 1;\r\n var ptt = maxlen;\r\n if (parts.length < maxlen) {\r\n pml = maxlen / parts.length;\r\n ptt = parts.length;\r\n }\r\n var result = \"\";\r\n for (var i = 0; i < ptt; i++) {\r\n result += squeeze(parts[i], pml);\r\n }\r\n return result;\r\n }\r\n function squeeze(str, maxlen) {\r\n var len = str.length;\r\n if (len > maxlen) {\r\n var step = len / maxlen;\r\n var result = \"\";\r\n result += str[0];\r\n var nextIndex = step;\r\n var ch = void 0;\r\n for (var i = 1; i < len; i++) {\r\n ch = str[i];\r\n if (i + 1 > nextIndex) {\r\n result += ch;\r\n nextIndex += step;\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n function replaceAtString(str, index, value) {\r\n return str.substr(0, index) + value + str.substr(index + value.length);\r\n }\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n function getNowTicks() {\r\n return (621355968e9 + (new Date()).getTime() * 1e4);\r\n }\r\n function safeParseInt(str) {\r\n var res = parseInt(str);\r\n if (isNaN(res))\r\n throw \"\\\"\" + str + \"\\\" is not a valid number\";\r\n return res;\r\n }\r\n function getDaysInMonth(month, year) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n // ------------- date/time functions -------------------\r\n // TO DO: improve to process all datetime cases\r\n function strToDateTime(value, format) {\r\n if (!value || value.length == 0)\r\n return new Date();\r\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var formatItems = normalizedFormat.split('-');\r\n var dateItems = normalizedValue.split('-');\r\n var monthIndex = formatItems.indexOf(\"MM\");\r\n var dayIndex = formatItems.indexOf(\"dd\");\r\n var yearIndex = formatItems.indexOf(\"yyyy\");\r\n var hourIndex = formatItems.indexOf(\"HH\");\r\n var minutesIndex = formatItems.indexOf(\"mm\");\r\n var secondsIndex = formatItems.indexOf(\"ss\");\r\n var today = new Date();\r\n try {\r\n var year = yearIndex > -1 && yearIndex < dateItems.length\r\n ? safeParseInt(dateItems[yearIndex])\r\n : today.getFullYear();\r\n var month = monthIndex > -1 && monthIndex < dateItems.length\r\n ? safeParseInt(dateItems[monthIndex]) - 1\r\n : today.getMonth() - 1;\r\n if (month > 11)\r\n throw '';\r\n var day = dayIndex > -1 && dayIndex < dateItems.length\r\n ? safeParseInt(dateItems[dayIndex])\r\n : today.getDate();\r\n if (day > getDaysInMonth(month, year))\r\n throw '';\r\n var hour = hourIndex > -1 && hourIndex < dateItems.length\r\n ? safeParseInt(dateItems[hourIndex])\r\n : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\r\n ? safeParseInt(dateItems[minutesIndex])\r\n : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\r\n ? safeParseInt(dateItems[secondsIndex])\r\n : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(year, month, day, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw value + \" is not a valid date.\";\r\n }\r\n }\r\n utils.strToDateTime = strToDateTime;\r\n function strToTime(str) {\r\n var timeItems = str.split(':');\r\n try {\r\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(0, 0, 0, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw str + \" is not a valid time.\";\r\n }\r\n }\r\n utils.strToTime = strToTime;\r\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\r\n /**\r\n * Returns string representation of the date/time value according to the custom format (second parameter)\r\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\r\n * @param date\r\n * @param format\r\n */\r\n function dateTimeToStr(date, format) {\r\n var year = date.getFullYear();\r\n var month = date.getMonth() + 1;\r\n var day = date.getDate();\r\n var hour = date.getHours();\r\n var minute = date.getMinutes();\r\n var second = date.getSeconds();\r\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\r\n var isPm = hour > 11;\r\n var matches = {\r\n yyyy: year.toString(),\r\n MMMM: i18n.getLongMonthName(month),\r\n MMM: i18n.getShortMonthName(month),\r\n MM: (month < 10) ? '0' + month : month.toString(),\r\n M: month.toString(),\r\n dd: (day < 10) ? '0' + day : day.toString(),\r\n d: day.toString(),\r\n HH: (hour < 10) ? '0' + hour : hour.toString(),\r\n H: hour.toString(),\r\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\r\n h: hour12.toString(),\r\n tt: isPm ? 'PM' : 'AM',\r\n mm: (minute < 10) ? '0' + minute : minute.toString(),\r\n ss: (second < 10) ? '0' + second : second.toString()\r\n };\r\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\r\n return $1 || matches[match];\r\n });\r\n }\r\n utils.dateTimeToStr = dateTimeToStr;\r\n /**\r\n * Converts a numeric value to the string taking into the account the decimal separator\r\n * @param value - the number to convert\r\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\r\n */\r\n function numberToStr(number, decimalSeparator) {\r\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\r\n return number.toString().replace('.', decimalSeparator);\r\n }\r\n utils.numberToStr = numberToStr;\r\n})(utils || (utils = {}));\r\n//# sourceMappingURL=utils.js.map","var HttpActionResult = /** @class */ (function () {\r\n function HttpActionResult(request, promise) {\r\n this.request = request;\r\n this.promise = promise;\r\n }\r\n HttpActionResult.prototype.getPromise = function () {\r\n return this.promise;\r\n };\r\n HttpActionResult.prototype.getRequest = function () {\r\n return this.request;\r\n };\r\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\r\n return this.promise.then(onfulfilled, onrejected);\r\n };\r\n HttpActionResult.prototype.catch = function (onrejected) {\r\n return this.promise.catch(onrejected);\r\n };\r\n HttpActionResult.prototype.finally = function (onfinally) {\r\n return this.promise.finally(onfinally);\r\n };\r\n return HttpActionResult;\r\n}());\r\nexport { HttpActionResult };\r\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { utils } from '../utils/utils';\r\nimport { HttpActionResult } from './http_action_result';\r\nimport { HttpMethod } from './http_method';\r\nimport { HttpRequest } from './http_request';\r\nvar HttpResponseError = /** @class */ (function (_super) {\r\n __extends(HttpResponseError, _super);\r\n function HttpResponseError(status, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.status = status;\r\n return _this;\r\n }\r\n return HttpResponseError;\r\n}(Error));\r\nexport { HttpResponseError };\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n this.defaultHeaders = {};\r\n this.customPayload = undefined;\r\n }\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(HttpMethod.Get, url, null, options);\r\n };\r\n HttpClient.prototype.post = function (url, data, options) {\r\n return this.send(HttpMethod.Post, url, data, options);\r\n };\r\n HttpClient.prototype.put = function (url, data, options) {\r\n return this.send(HttpMethod.Put, url, data, options);\r\n };\r\n HttpClient.prototype.delete = function (url, data, options) {\r\n return this.send(HttpMethod.Delete, url, data, options);\r\n };\r\n HttpClient.prototype.send = function (method, url, data, options) {\r\n options = options || {};\r\n var dataType = options.dataType || 'json';\r\n var contentType = options.contentType || (dataType !== 'form-data')\r\n ? 'application/json'\r\n : null;\r\n if (data && dataType != 'form-data' && this.customPayload) {\r\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\r\n }\r\n var XHR = ('onload' in new XMLHttpRequest())\r\n ? XMLHttpRequest\r\n : window[\"XDomainRequest\"]; //IE support\r\n var xhr = new XHR();\r\n var desc = {\r\n method: method,\r\n url: url,\r\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\r\n queryParams: options.queryParams || {},\r\n data: data\r\n };\r\n if (contentType)\r\n desc.headers['Content-Type'] = contentType;\r\n var request = new HttpRequest(xhr, desc);\r\n if (this.beforeEachRequest) {\r\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\r\n this.beforeEachRequest(request);\r\n }\r\n if (this.onRequest) {\r\n this.onRequest(request);\r\n }\r\n var dataToSend = (request.data && typeof request.data !== 'string'\r\n && dataType == 'json')\r\n ? JSON.stringify(request.data)\r\n : request.data;\r\n request.open();\r\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\r\n if (options.responseType)\r\n xhr.responseType = options.responseType;\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState != 4) {\r\n return;\r\n }\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status >= 400) {\r\n var rtPromise = (xhr.responseType === 'arraybuffer'\r\n || xhr.responseType === 'blob')\r\n ? HttpClient.decodeArrayBuffer(xhr.response)\r\n : Promise.resolve(xhr.responseText);\r\n rtPromise.then(function (responseText) {\r\n var responseObj = (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(responseText)\r\n : responseText;\r\n var message = responseObj.message ||\r\n (status == 404\r\n ? \"No such endpoint: \" + url\r\n : responseObj);\r\n reject(new HttpResponseError(status, message));\r\n });\r\n return;\r\n }\r\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? xhr.response\r\n : (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(xhr.responseText)\r\n : xhr.responseText;\r\n resolve(responseObj);\r\n };\r\n xhr.send(dataToSend);\r\n }));\r\n };\r\n HttpClient.decodeArrayBuffer = function (uintArray) {\r\n var reader = new FileReader();\r\n return new Promise(function (resolve) {\r\n reader.onloadend = function () {\r\n if (reader.readyState == FileReader.DONE) {\r\n resolve(reader.result);\r\n }\r\n };\r\n reader.readAsText(new Blob([uintArray]));\r\n });\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\r\nimport { EntityAttrKind } from '../types/entity_attr_kind';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Represents one entity.\r\n */\r\nvar MetaEntity = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntity(parent) {\r\n /** Returns false if this entity is read-only */\r\n this.isEditable = true;\r\n this.name = \"\";\r\n this.caption = \"\";\r\n this.description = \"\";\r\n this.parent = parent;\r\n this.attributes = new Array();\r\n this.subEntities = new Array();\r\n }\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntity.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.name = dto.name;\r\n this.captionPlural = dto.namePlur;\r\n this.caption = dto.name;\r\n this.description = dto.desc;\r\n if (typeof (dto.ied) !== 'undefined')\r\n this.isEditable = dto.ied;\r\n this.subEntities = new Array();\r\n if (dto.ents) {\r\n for (var i = 0; i < dto.ents.length; i++) {\r\n var newEntity = model.createEntity(this);\r\n newEntity.loadFromData(model, dto.ents[i]);\r\n this.subEntities.push(newEntity);\r\n }\r\n }\r\n this.attributes = new Array();\r\n if (dto.attrs) {\r\n for (var i = 0; i < dto.attrs.length; i++) {\r\n var newAttr = model.createEntityAttr(this);\r\n newAttr.loadFromData(model, dto.attrs[i]);\r\n this.attributes.push(newAttr);\r\n }\r\n }\r\n }\r\n };\r\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\r\n var opts = { stop: false };\r\n var internalProcessEntity = function (entity) {\r\n if (processEntity)\r\n processEntity(entity, opts);\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\r\n var attr = entity.attributes[i];\r\n if (processAttribute) {\r\n processAttribute(attr, opts);\r\n }\r\n if (opts.stop)\r\n return;\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\r\n internalProcessEntity(entity.subEntities[i]);\r\n }\r\n }\r\n };\r\n internalProcessEntity(this);\r\n };\r\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\r\n return this.getPrimaryAttrs()[0];\r\n };\r\n MetaEntity.prototype.getPrimaryAttrs = function () {\r\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\r\n };\r\n return MetaEntity;\r\n}());\r\nexport { MetaEntity };\r\nvar MetaEntityAttr = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntityAttr(entity) {\r\n this.id = \"\";\r\n this.caption = \"{Unrecognized attribute}\";\r\n this.dataType = DataType.String;\r\n this.size = 0;\r\n this.isPrimaryKey = false;\r\n this.isForeignKey = false;\r\n this.isNullable = true;\r\n this.showOnView = true;\r\n this.isEditable = true;\r\n this.showOnCreate = true;\r\n this.showOnEdit = true;\r\n this.showInLookup = false;\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n this.entity = entity;\r\n this.kind = EntityAttrKind.Data;\r\n }\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.description = dto.desc;\r\n this.caption = dto.cptn;\r\n this.dataType = dto.dtype;\r\n this.isPrimaryKey = dto.ipk;\r\n this.isForeignKey = dto.ifk;\r\n this.size = dto.size;\r\n this.lookupAttr = dto.lattr;\r\n this.lookupEntity = dto.lent;\r\n this.dataAttr = dto.dattr;\r\n this.lookupDataAttr = dto.ldattr;\r\n this.defaultValue = dto.defVal;\r\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\r\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\r\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\r\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\r\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\r\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\r\n this.kind = dto.kind;\r\n this.displayFormat = dto.dfmt;\r\n if (dto.udata)\r\n this.userData = dto.udata;\r\n if (dto.edtr) {\r\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\r\n }\r\n }\r\n };\r\n return MetaEntityAttr;\r\n}());\r\nexport { MetaEntityAttr };\r\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\n/**\r\n * Represents a value editor.\r\n */\r\nvar ValueEditor = /** @class */ (function () {\r\n /** The default constructor. */\r\n function ValueEditor() {\r\n this.id = \"\";\r\n this.tag = EditorTag.Unknown;\r\n this.resType = DataType.Unknown;\r\n this.defValue = \"\";\r\n }\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n ValueEditor.prototype.loadFromData = function (data) {\r\n if (data) {\r\n this.id = data.id;\r\n this.tag = data.tag;\r\n this.defValue = data.defval;\r\n this.resType = data.rtype;\r\n this.accept = data.accept;\r\n this.multiline = data.multiline;\r\n if (data.subType) {\r\n this.resType = data.subType;\r\n }\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n if (data.values) {\r\n this.values = data.values;\r\n }\r\n }\r\n };\r\n ValueEditor.prototype.getValueText = function (value) {\r\n var result = \"\";\r\n if (!this.values)\r\n return result;\r\n if (Array.isArray(value)) {\r\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (value.indexOf(item.id) >= 0) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n else {\r\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n if (item.id === value) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n if (result) {\r\n result = result.substring(0, result.length - 1);\r\n }\r\n return result;\r\n };\r\n return ValueEditor;\r\n}());\r\nexport { ValueEditor };\r\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\r\nimport { utils } from '../utils/utils';\r\nimport { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\r\nimport { ValueEditor } from './value_editor';\r\n/**\r\n * Represents a data model\r\n */\r\nvar MetaData = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaData() {\r\n this.mainEntity = null;\r\n this.id = '__none';\r\n this.name = 'Empty model';\r\n this.rootEntity = this.createEntity();\r\n this.displayFormats = new Map();\r\n }\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n MetaData.prototype.getMainEntity = function () {\r\n return this.mainEntity;\r\n };\r\n MetaData.prototype.createEntity = function (parent) {\r\n return new MetaEntity(parent);\r\n };\r\n MetaData.prototype.createEntityAttr = function (parent) {\r\n return new MetaEntityAttr(parent);\r\n };\r\n MetaData.prototype.createValueEditor = function () {\r\n return new ValueEditor();\r\n };\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n MetaData.prototype.loadFromJSON = function (stringJson) {\r\n var model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n };\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n MetaData.prototype.loadFromData = function (data) {\r\n this.id = data.id;\r\n this.name = data.name;\r\n this.version = data.vers;\r\n //Editors\r\n this.editors = new Array();\r\n if (data.editors) {\r\n for (var i = 0; i < data.editors.length; i++) {\r\n var newEditor = this.createValueEditor();\r\n newEditor.loadFromData(data.editors[i]);\r\n this.editors.push(newEditor);\r\n }\r\n }\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n //DataFormats\r\n this.displayFormats = new Map();\r\n if (data.displayFormats) {\r\n for (var dtypeStr in data.displayFormats) {\r\n var dtype = DataType[dtypeStr];\r\n var formats = data.displayFormats[dtypeStr] || new Array();\r\n this.displayFormats.set(dtype, formats);\r\n }\r\n }\r\n };\r\n /**\r\n * Gets the display formats.\r\n * @returns The display formats.\r\n */\r\n MetaData.prototype.getDisplayFormats = function () {\r\n return this.displayFormats;\r\n };\r\n /**\r\n * Gets the display formats for type\r\n * @param type The type\r\n * @returns An array of display formats\r\n */\r\n MetaData.prototype.getDisplayFormatsForType = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type);\r\n }\r\n return [];\r\n };\r\n /**\r\n * Gets the default display format for the provided type\r\n * @param type The type\r\n * @returns The default type format or null\r\n */\r\n MetaData.prototype.getDefaultFormat = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n MetaData.prototype.setData = function (model) {\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n };\r\n /**\r\n * Checks wether the data model is empty.\r\n * @returns `true` if the data model is empty, otherwise `false`.\r\n */\r\n MetaData.prototype.isEmpty = function () {\r\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\r\n };\r\n /**\r\n * Gets ID of the data model.\r\n * @returns The ID.\r\n */\r\n MetaData.prototype.getId = function () {\r\n return this.id;\r\n };\r\n /**\r\n * Gets name of the data model.\r\n * @returns The name.\r\n */\r\n MetaData.prototype.getName = function () {\r\n return this.name;\r\n };\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n MetaData.prototype.getRootEntity = function () {\r\n return this.rootEntity;\r\n };\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n MetaData.prototype.getEditorById = function (editorId) {\r\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\r\n var editor = _a[_i];\r\n if (editor.id === editorId) {\r\n return editor;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getAttributeById = function (attrId) {\r\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n };\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\r\n var attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity\r\n * @param attrId\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\r\n var idx;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (idx = 0; idx < attrCount; idx++) {\r\n if (entity.attributes[idx].id == attrId) {\r\n return entity.attributes[idx];\r\n }\r\n }\r\n }\r\n var res;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (idx = 0; idx < subEntityCount; idx++) {\r\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\r\n if (res)\r\n return res;\r\n }\r\n }\r\n return null;\r\n };\r\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\r\n var result = new Array();\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\r\n opts = opts || {};\r\n var resultEntities = [];\r\n var resultAttributes = [];\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n var newEnt = utils.assign(this.createEntity(), {\r\n id: ent.name,\r\n text: caption,\r\n items: [],\r\n isEntity: true,\r\n description: ent.description\r\n });\r\n var newOpts = utils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\r\n id: attr.id, text: caption,\r\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\r\n description: attr.description\r\n }));\r\n }\r\n }\r\n }\r\n var sortCheck = function (a, b) {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\r\n return 0;\r\n }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n };\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n var result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n };\r\n /**\r\n * Clears data model.\r\n */\r\n MetaData.prototype.clear = function () {\r\n this.rootEntity = this.createEntity();\r\n this.editors = [];\r\n this.version = '';\r\n };\r\n /**\r\n * Add default value editors.\r\n */\r\n MetaData.prototype.addDefaultValueEditors = function () {\r\n var ve;\r\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\r\n ve.defValue = '';\r\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\r\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\r\n };\r\n /**\r\n * Add or update a value editor.\r\n * @param id The id.\r\n * @param tag The tag.\r\n * @param resType The result type.\r\n * @returns The value editor.\r\n */\r\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\r\n var ve = utils.findItemById(this.editors, id);\r\n if (!ve) {\r\n ve = this.createValueEditor();\r\n ve.id = id;\r\n this.editors.push(ve);\r\n }\r\n ve.tag = tag;\r\n ve.resType = resType;\r\n return ve;\r\n };\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\r\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\r\n };\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\r\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n };\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n };\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\r\n if (!entity)\r\n return '';\r\n sep = sep || ' ';\r\n var entityCaption = '';\r\n if (entity.caption && !root) {\r\n var entityText = i18n.getText('Entities', entity.caption);\r\n entityCaption = entityText ? entityText : entity.caption;\r\n }\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].id == attrId) {\r\n return entityCaption;\r\n }\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; i < subEntityCount; i++) {\r\n var ent = entity.subEntities[i];\r\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\r\n if (res !== '') {\r\n if (entityCaption !== '')\r\n res = entityCaption + sep + res;\r\n return res;\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n MetaData.prototype.getAttributeText = function (attr, format) {\r\n var attrText = i18n.getText('Attributes', attr.id);\r\n if (!attrText) {\r\n attrText = attr.caption;\r\n }\r\n if (!format) {\r\n return attrText;\r\n }\r\n var result = '';\r\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\r\n if (entityPath) {\r\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\r\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\r\n }\r\n else {\r\n result = attrText;\r\n }\r\n return result.trim();\r\n };\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n };\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\r\n var res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n };\r\n return MetaData;\r\n}());\r\nexport { MetaData };\r\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Defines aggregations settings for the current context.\r\n * Group, aggregate columns, grand totals, etc.\r\n */\r\nvar AggregationSettings = /** @class */ (function () {\r\n function AggregationSettings(colStore) {\r\n this.colStore = colStore;\r\n this.aggregates = [];\r\n this.groups = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this._caseSensitiveGroups = false;\r\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\r\n }\r\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\r\n get: function () {\r\n return this._caseSensitiveGroups;\r\n },\r\n set: function (value) {\r\n this._caseSensitiveGroups = value;\r\n this.updateCompareProc();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AggregationSettings.prototype.updateCompareProc = function () {\r\n this.compareValues = this._caseSensitiveGroups\r\n ? this.strictCompare\r\n : this.caseInsensitiveCompare;\r\n };\r\n AggregationSettings.prototype.addGroup = function (settings) {\r\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\r\n if (!this.colStore.validateColumns(cols))\r\n throw \"Invalid columns: \" + cols;\r\n if (this.hasColumnsInUse(cols))\r\n throw \"Can't add same columns to different groups/aggregates\";\r\n this.groups.push(__assign({ columns: cols }, settings));\r\n return this;\r\n };\r\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\r\n var colId = typeof colIndexOrId == 'string'\r\n ? colIndexOrId\r\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\r\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\r\n throw 'Invalid aggregation function for the column: ' + colId;\r\n this.aggregates.push({ colId: colId, funcId: funcId });\r\n return this;\r\n };\r\n AggregationSettings.prototype.addGrandTotals = function () {\r\n this.useGrandTotals = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.addCounts = function () {\r\n this.useRecordCount = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.getGroups = function () {\r\n var _this = this;\r\n var cols = [];\r\n var mappedGrops = this.groups.map(function (grp) {\r\n cols = cols.concat(grp.columns);\r\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\r\n });\r\n return mappedGrops;\r\n };\r\n AggregationSettings.prototype.getInternalGroups = function () {\r\n return this.groups;\r\n };\r\n AggregationSettings.prototype.lastGroup = function () {\r\n var groups = this.getGroups();\r\n return groups[groups.length - 1];\r\n };\r\n AggregationSettings.prototype.getAggregates = function () {\r\n return this.aggregates;\r\n };\r\n AggregationSettings.prototype.hasAggregates = function () {\r\n return this.aggregates.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGroups = function () {\r\n return this.groups.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGrandTotals = function () {\r\n return this.useGrandTotals;\r\n };\r\n AggregationSettings.prototype.hasRecordCount = function () {\r\n return this.useRecordCount;\r\n };\r\n AggregationSettings.prototype.isEmpty = function () {\r\n return !(this.hasAggregates() || this.hasGroups() ||\r\n this.hasAggregates() || this.hasRecordCount());\r\n };\r\n AggregationSettings.prototype.drop = function () {\r\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\r\n this.clear();\r\n };\r\n AggregationSettings.prototype.clear = function () {\r\n this.groups = [];\r\n this.aggregates = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this.caseSensitiveGroups = false;\r\n return this;\r\n };\r\n /**\r\n * Checks if all columns from the list passed in the parameter are \"unused\".\r\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\r\n * @param cols - the array of column IDs\r\n * @returns true if all columns in the list are not used anywhere, othervise - fals\r\n */\r\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var interCols = group.columns\r\n .filter(function (c) { return cols.indexOf(c) >= 0; });\r\n if (interCols.length > 0)\r\n return true;\r\n }\r\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\r\n var aggr = _c[_b];\r\n if (cols.indexOf(aggr.colId) >= 0)\r\n return true;\r\n }\r\n return false;\r\n };\r\n AggregationSettings.prototype.needAggrCalculation = function () {\r\n return (this.hasAggregates() || this.hasRecordCount())\r\n && (this.hasGrandTotals() || this.hasGroups());\r\n };\r\n AggregationSettings.prototype.saveToData = function () {\r\n return {\r\n groups: Array.from(this.groups),\r\n ugt: this.useGrandTotals,\r\n urc: this.useRecordCount,\r\n csg: this.caseSensitiveGroups,\r\n aggregates: Array.from(this.aggregates)\r\n };\r\n };\r\n AggregationSettings.prototype.loadFromData = function (data) {\r\n if (data) {\r\n if (typeof data.ugt !== 'undefined')\r\n this.useGrandTotals = data.ugt;\r\n if (typeof data.urc !== 'undefined')\r\n this.useRecordCount = data.urc;\r\n if (typeof data.csg !== 'undefined')\r\n this.caseSensitiveGroups = data.csg;\r\n if (data.groups) {\r\n this.groups = Array.from(data.groups);\r\n }\r\n if (data.aggregates) {\r\n this.aggregates = Array.from(data.aggregates);\r\n }\r\n }\r\n };\r\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\r\n var caseInsensitive = !this.caseSensitiveGroups;\r\n var result = {};\r\n if (group) {\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var colId = _a[_i];\r\n var keyVal = row.getValue(colId);\r\n if (caseInsensitive && typeof (keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n }\r\n return result;\r\n };\r\n //returns true if value1 == value2\r\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\r\n return value1 === value2;\r\n };\r\n //makes a case insensative comparision of two values and return true if there are equal\r\n AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {\r\n var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\r\n var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\r\n return val1 === val2;\r\n };\r\n return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_settings.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nexport var ColumnAlignment;\r\n(function (ColumnAlignment) {\r\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\r\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\r\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\r\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\r\n})(ColumnAlignment || (ColumnAlignment = {}));\r\nvar DataColumn = /** @class */ (function () {\r\n function DataColumn(desc) {\r\n if (!desc)\r\n throw Error(\"Options are required\");\r\n if (!desc.id)\r\n throw Error(\"Field Id is required\");\r\n if (!desc.label)\r\n throw Error(\"Label is required\");\r\n this.id = desc.id;\r\n this.type = utils.getIfDefined(desc.type, DataType.String);\r\n this.label = desc.label;\r\n this.originAttrId = desc.originAttrId;\r\n this.isAggr = desc.isAggr || false;\r\n this.displayFormat = desc.dfmt;\r\n this.groupFooterColumnTemplate = desc.gfct;\r\n this.style = desc.style || {};\r\n this.description = desc.description;\r\n this.calculatedWidth = 0;\r\n }\r\n return DataColumn;\r\n}());\r\nexport { DataColumn };\r\nvar DataColumnList = /** @class */ (function () {\r\n function DataColumnList() {\r\n this.items = [];\r\n this.mapper = {};\r\n this._dateColumnIdx = [];\r\n }\r\n Object.defineProperty(DataColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DataColumnList.prototype.add = function (colOrDesc) {\r\n var col;\r\n if (colOrDesc instanceof DataColumn) {\r\n col = colOrDesc;\r\n }\r\n else {\r\n col = new DataColumn(colOrDesc);\r\n }\r\n var index = this.items.length;\r\n this.items.push(col);\r\n this.mapper[col.id] = index;\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\r\n this._dateColumnIdx.push(index);\r\n }\r\n return index;\r\n };\r\n DataColumnList.prototype.updateDateColumnIdx = function () {\r\n this._dateColumnIdx = this.getItems()\r\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\r\n .map(function (col, index) { return index; });\r\n };\r\n DataColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.count) {\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex) {\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.count) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n DataColumnList.prototype.getIndex = function (id) {\r\n return this.mapper[id];\r\n };\r\n DataColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n DataColumnList.prototype.getDateColumnIndexes = function () {\r\n return this._dateColumnIdx;\r\n };\r\n DataColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n var removeDate = this._dateColumnIdx.indexOf(index);\r\n if (removeDate >= 0) {\r\n this._dateColumnIdx.splice(removeDate, 1);\r\n }\r\n delete this.mapper[col.id];\r\n };\r\n DataColumnList.prototype.clear = function () {\r\n this.items = [];\r\n this._dateColumnIdx = [];\r\n this.mapper = {};\r\n };\r\n return DataColumnList;\r\n}());\r\nexport { DataColumnList };\r\n//# sourceMappingURL=data_column.js.map","var DataRow = /** @class */ (function () {\r\n function DataRow(columns, values) {\r\n this.columns = columns;\r\n this.values = values;\r\n }\r\n DataRow.prototype.toArray = function () {\r\n return Array.from(this.values);\r\n };\r\n DataRow.prototype.size = function () {\r\n return this.values.length;\r\n };\r\n DataRow.prototype.getValue = function (colIdOrIndex) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n return this.values[index];\r\n };\r\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n this.values[index] = value;\r\n };\r\n return DataRow;\r\n}());\r\nexport { DataRow };\r\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\r\nimport { DataRow } from './data_row';\r\nimport { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nvar EasyDataTable = /** @class */ (function () {\r\n function EasyDataTable(options) {\r\n this._chunkSize = 1000;\r\n this._elasticChunks = false;\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\r\n this.isInMemory = false;\r\n options = options || {};\r\n this._chunkSize = options.chunkSize || this._chunkSize;\r\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\r\n this.loader = options.loader;\r\n if (typeof options.inMemory !== 'undefined') {\r\n this.isInMemory = options.inMemory;\r\n }\r\n if (this.isInMemory) {\r\n this.needTotal = false;\r\n }\r\n this._columns = new DataColumnList();\r\n this.onUpdate = options.onUpdate;\r\n if (options.columns) {\r\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\r\n var colDesc = _a[_i];\r\n this._columns.add(colDesc);\r\n }\r\n }\r\n if (options.rows) {\r\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\r\n var rowData = _c[_b];\r\n var row = this.createRow(rowData);\r\n this.addRow(row);\r\n }\r\n }\r\n this.needTotal = !this._elasticChunks;\r\n }\r\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\r\n get: function () {\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\r\n get: function () {\r\n return this._chunkSize;\r\n },\r\n set: function (value) {\r\n this._chunkSize = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\r\n get: function () {\r\n return this._elasticChunks;\r\n },\r\n set: function (value) {\r\n this._elasticChunks = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyDataTable.prototype.getRows = function (params) {\r\n var _this = this;\r\n var fromIndex = 0, count = this._chunkSize;\r\n if (params) {\r\n if ('page' in params) {\r\n fromIndex = params.pageSize * (params.page - 1);\r\n count = params.pageSize;\r\n }\r\n else {\r\n fromIndex = params.offset;\r\n count = params.limit;\r\n }\r\n }\r\n var endIndex = fromIndex + count; //the first index of the next page\r\n //if we don't calculate total on this request\r\n if (!this.needTotal && !this.elasticChunks) {\r\n if (fromIndex >= this.total) {\r\n return Promise.resolve([]);\r\n }\r\n if (endIndex > this.total) {\r\n endIndex = this.total;\r\n }\r\n }\r\n if (this.isInMemory && endIndex > this.cachedRows.length) {\r\n endIndex = this.cachedRows.length;\r\n }\r\n var allChunksCached = endIndex <= this.cachedRows.length;\r\n if (allChunksCached) {\r\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\r\n }\r\n //if loader is not defined\r\n if (!this.loader) {\r\n throw \"Loader is not defined. Can't get the rows from \" + fromIndex + \" to \" + endIndex;\r\n }\r\n // we need total only for the first request\r\n var needTotal = this.needTotal;\r\n if (this.needTotal) {\r\n this.needTotal = false;\r\n }\r\n var offset = this.cachedRows.length;\r\n var limit = endIndex - offset;\r\n if (limit < this._chunkSize) {\r\n limit = this._chunkSize;\r\n }\r\n var resultPromise = this.loader.loadChunk({\r\n offset: offset,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n if (needTotal) {\r\n _this.total = result.total;\r\n }\r\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\r\n if (endIndex > _this.cachedRows.length) {\r\n endIndex = _this.cachedRows.length;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 < limit) {\r\n _this.total = _this.cachedRows.length;\r\n }\r\n }\r\n _this.fireUpdated();\r\n return _this.cachedRows.slice(fromIndex, endIndex);\r\n });\r\n return resultPromise;\r\n };\r\n EasyDataTable.prototype.getRow = function (index) {\r\n return this.getRows({ offset: index, limit: 1 })\r\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\r\n };\r\n EasyDataTable.prototype.getTotal = function () {\r\n return this.total;\r\n };\r\n EasyDataTable.prototype.setTotal = function (total) {\r\n this.total = total;\r\n this.needTotal = false;\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.cachedRows.length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\r\n this.fireUpdated();\r\n };\r\n EasyDataTable.prototype.createRow = function (dataOrRow) {\r\n var _this = this;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n var values = new Array(this._columns.count);\r\n var getValue = dataOrRow instanceof DataRow\r\n ? function (colId) { return dataOrRow.getValue(colId); }\r\n : function (colId) { return dataOrRow[colId]; };\r\n if (dataOrRow) {\r\n this.columns.getItems().forEach(function (column) {\r\n var value = getValue(column.id);\r\n var index = _this.columns.getIndex(column.id);\r\n values[index] = (dateIdx.indexOf(index) >= 0)\r\n ? _this.mapDate(value, column.type)\r\n : value;\r\n });\r\n }\r\n return new DataRow(this._columns, values);\r\n };\r\n EasyDataTable.prototype.mapDate = function (value, dtype) {\r\n if (value) {\r\n var result = new Date(value);\r\n if (isNaN(result.getTime())\r\n && dtype == DataType.Time) {\r\n result = utils.strToTime(value);\r\n }\r\n return result;\r\n }\r\n return null;\r\n };\r\n EasyDataTable.prototype.addRow = function (rowOrValues) {\r\n var newRow;\r\n if (Array.isArray(rowOrValues)) {\r\n var values = rowOrValues;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n if (dateIdx.length > 0) {\r\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\r\n var idx = dateIdx_1[_i];\r\n if (values[idx]) {\r\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, values);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValues);\r\n }\r\n this.cachedRows.push(newRow);\r\n var cachedTotal = this.getCachedCount();\r\n if (cachedTotal > this.total) {\r\n this.total = cachedTotal;\r\n }\r\n return newRow;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.cachedRows;\r\n };\r\n EasyDataTable.prototype.totalIsKnown = function () {\r\n if (this.elasticChunks) {\r\n var count = this.getCachedCount();\r\n return count === this.total;\r\n }\r\n return !this.needTotal;\r\n };\r\n EasyDataTable.prototype.fireUpdated = function () {\r\n if (this.onUpdate) {\r\n this.onUpdate(this);\r\n }\r\n };\r\n return EasyDataTable;\r\n}());\r\nexport { EasyDataTable };\r\n//# sourceMappingURL=easy_data_table.js.map","/**\r\n * EasyData representation of GUID.\r\n */\r\nvar EasyGuid = /** @class */ (function () {\r\n function EasyGuid() {\r\n }\r\n /**\r\n * Generates new GUID.\r\n * @returns The string representation of GUID.\r\n */\r\n EasyGuid.newGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return EasyGuid;\r\n}());\r\nexport { EasyGuid };\r\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\r\n/**\r\n * The representation of event emitter.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n /**\r\n * The default constructor.\r\n * @param source The source.\r\n */\r\n function EventEmitter(source) {\r\n this.silentMode = 0;\r\n this.events = new Array();\r\n this.source = source;\r\n }\r\n /**\r\n * Subscries to the event.\r\n * @param eventType The event type.\r\n * @param callback The callback.\r\n * @returns The subscribtion ID.\r\n */\r\n EventEmitter.prototype.subscribe = function (eventType, callback) {\r\n var event = this.getEventRecByType(eventType);\r\n var eventCallback = {\r\n id: EasyGuid.newGuid(),\r\n callback: callback\r\n };\r\n if (event) {\r\n event.eventCallbacks.push(eventCallback);\r\n }\r\n else {\r\n event = {\r\n type: eventType,\r\n eventCallbacks: new Array(eventCallback)\r\n };\r\n this.events.push(event);\r\n }\r\n return eventCallback.id;\r\n };\r\n /**\r\n * Unsubsribes from the event.\r\n * @param eventType The event type.\r\n * @param callbackId The subscribtion ID.\r\n */\r\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\r\n var event = this.getEventRecByType(eventType);\r\n if (event) {\r\n var index = -1;\r\n for (index = 0; index < event.eventCallbacks.length; index++) {\r\n if (event.eventCallbacks[index].id === callbackId) {\r\n break;\r\n }\r\n }\r\n if (index >= 0) {\r\n event.eventCallbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Fires the event.\r\n * @param eventType The event type.\r\n * @param data The event data.\r\n * @param postpone The postpone.\r\n * @param force To fire force. If value is `true`, ignores silent mode.\r\n */\r\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\r\n if (postpone === void 0) { postpone = 0; }\r\n if (force === void 0) { force = false; }\r\n if (this.silentMode && !force) {\r\n return;\r\n }\r\n var eventRec = this.getEventRecByType(eventType);\r\n if (eventRec) {\r\n var eqevent_1 = {\r\n type: eventType,\r\n source: this.source,\r\n data: data\r\n };\r\n var emitAllFunc = function () {\r\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\r\n var callback = _a[_i];\r\n callback.callback(eqevent_1);\r\n }\r\n };\r\n if (postpone > 0) {\r\n setTimeout(emitAllFunc, postpone);\r\n }\r\n else {\r\n emitAllFunc();\r\n }\r\n }\r\n };\r\n /**\r\n * Enters to silent mode.\r\n */\r\n EventEmitter.prototype.enterSilentMode = function () {\r\n this.silentMode++;\r\n };\r\n /**\r\n * Exits from silent mode.\r\n */\r\n EventEmitter.prototype.exitSilentMode = function () {\r\n if (this.silentMode) {\r\n this.silentMode--;\r\n }\r\n };\r\n /**\r\n * Checks if emitter is in silent mode.\r\n * @return `true`, if silent mode is enable.\r\n */\r\n EventEmitter.prototype.isSilent = function () {\r\n return this.silentMode > 0;\r\n };\r\n EventEmitter.prototype.getEventRecByType = function (eventType) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var event_1 = _a[_i];\r\n if (event_1.type == eventType) {\r\n return event_1;\r\n }\r\n }\r\n return null;\r\n };\r\n return EventEmitter;\r\n}());\r\nexport { EventEmitter };\r\n//# sourceMappingURL=event_emitter.js.map","export var liquid;\r\n(function (liquid) {\r\n function renderLiquidTemplate(template, vars) {\r\n var result = template;\r\n if (vars) {\r\n for (var v in vars) {\r\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\r\n result = result.replace(liquidVarRegexp, vars[v]);\r\n }\r\n }\r\n return result;\r\n }\r\n liquid.renderLiquidTemplate = renderLiquidTemplate;\r\n})(liquid || (liquid = {}));\r\n//# sourceMappingURL=liquid.js.map","import { i18n } from './i18n';\r\ni18n.resetLocales();\r\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\r\nexport * from './types/data_type';\r\nexport * from './types/entity_attr_kind';\r\nexport * from './types/editor_tag';\r\n//http\r\nexport * from './http/http_method';\r\nexport * from './http/http_request';\r\nexport * from './http/http_client';\r\n//meta data\r\nexport * from './meta/meta_data';\r\nexport * from './meta/meta_entity';\r\nexport * from './meta/value_editor';\r\nexport * from './data/aggr_settings';\r\nexport * from './data/data_column';\r\nexport * from './data/data_row';\r\nexport * from './data/easy_data_table';\r\n//event\r\nexport * from './event/event_emitter';\r\n//i18n\r\nexport * from './i18n/i18n';\r\n//utils\r\nexport * from './utils/easy_guid';\r\nexport * from './utils/string_utils';\r\nexport * from './utils/utils';\r\nexport * from './utils/liquid';\r\nimport './i18n/load_default_locale_settings';\r\nif (typeof Object.values !== 'function') {\r\n Object.values = function (obj) {\r\n return Object.keys(obj).map(function (key) { return obj[key]; });\r\n };\r\n}\r\nif (typeof Math.trunc !== 'function') {\r\n Math.trunc = function (x) {\r\n if (isNaN(x)) {\r\n return NaN;\r\n }\r\n if (x > 0) {\r\n return Math.floor(x);\r\n }\r\n return Math.ceil(x);\r\n };\r\n}\r\n//# sourceMappingURL=public_api.js.map","import { DataType, EasyDataTable } from \"@easydata/core\";\r\n\r\n/**\r\n * Represents Google data table class\r\n */\r\nexport class GoogleDataConverter {\r\n\r\n private tableObj: any;\r\n\r\n /**\r\n * The default constructor. \r\n * @param data The table instance or its JSON representation. \r\n */\r\n constructor(data?) {\r\n if (!data) {\r\n data = {\r\n cols: [],\r\n rows: []\r\n }\r\n }\r\n\r\n if (typeof data === \"string\") {\r\n this.loadFromJSON(data);\r\n }\r\n else {\r\n this.tableObj = data;\r\n }\r\n }\r\n\r\n /**\r\n * Loads data table from JSON.\r\n * @param json The JSON representation.\r\n */\r\n public loadFromJSON(json : string) {\r\n this.tableObj = JSON.parse(json);\r\n }\r\n\r\n /**\r\n * Saves data table to JSON.\r\n * @returns The JSON representation.\r\n */\r\n public toJSON() {\r\n return JSON.stringify(this.tableObj);\r\n }\r\n\r\n /**\r\n * Gets the google data table object.\r\n * @returns The data table.\r\n */\r\n public getObject() {\r\n return this.tableObj;\r\n }\r\n\r\n /**\r\n * Cheсks wether the table is empty\r\n * @returns `true` if the table is empty, `false` if it is not.\r\n */\r\n public isEmpty() : boolean {\r\n return this.getNumberOfColumns() == 0 || this.getNumberOfRows() == 0;\r\n }\r\n\r\n /**\r\n * Gets the number of columns\r\n * @returns The number.\r\n */\r\n public getNumberOfColumns(): number {\r\n return this.tableObj.cols.length;\r\n }\r\n\r\n /**\r\n * Gets the column object.\r\n * @param colIndex The column index.\r\n * @returns The column object.\r\n */\r\n public getColumnObject(colIndex: number) {\r\n return colIndex < this.tableObj.cols.length ? this.tableObj.cols[colIndex] : null;\r\n }\r\n\r\n /**\r\n * Gets the column ID.\r\n * @param colIndex The column index.\r\n * @returns The column ID.\r\n */\r\n public getColumnId(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.id : null;\r\n }\r\n\r\n /**\r\n * Gets the column LABEL.\r\n * @param colIndex The column index.\r\n * @returns The column ID.\r\n */\r\n public getColumnLabel(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.label : null;\r\n }\r\n\r\n /**\r\n * Gets the column type.\r\n * @param colIndex The column index.\r\n * @returns The column type.\r\n */\r\n public getColumnType(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.type : null;\r\n }\r\n\r\n /**\r\n * Gets the column properties.\r\n * @param colIndex The column index.\r\n * @returns The column properties.\r\n */\r\n public getColumnProperties(colIndex: number) {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.p : null;\r\n }\r\n\r\n /**\r\n * Gets the number of rows.\r\n * @returns The number.\r\n */\r\n public getNumberOfRows(): number {\r\n return this.tableObj.rows.length;\r\n }\r\n\r\n\r\n private convertValue(value: any, colIndex: number) {\r\n const colType: DataType = this.googleDataTypeToDataType(this.getColumnType(colIndex));\r\n\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].includes(colType)) {\r\n return eval(`new ${value}`)\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Gets the value.\r\n * @param rowIndex \r\n * @param colIndex \r\n */\r\n public getValue(rowIndex: number, colIndex: number) {\r\n const row = rowIndex < this.tableObj.rows.length ? this.tableObj.rows[rowIndex] : null;\r\n if (row) {\r\n const cell = colIndex < this.tableObj.cols.length ? row.c[colIndex] : null;\r\n if (cell) {\r\n return this.convertValue(cell.v, colIndex);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getRow(rowIndex: number): any[] {\r\n const googleRow = rowIndex < this.tableObj.rows.length ? this.tableObj.rows[rowIndex] : null;\r\n const googleCells = googleRow.c as any[];\r\n\r\n const row = googleCells.map((obj, idx) => this.convertValue(obj.v, idx), this);\r\n return row;\r\n }\r\n\r\n public convertTo(dataTable : EasyDataTable) {\r\n const colCount = this.getNumberOfColumns();\r\n for (let i = 0; i < colCount; i++) {\r\n dataTable.columns.add({\r\n id: this.getColumnId(i),\r\n label: this.getColumnLabel(i),\r\n type: this.googleDataTypeToDataType(this.getColumnType(i))\r\n })\r\n }\r\n\r\n const rowCount = this.getNumberOfRows();\r\n for (let i = 0; i < rowCount; i++) {\r\n dataTable.addRow(this.getRow(i));\r\n }\r\n }\r\n\r\n private googleDataTypeToDataType(googleDataType: string) : DataType {\r\n switch (googleDataType) {\r\n case 'string':\r\n return DataType.String;\r\n case 'number':\r\n return DataType.Float;\r\n case 'boolean':\r\n return DataType.Bool; \r\n case 'date':\r\n return DataType.Date;\r\n case 'datetime':\r\n return DataType.DateTime; \r\n case 'timeofday':\r\n return DataType.Time; \r\n default:\r\n return DataType.String;\r\n }\r\n }\r\n}","/**\r\n * Defines the structure of the token returned by `FormatParser`\r\n */\r\nexport interface FormatToken {\r\n type : string; //!!!!!!!!!!!!!!! TODO: replace with enum\r\n text?: string;\r\n index? : number;\r\n}\r\n\r\n/**\r\n * Represents a parser for format expressions in operators \r\n */\r\nexport class FormatParser {\r\n private formatStr: string;\r\n private pos: number;\r\n private exprNum: number;\r\n \r\n private tokenText: string;\r\n private token: string;\r\n\r\n constructor(format: string) {\r\n this.start(format);\r\n }\r\n\r\n /**\r\n * Starts parsing of the format string passed in the parameter\r\n * @param format \r\n */\r\n public start(format: string) {\r\n this.formatStr = format;\r\n this.pos = 0;\r\n this.exprNum = 0;\r\n this.tokenText = '';\r\n }\r\n\r\n /**\r\n * Skips all spcaes till the beginning of next token\r\n */\r\n public skipSpaces() {\r\n while (this.pos < this.formatStr.length && this.formatStr.charAt(this.pos) === ' ') this.pos++;\r\n }\r\n\r\n /**\r\n * Scans the source and gets the next token\r\n */\r\n public next() {\r\n this.skipSpaces();\r\n if (this.pos >= this.formatStr.length) return false;\r\n\r\n var npos = 0;\r\n if (this.formatStr.charAt(this.pos) === '{') {\r\n npos = this.formatStr.indexOf('}', this.pos);\r\n if (npos < 0) return false;\r\n this.tokenText = this.formatStr.substring(this.pos, npos+1);\r\n if (this.tokenText.indexOf('{expr') === 0) {\r\n this.token = 'expression';\r\n this.exprNum = parseInt(this.tokenText.substring(5, this.tokenText.length));\r\n }\r\n this.pos = npos + 1;\r\n }\r\n else if (this.formatStr.charAt(this.pos) === '[' && this.pos < this.formatStr.length-1 && this.formatStr.charAt(this.pos+1) === '[') {\r\n this.pos += 2;\r\n npos = this.formatStr.indexOf(']]', this.pos);\r\n this.token = 'operator';\r\n this.tokenText = this.formatStr.substring(this.pos, npos);\r\n this.pos = npos + 2;\r\n }\r\n else {\r\n this.token = 'text';\r\n var npos1 = this.formatStr.indexOf('{', this.pos);\r\n if (npos1 < 0) npos1 = this.formatStr.length;\r\n var npos2 = this.formatStr.indexOf('[[', this.pos);\r\n if (npos2 < 0) npos2 = this.formatStr.length;\r\n npos = Math.min(npos1, npos2);\r\n this.tokenText = this.formatStr.substring(this.pos, npos).trim();\r\n this.pos = npos;\r\n }\r\n return true;\r\n } \r\n \r\n /**\r\n * Returns current token\r\n */\r\n public getToken() : FormatToken {\r\n return {\r\n type: this.token,\r\n text: this.tokenText,\r\n index: this.exprNum - 1\r\n };\r\n }\r\n\r\n /**\r\n * Parses all source string passed in constructor and returns the list of tokens\r\n */\r\n public parse() : FormatToken[] {\r\n let result:FormatToken[] = [];\r\n while (this.next()) {\r\n result.push(this.getToken());\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/** Represents type of linking of conditions in group (predicate).*/\r\nexport enum LinkType {\r\n /**\r\n * None of the conditions must be truth (all must be false).\r\n * In SQL it will look like: `NOT (Condition1 OR Condition2 OR ...)`.\r\n */\r\n None = 0,\r\n\r\n /** At least one condition must be truth. In SQL they are connected by `OR` operator.*/\r\n Any = 1,\r\n \r\n /** \r\n * Not all conditions must be truth (at least one must false). \r\n * In SQL it will look like: `NOT(Condition1 AND Condition2 AND ...)`.\r\n */\r\n NotAll = 2,\r\n\r\n /** All conditions must be truth, in result SQL they are connected by `AND` operator;*/ \r\n All = 3\r\n}","import { DataType } from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\n\r\nimport { FormatParser, FormatToken} from \"./format_parser\";\r\nimport { LinkType } from '../types/link_type';\r\n\r\nexport namespace equtils {\r\n /**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1 \r\n * @param path2 \r\n */\r\n export function combinePath (path1: string, path2: string): string {\r\n let result = path1;\r\n if (result != null && result.length > 0) {\r\n\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Converts a string to a `LinkType` value\r\n * @param str \r\n */\r\n export function strToLinkType(str: string): LinkType {\r\n if (str == \"All\") {\r\n return LinkType.All;\r\n }\r\n else if (str == \"NotAll\") {\r\n return LinkType.NotAll;\r\n }\r\n else if (str == \"Any\") {\r\n return LinkType.Any;\r\n }\r\n else {\r\n return LinkType.None;\r\n }\r\n }\r\n \r\n /**\r\n * Converts a `LinkType` value to a string\r\n * @param type \r\n */\r\n export function linkTypeToStr(type: LinkType): string {\r\n if (type === LinkType.All) {\r\n return \"All\";\r\n }\r\n else if (type === LinkType.NotAll) {\r\n return \"NotAll\";\r\n }\r\n else if (type == LinkType.Any) {\r\n return \"Any\";\r\n }\r\n else {\r\n return \"None\";\r\n }\r\n }\r\n\r\n /**\r\n * Parses the operator's format string and returns a list of tokens \r\n * @param operator \r\n */\r\n export function parseOperatorFormat(operator) : FormatToken[] {\r\n let format = i18n.getText('Operators', operator.id, 'format');\r\n if (!format) {\r\n format = i18n.getText('Operators', operator.id, 'displayFormat');\r\n }\r\n if (!format) {\r\n format = operator.displayFormat;\r\n }\r\n\r\n const parser = new FormatParser(format);\r\n return parser.parse();\r\n }\r\n\r\n //----------- value converstion utils --------------\r\n\r\n /**\r\n * Converts a value from one DataType to another \r\n * @param value \r\n * @param fromDataType - the original data type\r\n * @param toDataType - the data type we want to get\r\n */\r\n export function convertValue(value : string, fromDataType : DataType, toDataType: DataType) : string {\r\n switch (toDataType) {\r\n case DataType.String:\r\n return value;\r\n case DataType.Autoinc, DataType.Byte, DataType.Int32, DataType.Int64, DataType.Word:\r\n let resInt = parseInt(value);\r\n return isNaN(resInt) ? '' : resInt.toString();\r\n case DataType.Currency, DataType.Float:\r\n let resFloat = parseFloat(value);\r\n return isNaN(resFloat) ? '' : resFloat.toString();\r\n default:\r\n return ''; \r\n }\r\n }\r\n}","export namespace eqconsts {\r\n \r\n /**\r\n * Represents a constant with some default value\r\n */\r\n export interface ConstValue {\r\n id: string;\r\n key: string;\r\n isDefault?: boolean;\r\n }\r\n\r\n /**\r\n * Defines some commonly used constants\r\n */\r\n class ConstLists {\r\n /**\r\n * Contains macros for the special dates (like Today, First day of the month, etc)\r\n */\r\n public SpecDateValues: Array<ConstValue> = [\r\n { id: '${Today}', key: 'Today', isDefault: true },\r\n { id: '${Yesterday}', key: 'Yesterday' },\r\n { id: '${Tomorrow}', key: 'Tomorrow' },\r\n { id: '${FirstDayOfMonth}', key: 'FirstDayOfMonth' },\r\n { id: '${FirstDayOfYear}', key: 'FirstDayOfYear' }\r\n ];\r\n\r\n /**\r\n * Contains macros for the special times (like Now, Noon, etc)\r\n */\r\n public SpecTimeValues: Array<ConstValue> = [\r\n { id: '${Now}', key: 'Now', isDefault: true },\r\n { id: '${HourStart}', key: 'HourStart' },\r\n { id: '${Midnight}', key: 'Midnight' },\r\n { id: '${Noon}', key: 'Noon' }\r\n ];\r\n\r\n /**\r\n * Boolean values macros (true and false)\r\n */\r\n public BooleanValues: Array<ConstValue> =[\r\n { id: '${false}', key: 'False' },\r\n { id: '${true}', key: 'True', isDefault: true }\r\n ];\r\n } \r\n\r\n /**\r\n * Contains some constants (macros) with special date/time and boolean values.\r\n */\r\n export let constLists = new ConstLists();\r\n\r\n\r\n /**\r\n * Constants representing various types of relationships between conditions\r\n */\r\n export let predicateLinkTypeList: Array<ConstValue> = [\r\n { id: 'All', key: 'LinkTypeAll' },\r\n { id: 'Any', key: 'LinkTypeAny' },\r\n { id: 'None', key: 'LinkTypeNone' },\r\n { id: 'NotAll', key: 'LinkTypeNotAll' }\r\n ]\r\n}","import { DataType, utils } from '@easydata/core';\r\nimport { AggrFuncData } from './dto/af_data'\r\n\r\n/**\r\n * Represents an aggregate function\r\n */\r\nexport class AggrFunction {\r\n\r\n /** \r\n * The function id. \r\n * (e.g. `SUM` or `COUNT`)\r\n */\r\n public id: string;\r\n\r\n /** The caption of the aggregate function. */\r\n public caption: string;\r\n\r\n /** The SQL expression */\r\n public sqlExpr: string;\r\n\r\n /** The display format of aggregate function. */\r\n public displayFormat: string;\r\n\r\n public appliedTypes: DataType[];\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.id = \"\";\r\n this.caption = \"\";\r\n this.sqlExpr = \"\";\r\n this.displayFormat = \"\";\r\n this.appliedTypes = [];\r\n }\r\n\r\n /**\r\n * Loads an aggregate function from its JSON representation object\r\n * @param aggrFunction The JSON representation object\r\n */\r\n public loadFromData(aggrFunction: AggrFuncData) {\r\n if (aggrFunction){\r\n this.id = aggrFunction.id;\r\n this.caption = aggrFunction.cptn;\r\n this.displayFormat = aggrFunction.fmt;\r\n this.sqlExpr = aggrFunction.expr;\r\n this.appliedTypes = aggrFunction.dtypes || this.appliedTypes;\r\n } \r\n }\r\n\r\n public getAppliedTypesOrDefault(): DataType[] {\r\n if (this.appliedTypes.length > 0)\r\n return this.appliedTypes;\r\n\r\n if (this.id === 'SUM' || this.id === 'AVG') {\r\n return [DataType.Autoinc, DataType.Byte, DataType.Currency, DataType.Float, DataType.Int32,\r\n DataType.Int64, DataType.Word];\r\n }\r\n else if (this.id === 'MIN' || this.id === 'MAX') {\r\n return [DataType.Autoinc, DataType.BCD, DataType.Byte, DataType.Currency, DataType.Date, DataType.DateTime, DataType.Time,\r\n DataType.Float, DataType.Int32, DataType.Int64, DataType.Word];\r\n }\r\n\r\n return utils.getAllDataTypes();\r\n }\r\n}\r\n","import { DataType, ValueEditor } from '@easydata/core';\r\n\r\nimport { EqEditorTag } from '../types/eq_editor_tag';\r\nimport { ValueEditorData } from './dto/ve_data';\r\n\r\n/**\r\n * Represents a value editor.\r\n */\r\nexport class EqValueEditor extends ValueEditor {\r\n\r\n public tag: EqEditorTag;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(data: ValueEditorData) {\r\n\r\n super.loadFromData(data);\r\n \r\n if (data) {\r\n if (data.sql) {\r\n this.statement = data.sql;\r\n }\r\n if (data.extraParams) {\r\n this.extraParams = data.extraParams;\r\n }\r\n }\r\n }\r\n}\r\n","/** Represents expression kinds.*/\r\nexport enum DataKind {\r\n\t/** Represents one value of some type: one constant or one attribute (field).*/\r\n Scalar = 0, \r\n /** The same as Scalar but represents only one constant value of some type.*/\r\n Const = 1, \r\n /** The same as Scalar but represents only one attribute.*/\r\n Attribute = 2,\r\n /** Represents a list of scalar values. */\r\n List = 4, \r\n /** Special expression kind which represents a sub query.*/\r\n Query = 5,\r\n /** Special expression kind which represents a binding to parent column.*/\r\n ParentColumn = 6\r\n}\r\n","import { DataType, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { EqValueEditor } from './value_editor';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { DataKind } from '../types/data_kind';\r\nimport { OperatorData, OperandData } from './dto/operator_data';\r\n\r\n/**\r\n * Represents a logical expression or predicate, like comparisions or `LIKE` predicate.\r\n */\r\nexport class Operator {\r\n\r\n /** The operator ID. */\r\n public id: string;\r\n\r\n /** The operator caption. */\r\n public caption: string;\r\n\r\n /** The display format of operator. */\r\n public displayFormat: string;\r\n\r\n /** \r\n * The value indicating whether this operator requires range values so first value must be less than the second one. \r\n */\r\n public isRange: boolean;\r\n\r\n /**\r\n * The value indicating whether the operator is case insensative.\r\n */\r\n public caseIns: boolean;\r\n\r\n /**\r\n * The number of parameters which are taken by the operator.\r\n */\r\n public paramCount: number;\r\n\r\n /*The defaults settings of operator operands.*/\r\n public defaultOperand: Operand;\r\n\r\n /** The operands for this operator. */\r\n public operands: Operand[];\r\n\r\n public expr: string;\r\n\r\n public constValueFormat: string;\r\n\r\n public appliedTypes: DataType[];\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.id = \"\";\r\n this.expr = \"\";\r\n this.constValueFormat = \"{const}\"\r\n this.caption = \"{Unrecognized operator}\";\r\n this.displayFormat = \"{expr1} [[{unrecognized operator}]] {expr2}\";\r\n this.isRange = false;\r\n this.caseIns = false;\r\n this.paramCount = 2;\r\n this.defaultOperand = new Operand();\r\n this.appliedTypes = [];\r\n this.operands = new Array<Operand>();\r\n }\r\n\r\n /**\r\n * Loads operator from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: OperatorData) {\r\n\r\n if (data) {\r\n this.id = data.id;\r\n this.caption = data.cptn;\r\n this.caseIns = data.caseIns;\r\n this.isRange = data.isRange;\r\n\r\n this.displayFormat = data.fmt;\r\n this.paramCount = data.pcnt;\r\n\r\n this.expr = data.expr;\r\n\r\n this.appliedTypes = data.dtypes || this.appliedTypes;\r\n\r\n if (data.defOperand) {\r\n this.defaultOperand.loadFromData(model, data.defOperand);\r\n }\r\n\r\n if (data.editor) {\r\n this.defaultOperand.editor = model.getEditorById(data.editor) || new EqValueEditor();\r\n }\r\n\r\n if (data.operands) {\r\n for (let i = 0; i < data.operands.length; i++) {\r\n let newOperand = new Operand();\r\n newOperand.loadFromData(model, data.operands[i])\r\n\r\n if (data.editor) {\r\n newOperand.editor = model.getEditorById(data.editor) || new EqValueEditor();\r\n }\r\n\r\n this.operands.push(newOperand);\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Represents one operand in some operator's expression\r\n */\r\nexport class Operand {\r\n\r\n /**\r\n * The kind of operand (`scalar`, `list`, etc)\r\n */\r\n public kind: DataKind;\r\n\r\n /**\r\n * The type of the data.\r\n */\r\n public dataType: DataType;\r\n\r\n /**\r\n * The value editor associated with this operand.\r\n */\r\n public editor: EqValueEditor;\r\n\r\n /**\r\n * The default value for this operand.\r\n */\r\n public defValue: string;\r\n\r\n /**\r\n * The text for default operand value.\r\n */\r\n public defText: string;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.kind = DataKind.Scalar;\r\n this.dataType = DataType.Unknown;\r\n this.editor = new EqValueEditor();\r\n this.defValue = \"\";\r\n }\r\n\r\n /**\r\n * Loads operand from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, operand: OperandData) {\r\n\r\n this.kind = operand.kind;\r\n this.dataType = operand.dtype;\r\n this.defValue = operand.val;\r\n this.defText = operand.txt;;\r\n\r\n if (operand.editor) {\r\n this.editor = model.getEditorById(operand.editor) || new EqValueEditor();\r\n }\r\n }\r\n\r\n /** \r\n * Copies operand from other operand. \r\n * @param scr The operand.\r\n */\r\n public copyFrom(src : Operand) : void {\r\n dataUtils.assign(this, src);\r\n }\r\n}","import { MetaEntity, MetaEntityAttr } from '@easydata/core';\r\n\r\nimport { QueryParam } from '../common/query_param';\r\nimport { DataModel } from '../dm/data_model';\r\n\r\nimport { EntityData, EntityAttrData } from './dto/entity_data';\r\n\r\n/**\r\n * Represents one entity.\r\n */\r\nexport class Entity extends MetaEntity {\r\n\r\n /** The endpoint of entity. It is used for odata or graphql brokers */\r\n public endpoint?: string;\r\n \r\n /** The value indicating whether the attribute can be used in query conditions. */\r\n public useInConditions: boolean;\r\n\r\n /** \r\n * The value indicating whether the attribute can be used in result columns (`SELECT` clause). \r\n */\r\n public useInResult: boolean;\r\n\r\n /**\r\n * The value indicating whether the attribute can be used in sorting.\r\n */\r\n public useInSorting: boolean;\r\n\r\n\r\n public subEntities: Array<Entity>;\r\n\r\n public attributes: Array<EntityAttr>;\r\n\r\n /** The default constructor. */\r\n constructor(parent?: Entity) {\r\n super(parent);\r\n this.useInConditions = false;\r\n this.useInResult = false;\r\n this.useInSorting = false;\r\n }\r\n\r\n\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: EntityData) {\r\n\r\n super.loadFromData(model, data)\r\n if (data) {\r\n this.useInConditions = data.uic;\r\n this.useInResult = data.uir;\r\n this.useInSorting = data.uis;\r\n } \r\n }\r\n\r\n \r\n public scan(processAttribute?: (attr: EntityAttr, opts: any) => void , \r\n processEntity?: (entity: Entity, opts: any) => void): void {\r\n super.scan(\r\n (attr, opts) => processAttribute && processAttribute(attr as EntityAttr, opts), \r\n (entity, opts) => processEntity && processEntity(entity as Entity, opts)\r\n );\r\n }\r\n \r\n}\r\n\r\n/**\r\n * Represents entity attribute.\r\n */\r\nexport class EntityAttr extends MetaEntityAttr {\r\n\r\n /** The value indicating whether the attribute can be used in query conditions. */\r\n public useInConditions: boolean;\r\n\r\n /** \r\n * The value indicating whether the attribute can be used in result columns (`SELECT` clause). \r\n */\r\n public useInResult: boolean;\r\n\r\n /**\r\n * The value indicating whether the attribute can be used in sorting.\r\n */\r\n public useInSorting: boolean;\r\n\r\n /**\r\n * The default operator.\r\n */\r\n public defaultOperator: string;\r\n\r\n /**\r\n * The list of operators which can be applied for this attribute.\r\n */\r\n public operators: string[];\r\n\r\n /**\r\n * The parameters associated with this entity attribute\r\n */\r\n public params: QueryParam[] = [];\r\n\r\n /**\r\n * The parent\r\n */\r\n public entity: Entity;\r\n\r\n /** The default constructor. */\r\n constructor(entity: Entity) {\r\n super(entity);\r\n this.useInConditions = true;\r\n this.useInResult = true;\r\n this.useInSorting = true;\r\n this.defaultOperator = \"\";\r\n this.operators = new Array<string>();\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n }\r\n\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: EntityAttrData) {\r\n\r\n super.loadFromData(model, data);\r\n\r\n if (data) {\r\n \r\n this.useInConditions = data.uic;\r\n this.useInResult = data.uir;\r\n this.useInSorting = data.uis;\r\n this.expr = data.sql;\r\n this.defaultOperator = data.defOperator;\r\n this.operators = data.ops;\r\n\r\n if (data.udata)\r\n this.userData = data.udata;\r\n \r\n }\r\n }\r\n}\r\n","import { EditorTag } from \"@easydata/core\";\r\n\r\n/** Represents editor tags*/\r\nexport const EqEditorTag = {\r\n\r\n ...EditorTag,\r\n\r\n /** SqlList tag value */\r\n SqlList: \"SQLLIST\",\r\n\r\n /** SubQuery tag value */\r\n SubQuery: \"SUBQUERY\",\r\n\r\n /** Bind to parent column tag value */\r\n BindToParentColumn: \"BINDTOPARENTCOLUMN\"\r\n}\r\n\r\nexport type EqEditorTag = (typeof EqEditorTag)[keyof typeof EqEditorTag];\r\n","/** Contains several constant definitions for expressions tag */\r\nexport enum ExprTag { \r\n /** Unknown expression */\r\n Unknown = 0,\r\n\r\n /** Constant expression */\r\n Constant = 1,\r\n\r\n /** Entity attributre expression */\r\n EntityAttribute = 2,\r\n\r\n /** Parent entity attribute expression */\r\n ParentEntityAttribute = 3,\r\n\r\n /** Agrregate function expression */\r\n AggregateFunction = 4,\r\n\r\n /** Parent column expression */\r\n ParentColumn = 5,\r\n\r\n /** Query expression */\r\n Query = 11,\r\n\r\n /** Custom sql expression */\r\n CustomSql = 21\r\n}","export class Tree<T> {\r\n\r\n public childs: Tree<T>[] = [];\r\n\r\n public value: T = null;\r\n\r\n public parent: Tree<T> = null;\r\n\r\n constructor(value: T | T[] | Tree<T> = null) {\r\n\r\n if (value) {\r\n\r\n if (Array.isArray(value)) {\r\n this.value = value[0];\r\n if (value.length > 1) {\r\n this.addChild(new Tree(value.slice(1)));\r\n }\r\n\r\n } else if (value instanceof Tree) {\r\n this.value = value.value;\r\n this.childs = value.childs;\r\n } else {\r\n this.value = value;\r\n }\r\n }\r\n }\r\n\r\n public contains(value: T): boolean {\r\n if (this.value === value)\r\n return true;\r\n\r\n for(let child of this.childs) {\r\n if (child.contains(value))\r\n return true;\r\n }\r\n \r\n return false;\r\n }\r\n\r\n public findNode(value: T): Tree<T> | null {\r\n if (this.value === value)\r\n return this;\r\n\r\n for(let child of this.childs) {\r\n let result = child.findNode(value);\r\n if (result)\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addChild(child: Tree<T>) {\r\n child.parent = this;\r\n this.childs.push(child);\r\n }\r\n\r\n public setParents() {\r\n for(let child of this.childs) {\r\n child.parent = this;\r\n child.setParents();\r\n }\r\n }\r\n}","import { DataType, MetaData, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\nimport { AggrFunction } from './aggr_function'\r\nimport { Operator, Operand } from './operator'\r\nimport { Entity, EntityAttr } from './entity'\r\nimport { EqValueEditor } from './value_editor'\r\nimport { Link } from './link'\r\nimport { DataKind } from '../types/data_kind'\r\nimport { EqEditorTag } from '../types/eq_editor_tag'\r\nimport { Query } from '../query/query'\r\nimport { ModelPlainData } from './dto/dm_data' \r\nimport { Condition } from '../query/condition'\r\nimport { Expression } from '../query/expression'\r\nimport { ExprTag } from '../types/expr_tag'\r\nimport { Tree } from '../common/tree'\r\n\r\n/**\r\n * Operator descriptor.\r\n */\r\nexport interface OperatorDescriptor {\r\n id: string,\r\n expr?: string,\r\n format: string,\r\n caption: string,\r\n paramCount?: number,\r\n kind?: DataKind,\r\n appliedTypes?: DataType[]\r\n}\r\n\r\n/**\r\n * Represents a data model\r\n */\r\nexport class DataModel extends MetaData {\r\n \r\n\r\n /**The list of operators. */\r\n public operators: Operator[];\r\n\r\n /** The root entity. */\r\n public rootEntity: Entity;\r\n\r\n /** The list of aggregate functions. */\r\n public aggrFunctions: AggrFunction[];\r\n\r\n /** The list of value editors. */\r\n public editors: EqValueEditor[];\r\n\r\n /** The list of links. It is used in odata broker. */\r\n public links: Link[];\r\n\r\n private dateMacros: string[];\r\n private timeMacros: string[];\r\n\r\n protected mainEntity: Entity | null = null;\r\n\r\n public readonly nullAttribute: EntityAttr;\r\n public readonly nullOperator: Operator;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n super();\r\n\r\n this.nullAttribute = new EntityAttr(null);\r\n this.nullOperator = new Operator();\r\n\r\n this.operators = new Array<Operator>();\r\n this.rootEntity = new Entity();\r\n this.aggrFunctions = new Array<AggrFunction>();\r\n \r\n this.dateMacros = ['Today', 'Yesterday',\r\n 'Tomorrow', 'FirstDayOfMonth', 'LastDayOfMonth',\r\n 'FirstDayOfWeek', 'FirstDayOfYear', 'FirstDayOfNextWeek', 'FirstDayOfPrevMonth',\r\n 'FirstDayOfNextMonth', 'FirstDayOfNextYear', 'FirstDayOfPrevYear', 'FirstDayOfPrevWeek'];\r\n\r\n this.timeMacros = ['Now', 'HourStart', 'Midnight', 'Noon'];\r\n\r\n this.links = [];\r\n }\r\n\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n public getMainEntity(): Entity {\r\n return this.mainEntity;\r\n }\r\n\r\n\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n public loadFromJSON(stringJson: string) {\r\n let model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n }\r\n\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(data: ModelPlainData) {\r\n\r\n super.loadFromData(data);\r\n\r\n //Operators\r\n this.operators = new Array<Operator>();\r\n if (data.operators) { \r\n for (let i = 0; i < data.operators.length; i++) {\r\n let newOperator = new Operator();\r\n newOperator.loadFromData(this, data.operators[i]);\r\n this.operators.push(newOperator);\r\n }\r\n }\r\n\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n\r\n //Aggr Functions\r\n this.aggrFunctions = new Array<AggrFunction>();\r\n if (data.aggrfuncs) {\r\n for (let i = 0; i < data.aggrfuncs.length; i++) {\r\n let newAggrFunc = new AggrFunction();\r\n newAggrFunc.loadFromData(data.aggrfuncs[i]);\r\n this.aggrFunctions.push(newAggrFunc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the data model object.\r\n * @returns Tha data model.\r\n */\r\n public getObject(): DataModel {\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n public setData(model: ModelPlainData | string) {\r\n\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Creates entity.\r\n * @param parent The parent entity.\r\n * @returns The Entity.\r\n */\r\n public createEntity(parent?: Entity): Entity {\r\n return new Entity(parent);\r\n }\r\n\r\n /**\r\n * Creates entity attribute.\r\n * @param parent The parent entity.\r\n * @returns The entity attribute.\r\n */\r\n public createEntityAttr(parent?: Entity): EntityAttr {\r\n return new EntityAttr(parent);\r\n }\r\n \r\n\r\n /**\r\n * Creates query.\r\n * @returns The Query.\r\n */\r\n public createQuery(): Query {\r\n return new Query(this);\r\n }\r\n\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n public getRootEntity(): Entity {\r\n return this.rootEntity;\r\n }\r\n\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n public getEditorById(editorId: string): EqValueEditor | null {\r\n return super.getEditorById(editorId);\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n public getAttributeById(attrId: string): EntityAttr | null {\r\n let attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `nullAttribute`.\r\n */\r\n public getAttributeByIdSafe(attrId): EntityAttr {\r\n const attr = this.getAttributeById(attrId);\r\n if (!attr)\r\n return this.nullAttribute;\r\n return attr;\r\n }\r\n\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n public checkAttrProperty(attrId: string, propName: string) : boolean {\r\n let attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity \r\n * @param attrId \r\n * @returns The attribute or `null`.\r\n */\r\n public getEntityAttrById(entity: Entity, attrId: string): EntityAttr | null {\r\n return super.getEntityAttrById(entity, attrId) as EntityAttr;\r\n }\r\n\r\n private _listByEntityWithFilter(entity: Entity, filterFunc: (ent: Entity, attr: EntityAttr) => boolean): Entity[] {\r\n let result = new Array<Entity>();\r\n\r\n let caption;\r\n\r\n let ent = null;\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n let newEnt = dataUtils.assign(new Entity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this._listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n\r\n let attr = null;\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n\r\n let newEnt = dataUtils.assign(new Entity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _listByEntity(entity: Entity, opts, filterFunc: (ent: Entity, attr: EntityAttr) => boolean) {\r\n opts = opts || {};\r\n let resultEntities = [];\r\n let resultAttributes = [];\r\n\r\n let caption: string;\r\n\r\n let ent: Entity = null;\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n if (opts.addUIC !== false && ent.useInConditions !== false ||\r\n opts.addUIR !== false && ent.useInResult !== false ||\r\n opts.addUIS !== false && ent.useInSorting !== false) {\r\n \r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n let newEnt = dataUtils.assign(new Entity(), { \r\n id: ent.name, \r\n text: caption, \r\n items: [], \r\n isEntity: true, \r\n description: ent.description \r\n });\r\n let newOpts = dataUtils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this._listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n let attr:EntityAttr = null;\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n if (opts.addUIC !== false && attr.useInConditions!== false ||\r\n opts.addUIR !== false && attr.useInResult !== false ||\r\n opts.addUIS !== false && attr.useInSorting !== false) {\r\n \r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(dataUtils.assign(new EntityAttr(entity), { id: attr.id, text: caption, dataType: attr.dataType, lookupAttr: attr.lookupAttr, description: attr.description }));\r\n } \r\n }\r\n }\r\n }\r\n\r\n let sortCheck = (a, b): number => {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) { return 0; }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n }\r\n\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n\r\n let result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Clears data model.\r\n */\r\n public clear() {\r\n super.clear();\r\n this.operators = [];\r\n this.aggrFunctions = [];\r\n }\r\n\r\n /**\r\n * Add or update an operator.\r\n * @param desc The operator descriptor.\r\n * @returns The operator.\r\n */\r\n public addOrUpdateOperator(desc: OperatorDescriptor): Operator {\r\n let op = dataUtils.findItemById(this.operators, desc.id);\r\n if (!op) {\r\n op = new Operator();\r\n op.id = desc.id; \r\n this.operators.push(op);\r\n }\r\n\r\n op.caption = desc.caption;\r\n op.expr = desc.expr || '';\r\n op.displayFormat = desc.format;\r\n\r\n op.defaultOperand = new Operand();\r\n op.defaultOperand.kind = desc.kind || DataKind.Scalar;\r\n\r\n if (desc.appliedTypes)\r\n op.appliedTypes = desc.appliedTypes;\r\n\r\n if (desc.paramCount > 0) {\r\n op.paramCount = desc.paramCount;\r\n }\r\n\r\n this.runThroughEntities((attr, opts) => {\r\n if (attr.operators.indexOf(op.id) < 0 && op.appliedTypes.indexOf(attr.dataType) >= 0) {\r\n attr.operators.push(op.id);\r\n }\r\n });\r\n\r\n return op;\r\n }\r\n\r\n /**\r\n * Removes an operator.\r\n * @param id The id.\r\n * @param soft If `false` - removes operators from model and attributes. Otherwise only\r\n * from attributes.\r\n */\r\n public removeOperator(id: string, soft = false) {\r\n let op = dataUtils.findItemById(this.operators, id);\r\n if (op) {\r\n if (!soft)\r\n dataUtils.removeArrayItem(this.operators, op);\r\n\r\n this.runThroughEntities((attr, opts) => {\r\n dataUtils.removeArrayItem(attr.operators, op.id);\r\n });\r\n }\r\n } \r\n\r\n /**\r\n * Get operators for data type.\r\n * @param type The data type\r\n * @return The array of operator ids.\r\n */\r\n public getOperatorIdsByDataType(type: DataType): string[] {\r\n switch (type) {\r\n case DataType.String:\r\n case DataType.Memo:\r\n return 'StartsWith,EndsWith,Contains,Equal,InList,NotStartsWith,NotEndsWith,NotContains,NotEqual,NotInList,IsNull,IsNotNull'.split(',');\r\n case DataType.Guid:\r\n return 'Equal,NotEqual'.split(',')\r\n case DataType.Date:\r\n case DataType.DateTime:\r\n return 'DateWithinToday,DateWithinThisWeek,DateWithinPrevWeek,DateWithinThisMonth,DateWithinPrevMonth,DateWithinThisYear,DateWithinPrevYear,DateBeforePrecise,DateAfterPrecise,DatePeriodPrecise,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Time:\r\n return 'TimeBeforePrecise,TimeAfterPrecise,TimePeriodPrecise,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Byte:\r\n case DataType.Word:\r\n case DataType.Int32:\r\n case DataType.Int64:\r\n case DataType.Float:\r\n case DataType.Currency:\r\n case DataType.BCD:\r\n case DataType.Autoinc:\r\n case DataType.Unknown:\r\n return 'Equal,Between,LessThan,LessOrEqual,GreaterThan,GreaterOrEqual,InList,NotEqual,NotBetween,NotInList,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Bool:\r\n return 'IsTrue,NotTrue'.split(',');\r\n\r\n default:\r\n const result: string[] = [];\r\n for (let op of this.operators)\r\n if (op.appliedTypes.indexOf(type) >= 0)\r\n result.push(op.id);\r\n\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Builds entities tree used in query.\r\n * @param query The query.\r\n */\r\n public buildQueryPath(query: Query): Tree<Entity> {\r\n let entity = this.mainEntity || this.rootEntity;\r\n\r\n const tree = this.createTreeNodeFromEntity(entity);\r\n tree.setParents();\r\n\r\n return tree;\r\n }\r\n\r\n private createTreeNodeFromEntity(entity: Entity): Tree<Entity> {\r\n let tree = new Tree<Entity>(entity);\r\n for(let subEnentity of entity.subEntities) {\r\n tree.addChild(this.createTreeNodeFromEntity(subEnentity));\r\n }\r\n return tree;\r\n }\r\n\r\n /**\r\n * Get Entities used in query.\r\n * @param query The query.\r\n */\r\n public getEntitiesInQuery(query: Query): Entity[] {\r\n\r\n if (query.model.id !== this.id)\r\n throw Error('Model mithmatch');\r\n \r\n const entities: Entity[] = [];\r\n \r\n const columns = query.getColumns();\r\n for(let column of columns) { \r\n if (!column.enabled)\r\n continue;\r\n this.addEntityByExpression(entities, column.expr);\r\n }\r\n\r\n const rootCond = query.getRootCondition();\r\n this.fillEntitiesByCondtionGroup(entities, rootCond);\r\n \r\n return entities;\r\n }\r\n\r\n public findAggrFunctionById(funcId: string): AggrFunction | null{\r\n for(const func of this.aggrFunctions) {\r\n if (func.id === funcId)\r\n return func;\r\n }\r\n\r\n return null\r\n }\r\n\r\n private fillEntitiesByCondtionGroup(entities: Entity[], root: Condition) {\r\n for(let condition of root.getConditions()) {\r\n if (!condition.isGroup()) {\r\n for(let expr of condition.expressions) {\r\n this.addEntityByExpression(entities, expr);\r\n if (expr.args) {\r\n for(let arg of expr.args) {\r\n this.addEntityByExpression(entities, arg);\r\n }\r\n }\r\n }\r\n } else {\r\n this.fillEntitiesByCondtionGroup(entities, condition);\r\n }\r\n }\r\n }\r\n\r\n private addEntityByExpression(entities: Entity[], expr: Expression) {\r\n\r\n if (expr.tag !== ExprTag.EntityAttribute)\r\n return;\r\n\r\n const attrId = expr.baseAttrId || expr.value;\r\n if (attrId) {\r\n const attr = this.getAttributeById(attrId);\r\n if (attr) {\r\n if (attr.entity && dataUtils.indexOfArrayItem(entities, attr.entity) < 0) {\r\n entities.push(attr.entity);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds link between two entities.\r\n * @param entityFrom The entity `from`.\r\n * @param entityTo The entity `to`.\r\n * @return The link.\r\n */\r\n public findLink(entityFrom: Entity, entityTo: Entity): Link | null {\r\n for(let link of this.links) {\r\n if (link.entityFrom == entityFrom \r\n && link.entityTo == entityTo)\r\n return link;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n /**\r\n * Get links with the entity.\r\n * @param entity The entity.\r\n * @return The link.\r\n */\r\n public getLinksByEntity(entity: Entity): Link[] {\r\n const result: Link[] = [];\r\n for(let link of this.links) {\r\n if (link.entityFrom == entity || link.entityTo == entity) {\r\n result.push(link);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function. \r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n public getEntitiesTree(opts, filterFunc?: (ent: Entity, attr: EntityAttr) => boolean) {\r\n return this._listByEntity(this.getRootEntity(), opts, filterFunc);\r\n }\r\n\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function. \r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n public getEntitiesTreeWithFilter(filterFunc) {\r\n return this._listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n }\r\n\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n public getFullEntityPathByAttr(attrId: string, sep: string) : string {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n }\r\n\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n public getEntityPathByAttr(entity: Entity, attrId: string, sep: string, root: boolean): string {\r\n return super.getEntityPathByAttr(entity, attrId, sep, root);\r\n }\r\n\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n public getAttributeText(attr: EntityAttr, format: string): string {\r\n return super.getAttributeText(attr, format);\r\n }\r\n\r\n public getFirstUICAttr(): EntityAttr {\r\n return this.getFirstUICAttrInEntity(this.getRootEntity());\r\n }\r\n\r\n /**\r\n * Gets first `UIC` attribute in specified entity\r\n * (`UIC` stands for `use in conditions` - so such attribute can be used in conditions) \r\n * @param entity Entity object to search our attribute in.\r\n * @returns The entity attribute or `null`\r\n */\r\n private getFirstUICAttrInEntity(entity: Entity): EntityAttr | null {\r\n if (entity.useInConditions !== false) {\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].useInConditions) {\r\n return entity.attributes[i];\r\n }\r\n }\r\n }\r\n\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let i = 0; i < subEntityCount; i++) {\r\n let result = this.getFirstUICAttrInEntity(entity.subEntities[i]);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n public runThroughEntities(processAttribute?: (attr: EntityAttr, opts: any) => void , processEntity?: (entity: Entity, opts: any) => void) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n }\r\n\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n public getFirstAttributeByFilter(filterFunc: (attr: EntityAttr) => boolean): EntityAttr {\r\n let res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n }\r\n\r\n /**\r\n * Finds operator in model by its ID.\r\n * This function runs through all operators inside specified model and returns the one with specified ID.\r\n * @param operatorId An operator ID.\r\n * @returns The operator or `null`.\r\n */\r\n public findOperatorById(operatorId: string): Operator | null {\r\n if(this.operators.length > 0) {\r\n let opCount = this.operators.length;\r\n for (let idx = 0; idx < opCount; idx++) {\r\n if (this.operators[idx].id == operatorId) {\r\n return this.operators[idx];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Finds operator in model by its ID.\r\n * his function runs through all operators inside specified model and returns the one with specified ID.\r\n * @param operatorId Operator ID.\r\n * @returns The operator or special `NullOperator` object if operator is not found.\r\n */\r\n public getOperatorById(operatorId: string): Operator {\r\n let op = this.findOperatorById(operatorId);\r\n if (!op) return this.nullOperator;\r\n return op;\r\n }\r\n\r\n public getDefaultOperatorIdForAttr(attr: EntityAttr): string {\r\n if(attr.defaultOperator) {\r\n return attr.defaultOperator;\r\n }\r\n else if(attr.operators.length > 0) {\r\n return attr.operators[0];\r\n }\r\n else {\r\n return this.nullOperator.id;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Gets caption of the aggregate function.\r\n * @param funcId The function id.\r\n * @returns The caption.\r\n */\r\n public getAggrFunctionCaption (funcId: string): string {\r\n let funcTexts = i18n.getText('AggregateFunctions', funcId) as any;\r\n\r\n let funcCaption = funcTexts ? funcTexts.caption : i18n.getText('Aggr' + funcId.replace(' ', '') + '_Caption');\r\n if (funcCaption) {\r\n return funcCaption;\r\n }\r\n\r\n let func = dataUtils.findItemById(this.aggrFunctions, funcId);\r\n if (!func || !func.caption) return funcId;\r\n\r\n return func.caption;\r\n }\r\n\r\n /**\r\n * Gets format of the aggregate function.\r\n * @param funcId The function id.\r\n * @returns The caption.\r\n */\r\n public getAggrFunctionFormat(funcId: string): string {\r\n let funcTexts = i18n.getText('AggregateFunctions', funcId) as any;\r\n\r\n let funcFormat = funcTexts ? funcTexts.displayFormat : i18n.getText('Aggr' + funcId.replace(' ', '') + '_Format');\r\n if (funcFormat) {\r\n return funcFormat;\r\n }\r\n\r\n let func = dataUtils.findItemById(this.aggrFunctions, funcId);\r\n if (!func || !func.displayFormat) return '';\r\n\r\n return func.displayFormat;\r\n }\r\n\r\n /**\r\n * Gets default operator for an attribute.\r\n * @param attr The attribute.\r\n * @returns The operator.\r\n */\r\n public getDefaultOperatorForAttr(attr: EntityAttr): Operator {\r\n let operatorId = this.getDefaultOperatorIdForAttr(attr);\r\n return this.getOperatorById(operatorId);\r\n }\r\n\r\n /**\r\n * Gets operand.\r\n * @param attr The attribute.\r\n * @param operator The operator.\r\n * @param index The index.\r\n * @returns The operand.\r\n */\r\n public getOperand (attr: EntityAttr, operator: Operator, index: number): Operand {\r\n\r\n let defOperand = new Operand();\r\n if (operator && operator.defaultOperand) {\r\n defOperand.copyFrom(operator.defaultOperand);\r\n if (!defOperand.defValue) {\r\n defOperand.defValue = '';\r\n }\r\n if (!defOperand.defText) {\r\n defOperand.defText = '';\r\n }\r\n }\r\n else {\r\n defOperand.kind = DataKind.Scalar;\r\n defOperand.dataType = attr.dataType;\r\n defOperand.defValue = '';\r\n defOperand.defText = '';\r\n defOperand.editor = null;\r\n }\r\n\r\n let result = defOperand;\t\t\t\r\n \r\n\r\n if (result.dataType === DataType.Unknown && attr) {\r\n result.dataType = attr.dataType;\r\n }\r\n\r\n if (operator && (index >= 0)) {\r\n if (operator.operands && operator.operands[index - 1]) {\r\n result = dataUtils.assign(result, operator.operands[index - 1]);\r\n }\r\n };\r\n\r\n if (!result.editor) {\r\n if (defOperand.editor) {\r\n result.editor = defOperand.editor;\r\n }\r\n else if (defOperand.kind === DataKind.Query) {\r\n result.editor.tag = EqEditorTag.SubQuery;\r\n }\r\n else if (attr && attr.defaultEditor) {\r\n result.editor = attr.defaultEditor\r\n }\r\n else if (result.dataType === DataType.Date || result.dataType === DataType.DateTime \r\n || result.dataType === DataType.Time) {\r\n result.editor.tag = EqEditorTag.DateTime;\r\n }\r\n else {\r\n result.editor.tag = EqEditorTag.Edit;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets the list of aggegate functions.\r\n * @returns AN array of aggregate functions.\r\n */\r\n public getAggrFunctions(): AggrFunction[] {\r\n return this.aggrFunctions;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Checks wether macro value is date.\r\n * @param macroExpr The macro value.\r\n * @retruns `true` if the macro value is date, otherwise `false`.\r\n */\r\n public isDateMacro(macroExpr: string, macroProcessor?: (macroId) => void): boolean {\r\n const match = macroExpr.match(/\\${{?(.*?)}?}/);\r\n if (match != null) {\r\n const macroId = match[1];\r\n if (dataUtils.indexOfArrayItem(this.dateMacros, macroId) >= 0) {\r\n if (macroProcessor) {\r\n macroProcessor(macroId);\r\n } \r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n \r\n /**\r\n * Checks whether the expression passed in the parameter is an time macro.\r\n * @param macroExpr The macro expression\r\n * @retruns `true` if the expression is a time macro (like Now), otherwise `false`.\r\n */\r\n public isTimeMacro(macroExpr: string, macroProcessor?: (macroId) => void): boolean {\r\n const match = macroExpr.match(/\\${{?(.*?)}?}/);\r\n if (match != null) {\r\n const macroId = match[1];\r\n if (dataUtils.indexOfArrayItem(this.timeMacros, macroId) >= 0) {\r\n if (macroProcessor) {\r\n macroProcessor(macroId);\r\n } \r\n return true;\r\n }\r\n }\r\n return false;\r\n } \r\n\r\n /**\r\n * Gets date by its macro value.\r\n * @param macroExpr The macro value.\r\n * @returns The date or `null`\r\n */\r\n public getDateMacroValue(macroExpr: string): Date | null {\r\n let d = new Date();\r\n const res = this.isDateMacro(macroExpr, macroId => {\r\n switch (macroId) {\r\n case 'Today':\r\n break;\r\n case 'Yesterday':\r\n d.setDate(d.getDate() - 1);\r\n break;\r\n case 'Tomorrow':\r\n d.setDate(d.getDate() + 1);\r\n break;\r\n case 'FirstDayOfMonth':\r\n d.setDate(1);\r\n break;\r\n case 'LastDayOfMonth':\r\n d.setMonth(d.getMonth() + 1, 0);\r\n break;\r\n case 'FirstDayOfPrevWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() - day);\r\n break;\r\n case 'FirstDayOfWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 6 : day - 1; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() - day);\r\n break;\r\n case 'FirstDayOfYear':\r\n d.setMonth(0, 1);\r\n break;\r\n case 'FirstDayOfNextWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() + day);\r\n break;\r\n case 'FirstDayOfNextMonth':\r\n d.setMonth(d.getMonth() + 1, 1);\r\n break;\r\n case 'FirstDayOfPrevMonth':\r\n d.setMonth(d.getMonth() - 1, 1);\r\n break;\r\n case 'FirstDayOfPrevYear':\r\n d.setFullYear(d.getFullYear() - 1, 0, 1);\r\n break;\r\n case 'FirstDayOfNextYear':\r\n d.setFullYear(d.getFullYear() + 1, 0, 1);\r\n break;\r\n };\r\n });\r\n\r\n return res ? d : null;\r\n }\r\n \r\n\r\n /**\r\n * Gets the date value by a macro expression of the expression itself.\r\n * @param macroExpr The macro value.\r\n * @returns The date or macro valu.\r\n */\r\n public getDateOrMacroValue(macroExpr: string): string | Date {\r\n let d = this.getDateMacroValue(macroExpr);\r\n return d ? d : macroExpr;\r\n } \r\n\r\n /**\r\n * Gets time by its macro value.\r\n * @param macroExpr The macro value.\r\n * @returns The date or `null`.\r\n */\r\n public getTimeMacroValue(macroExpr: string): Date | null {\r\n let d = new Date();\r\n const res = this.isDateMacro(macroExpr, macroId => {\r\n switch (macroId) {\r\n case 'Now':\r\n break;\r\n case 'HourStart':\r\n d.setMinutes(0, 0, 0);\r\n break;\r\n case 'Midnight':\r\n d.setHours(0, 0, 0, 0);\r\n break;\r\n case 'Noon':\r\n d.setHours(12, 0, 0, 0);\r\n break;\r\n };\r\n });\r\n\r\n return res ? d : null;\r\n }\r\n\r\n /**\r\n * Gets time or macro by macro value.\r\n * @param macroValue The macro value.\r\n * @returns The time or macro valu.\r\n */\r\n public getTimeOrMacroValue(time: string): string | Date {\r\n var t = this.getTimeMacroValue(time);\r\n return t ? t : time;\r\n }\r\n \r\n // /**\r\n // * Gets all date marcos.\r\n // * @returns The array of marcos\r\n // */\r\n public getAllDateMacros() {\r\n return this.dateMacros;\r\n }\r\n\r\n /**\r\n * Gets all time marcos.\r\n * @returns The array of marcos\r\n */\r\n public getAllTimeMacros() {\r\n return this.timeMacros;\r\n }\r\n}","import { DataType } from '@easydata/core';\r\n\r\nimport { equtils } from '../utils/utils';\r\nimport { DataKind } from '../types/data_kind'\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { ConditionPart } from '../types/cond_part';\r\n\r\nimport { DataModel } from '../dm/data_model'; \r\nimport { Query } from './query'; \r\nimport { ExpressionData } from './dto/expression_data';\r\n\r\n/**\r\n * Represents expression object.\r\n */\r\nexport class Expression {\r\n /** The tag. */\r\n public tag: ExprTag = ExprTag.Constant;\r\n\r\n /** The data kind. */\r\n public kind: DataKind = DataKind.Scalar;\r\n\r\n /** The data type. */\r\n public dataType: DataType = DataType.Unknown;\r\n\r\n /** The value. */\r\n private _value: string | any = ''; //DO NOT forget remove any\r\n\r\n /** The text. */\r\n private text: string | undefined;\r\n\r\n /** \r\n * The distinct option. (e.g `SELECT DISTINCT`) \r\n */\r\n public distinct: boolean = false;\r\n\r\n /** The query. */\r\n public subQuery?: Query;\r\n\r\n /** The function. */\r\n public func?: string;\r\n\r\n /** The list of arguments. */\r\n public args?: Expression[];\r\n\r\n /** The base attribute id. */\r\n public baseAttrId?: string;\r\n\r\n /** The sql expression.*/\r\n public sql?: string;\r\n\r\n public _isDefaultValue = false;\r\n\r\n\r\n /** The default constructor. */\r\n constructor(private parent : ExpressionParent) {\r\n this.args = new Array<Expression>();\r\n }\r\n\r\n public getParent() : ExpressionParent {\r\n return this.parent;\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.parent.getQuery().getModel();\r\n }\r\n\r\n /**\r\n * Loads expression from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: ExpressionData) {\r\n if (data) {\r\n this.tag = data.tag;\r\n\r\n if (data.val) {\r\n this._value = data.val;\r\n this.text = data.txt; \r\n }\r\n else if (data.id) {\r\n this.kind = DataKind.Attribute;\r\n this._value = data.id;\r\n this.text = data.txt; \r\n }\r\n\r\n if (typeof data.dtype !== 'undefined') {\r\n this.dataType = data.dtype;\r\n }\r\n\r\n if (this.tag == ExprTag.EntityAttribute \r\n || this.tag == ExprTag.ParentEntityAttribute) {\r\n\r\n this.kind = DataKind.Attribute;\r\n \r\n //We don't load other info for EntityAttr\r\n }\r\n else {\r\n if (typeof data.kind !== 'undefined') {\r\n this.kind = data.kind;\r\n }\r\n \r\n if (data.query) {\r\n this.subQuery = this.parent.getQuery().createSubQuery();\r\n this.subQuery.loadFromDataOrJson(data.query);\r\n }\r\n \r\n if (typeof data.distinct !== 'undefined') {\r\n this.distinct = data.distinct;\r\n } \r\n \r\n if (data.func) {\r\n this.func = data.func;\r\n if (data.args) {\r\n for (let i = 0; i < data.args.length; i++) {\r\n const arg = new Expression(this.parent);\r\n arg.loadFromData(model, data.args[i]);\r\n this.args.push(arg);\r\n }\r\n } \r\n }\r\n \r\n if (data.sql) {\r\n this.sql = data.sql;\r\n this.baseAttrId = data.baseAttrId;\r\n } \r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Saves expression from JSON representation object.\r\n * @returns The JSON representation object.\r\n */\r\n public saveToData(): ExpressionData {\r\n let obj: ExpressionData = {\r\n tag: this.tag\r\n };\r\n\r\n obj.dtype = this.dataType; \r\n\r\n //Do not save other info for EntityAttr\r\n if (this.tag == ExprTag.EntityAttribute || this.tag == ExprTag.ParentEntityAttribute) {\r\n if (this._value) {\r\n obj.id = this._value;\r\n obj.val = this._value;\r\n }\r\n \r\n if (this.text) {\r\n obj.txt = this.text; \r\n }\r\n //Do not save other info for EntityAttr\r\n }\r\n else {\r\n if (this.subQuery) {\r\n obj.query = this.subQuery.toJSONData();\r\n }\r\n \r\n if (typeof this.kind !== \"undefined\") {\r\n obj.kind = this.kind; \r\n }\r\n \r\n if (this._value) {\r\n obj.val = this._value; \r\n }\r\n \r\n if (this.text) {\r\n obj.txt = this.text; \r\n }\r\n \r\n if (this.distinct) {\r\n obj.distinct = this.distinct;\r\n }\r\n \r\n if (this.func) {\r\n obj.func = this.func;\r\n obj.args = [];\r\n for(let i = 0; i < this.args.length; i++) {\r\n obj.args.push(this.args[i].saveToData());\r\n }\r\n }\r\n \r\n if (this.sql) {\r\n obj.sql = this.sql;\r\n obj.baseAttrId = this.baseAttrId;\r\n } \r\n }\r\n\r\n\r\n return obj;\r\n }\r\n\r\n public getIndex() : number {\r\n return this.parent.getExpressionIndex(this);\r\n }\r\n\r\n public get value() : string {\r\n return this._value;\r\n }\r\n\r\n public setValue(val : string, silent = false) : void {\r\n this.setContent(val, undefined, silent);\r\n }\r\n\r\n public getText = () => this.text || this._value; \r\n\r\n public setContent(val: string, txt?: string, silent = false) { \r\n let oldValue = this.value;\r\n\r\n if (this.kind == DataKind.Attribute && val) {\r\n const attr = this.getModel().getAttributeById(val);\r\n if (!attr) {\r\n throw \"No such entity attribute:\" + val;\r\n }\r\n this.dataType = attr.dataType;\r\n } \r\n \r\n this._value = val;\r\n if (typeof txt !== 'undefined') {\r\n this.text = txt;\r\n }\r\n else if (typeof this.text !== 'undefined') {\r\n this.text = val;\r\n }\r\n\r\n this._isDefaultValue = false;\r\n \r\n if (!silent) {\r\n this.parent.expressionChanged(this, oldValue);\r\n }\r\n }\r\n\r\n public isEmpty() {\r\n return !(this.text || this._value);\r\n }\r\n\r\n public hasText() {\r\n return this.text && this.text.length > 0;\r\n }\r\n\r\n public tryCopyValueFrom(expr: Expression) {\r\n if (this.kind == expr.kind) {\r\n if (this.dataType == expr.dataType) {\r\n this.setContent(\r\n expr.value.length ? expr.value : this._value, \r\n (expr.text && expr.text.length) ? expr.text: this.text,\r\n true);\r\n }\r\n else {\r\n const val = equtils.convertValue(expr.value, expr.dataType, this.dataType);\r\n this.setContent(\r\n val.length ? val : this._value, \r\n (expr.text && expr.text.length) ? expr.text: this.text, \r\n true);\r\n }\r\n this.subQuery = expr.subQuery;\r\n this.sql = expr.sql;\r\n this.baseAttrId = expr.baseAttrId;\r\n }\r\n else if (!this._isDefaultValue) {\r\n this.setContent('', '', true);\r\n this.subQuery = null;\r\n this.sql = null;\r\n this.baseAttrId = null;\r\n }\r\n }\r\n}\r\n\r\nexport interface ExpressionParent {\r\n getQuery() : Query; \r\n enabled: boolean;\r\n isReadOnly(): boolean;\r\n fireChangedEvent(condPart?: ConditionPart) : void;\r\n getExpressionIndex(expr : Expression) : number;\r\n expressionChanged(expr : Expression, oldValue : string) : void;\r\n}\r\n","import { Condition} from './condition';\r\nimport { QueryColumn } from './query_column';\r\n\r\nexport interface QueryChangeEventData {\r\n part: QueryChangePart;\r\n action?: QueryChangeAction;\r\n changee?: QueryColumn | QueryColumn[] | Condition | Condition[];\r\n [x: string]: any;\r\n}\r\n\r\n\r\nexport interface QueryChangeEventParams extends QueryChangeEventData {\r\n postpone?: number,\r\n wasModified?: boolean;\r\n}\r\n\r\nexport enum QueryChangePart {\r\n Conditions = 1,\r\n Columns = 1 << 1,\r\n SortingColumns = 1 << 2,\r\n Properties = 1 << 5,\r\n ExtraData = 1 << 6,\r\n Facets = 1 << 7,\r\n Aggregation = 1 << 8,\r\n All = (1 << 9) - 1\r\n}\r\n\r\nexport enum QueryChangeAction {\r\n Add = 1,\r\n Modify = 2,\r\n Delete = 4,\r\n Activate = 8,\r\n All = 127\r\n}","\r\nimport { DataType, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { Query } from './query';\r\nimport { Expression, ExpressionParent } from './expression';\r\nimport { QueryParam } from '../common/query_param';\r\n\r\nimport { DataModel } from '../dm/data_model';\r\nimport { EntityAttr } from '../dm/entity';\r\n\r\nimport { QueryColumnData } from './dto/query_column_data';\r\nimport { QueryChangePart, QueryChangeAction } from './query_events';\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { type } from 'os';\r\n\r\n/** Represents sorting direction. */\r\nexport enum SortDirection {\r\n /** No sorting. */\r\n None = 0,\r\n /** Ascending order. */\r\n Ascending = 1, \r\n /** Descending order. */\r\n Descending = 2\r\n}\r\n\r\n/**\r\n * Represents some column which will be queried\r\n */\r\nexport class QueryColumn implements ExpressionParent {\r\n private _id: string;\r\n public get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** Column is enabled */\r\n public enabled: boolean = true;\r\n\r\n /** The caption. */\r\n public caption: string;\r\n\r\n /** Column sorting direction */\r\n public sorting: SortDirection;\r\n\r\n /** The index of the column in the sorting list. */\r\n public sortIndex: number;\r\n\r\n /** The column expression. */\r\n public expr: Expression;\r\n\r\n /** The parameters associated with this column */\r\n public params: QueryParam[] = [];\r\n\r\n /** The block ID. */\r\n public blockId: string;\r\n\r\n /** The display format */\r\n public displayFormat?: string;\r\n\r\n /** The group footer template */\r\n public groupFooterColumnTemlate?: string;\r\n\r\n /** the default constructor. */\r\n constructor(private query: Query, private justsorted = false) {\r\n this._id = dataUtils.generateId('col');\r\n this.caption = '';\r\n this.sorting = SortDirection.None;\r\n this.sortIndex = -1;\r\n this.expr = new Expression(this);\r\n this.blockId = '';\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.query.getModel();\r\n }\r\n\r\n public getQuery() : Query {\r\n return this.query;\r\n }\r\n\r\n /** Indicates whether this column is read-only */\r\n public isReadOnly() : boolean {\r\n return false;\r\n }\r\n\r\n /** Indicates whether this column is just-sorted */\r\n public isJustSorted(): boolean {\r\n return this.justsorted;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n //do nothing. Read-only columns are not supported here\r\n }\r\n\r\n private _isHidden: boolean = false;\r\n /** Indicates whether this column is invisible */\r\n public isHidden() : boolean {\r\n return this._isHidden;\r\n }\r\n\r\n public setHidden(value: boolean) {\r\n this._isHidden = value;\r\n }\r\n\r\n public getDataType(): DataType {\r\n if (this.expr.dataType === DataType.Unknown) {\r\n let attrId = null;\r\n if (this.expr.func) {\r\n if (this.expr.func == \"COUNT\" || this.expr.func == \"CNTDST\")\r\n return DataType.Int64;\r\n \r\n attrId = this.expr.args[0].value;\r\n }\r\n else {\r\n attrId = this.expr.value;\r\n }\r\n \r\n const attr = this.query.getModel()\r\n .getAttributeById(attrId);\r\n \r\n if (attr) return attr.dataType; \r\n }\r\n return this.expr.dataType;\r\n }\r\n\r\n /**\r\n * Loads column from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param colData The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, colData: QueryColumnData) {\r\n if (colData) {\r\n if (colData.id) {\r\n this._id = colData.id;\r\n }\r\n this.caption = colData.cptn as string;\r\n\r\n if (typeof colData.srt !== 'undefined') {\r\n this.sorting = colData.srt as SortDirection;\r\n this.sortIndex = (typeof colData.srtidx !== 'undefined')\r\n ? colData.srtidx as number\r\n : -1; \r\n }\r\n\r\n if (colData.enabled === false) {\r\n this.enabled = colData.enabled;\r\n }\r\n\r\n this.expr.loadFromData(model, colData.expr);\r\n this.blockId = colData.blockId as string;\r\n\r\n this.displayFormat = colData.dfmt;\r\n this.groupFooterColumnTemlate = colData.gfct;\r\n\r\n if (colData.hidden) {\r\n this.setHidden(true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Saves the column to a data transfer object (ready for sending to the server-side) .\r\n * @returns An plain object that represents the column.\r\n */\r\n public saveToData(): QueryColumnData {\r\n let obj: any = {};\r\n \r\n obj.id = this._id;\r\n\r\n if (typeof this.caption !== 'undefined') {\r\n obj.cptn = this.caption;\r\n }\r\n \r\n if (typeof this.sorting !== 'undefined' && this.sorting != SortDirection.None) {\r\n obj.srt = this.sorting;\r\n obj.srtidx = this.sortIndex;\r\n }\r\n\r\n obj.expr = this.expr.saveToData();\r\n if (this.blockId) {\r\n obj.blockId = this.blockId;\r\n }\r\n\r\n if (this.enabled === false) {\r\n obj.enabled = this.enabled;\r\n }\r\n\r\n obj.dfmt = this.displayFormat;\r\n obj.gfct = this.groupFooterColumnTemlate;\r\n\r\n if (this.isHidden()) {\r\n obj.hidden = true;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n public fireChangedEvent () : void {\r\n this.query.fireChangedEvent({\r\n part: (this.justsorted) \r\n ? QueryChangePart.SortingColumns \r\n : QueryChangePart.Columns,\r\n action: QueryChangeAction.Modify,\r\n changee: this\r\n });\r\n }\r\n\r\n public getExpressionIndex(expr: Expression) : number {\r\n return 0;\r\n }\r\n\r\n public expressionChanged(expr : Expression, oldValue : string) : void { \r\n }\r\n}\r\n","/**\r\n * Represents a type of condition. \r\n * Current we have 2 possible types: a simple condition or a predicate - a group of conditions\r\n*/\r\nexport enum CondTag {\r\n /** An unknown type of condition (just in case).*/\r\n Unknown = 0,\r\n /** A simple condition (e.g. SomeField > SomeValue).*/\r\n Simple = 1,\r\n /** A predicate (a group of conditions).*/\r\n Group = 51\r\n}","export enum ConditionPart {\r\n EntityAttr = 1 << 1,\r\n Operator = 1 << 2,\r\n Value = 1 << 3,\r\n All = EntityAttr | Operator | Value\r\n}","import { DataType, EditorTag, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { Expression, ExpressionParent } from './expression'\r\nimport { DataKind } from '../types/data_kind'\r\nimport { LinkType } from '../types/link_type'\r\nimport { CondTag } from '../types/cond_tag'\r\nimport { ExprTag } from '../types/expr_tag'\r\n\r\nimport { DataModel } from '../dm/data_model'\r\nimport { Operator, Operand } from '../dm/operator'\r\n\r\nimport { EntityAttr } from '../dm/entity'\r\n\r\nimport { Query } from './query'\r\nimport { ConditionData } from './dto/condition_data'\r\nimport { QueryChangePart, QueryChangeAction } from './query_events'\r\nimport { EqValueEditor } from '../dm/value_editor'\r\nimport { EqEditorTag } from '../types/eq_editor_tag'\r\nimport { ConditionPart } from '../types/cond_part'\r\n\r\n/**\r\n * Represents some condition.\r\n */\r\nexport class Condition implements ExpressionParent {\r\n\r\n protected _id: string;\r\n public get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** The condition tag. */\r\n public tag: CondTag;\r\n\r\n /** The value indicating whether this Condition is enabled. */\r\n protected _enabled: boolean;\r\n\r\n public get enabled(): boolean {\r\n return this._enabled && (!this.getParent() || this.getParent().enabled);\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n this._enabled = value && (!this.getParent() || this.getParent().enabled);\r\n this.conditions && this.conditions.forEach((cond: Condition) => {\r\n cond.enabled = value;\r\n })\r\n }\r\n\r\n\r\n /** Condition enabled option. */\r\n public justAdded: boolean;\r\n \r\n\r\n /**\r\n * The linking type.\r\n */\r\n public linkType: LinkType = LinkType.All; //only for predicates\r\n\r\n /**\r\n * The list of expression.\r\n */\r\n public expressions: Expression[];\r\n\r\n /**\r\n * The list of conditions.\r\n */\r\n protected conditions: Condition[];\r\n\r\n /**\r\n * The operator id.\r\n */\r\n private operatorId: string;\r\n\r\n /** \r\n * The block id.\r\n */\r\n public blockId: string;\r\n\r\n /**\r\n * The default constructor.\r\n * @param tag The condition tag\r\n */\r\n constructor(protected query: Query, tag? : CondTag) {\r\n this._id = dataUtils.generateId('cond');\r\n this.justAdded = false;\r\n this.tag = tag || CondTag.Unknown;\r\n this.enabled = true;\r\n this.operatorId = '';\r\n this.blockId = '';\r\n this.expressions = new Array<Expression>();\r\n this.conditions = new Array<Condition>();\r\n }\r\n\r\n public getQuery() : Query {\r\n return this.query;\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.query.getModel();\r\n }\r\n\r\n protected parent : Condition = null;\r\n\r\n public getParent() : Condition {\r\n return this.parent;\r\n }\r\n\r\n public setParent(parent : Condition): void {\r\n this.parent = parent;\r\n }\r\n\r\n public getConditions() : Condition[] {\r\n return this.conditions;\r\n }\r\n\r\n public isEmpty() : boolean {\r\n return this.conditions.length === 0;\r\n }\r\n\r\n public isGroup() : boolean {\r\n return (this.tag == CondTag.Group) || (this.parent == null);\r\n }\r\n\r\n\r\n public getLevel() : number {\r\n const parent = this.getParent();\r\n\r\n return parent ? parent.getLevel() + 1 : 0;\r\n }\r\n\r\n /** \r\n * Indicates whether this condition is read-only.\r\n */\r\n public isReadOnly(): boolean {\r\n return false;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n }\r\n\r\n /** \r\n * The value indicating whether this condition is parameterized.\r\n */\r\n public isParameterized(): boolean {\r\n return false;\r\n }\r\n\r\n public setParameterized(value : boolean) {\r\n }\r\n\r\n /** \r\n * Indicates whether this condition must be placed into `JOIN` clause in result `SQL`.\r\n */\r\n public isInJoin(): boolean {\r\n return false;\r\n }\r\n\r\n public setInJoin(value : boolean) { \r\n }\r\n\r\n public clearConditions() :void {\r\n this.conditions = [];\r\n }\r\n\r\n public addCondition(cond : Condition): number {\r\n cond.setParent(this);\r\n return this.conditions.push(cond);\r\n }\r\n\r\n public removeConditionAt(index: number) : void {\r\n this.conditions.splice(index, 1);\r\n }\r\n\r\n\r\n /**\r\n * Loads condtion from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: ConditionData) {\r\n if (data) {\r\n this.tag = data.tag;\r\n \r\n if (!this.tag) { \r\n this.tag = (!this.parent || this.conditions.length > 0) ? CondTag.Group : CondTag.Simple;\r\n }\r\n\r\n if (typeof data.enabled !== 'undefined') {\r\n this.enabled = data.enabled;\r\n }\r\n\r\n if (typeof data.disabled !== 'undefined') {\r\n this.enabled = !data.disabled;\r\n }\r\n\r\n if (this.tag == CondTag.Simple) {\r\n this.operatorId = data.op;\r\n \r\n if (data.exprs) {\r\n for (let i = 0; i < data.exprs.length; i++) {\r\n let newExpr = new Expression(this);\r\n newExpr.loadFromData(model, data.exprs[i]);\r\n this.expressions.push(newExpr);\r\n }\r\n }\r\n }\r\n\r\n this.linkType = data.linking;\r\n }\r\n }\r\n\r\n /**\r\n * Saves condition to JSON representation object.\r\n * @returns The JSON representation object.\r\n */\r\n public saveToData(): ConditionData {\r\n let obj: any = {};\r\n obj.tag = this.tag;\r\n\r\n if (!this.enabled) {\r\n obj.enabled = this.enabled;\r\n }\r\n\r\n if (this.tag == CondTag.Simple) { \r\n obj.op = this.operatorId;\r\n \r\n obj.exprs = [];\r\n for (let i = 0; i < this.expressions.length; i++) {\r\n obj.exprs.push(this.expressions[i].saveToData());\r\n } \r\n }\r\n\r\n if (this.tag == CondTag.Group){\r\n //if condition group\r\n obj.linking = this.linkType;\r\n }\r\n \r\n return obj;\r\n }\r\n\r\n public fireChangedEvent(condPart = ConditionPart.All) : void {\r\n this.query.fireChangedEvent({\r\n part: QueryChangePart.Conditions,\r\n action: QueryChangeAction.Modify,\r\n changee: this,\r\n condPart: condPart\r\n });\r\n }\r\n\r\n public getExpressionIndex(expr: Expression) : number {\r\n return this.expressions.indexOf(expr, 0);\r\n }\r\n\r\n public expressionChanged(expr : Expression, oldValue : string) : void {\r\n if (expr.getIndex() == 0 && expr.tag == ExprTag.EntityAttribute) {\r\n //this is a base entity attribute, we need to re-pack the whole condition\r\n this.tuneOperatorForAttr(expr.value);\r\n }\r\n }\r\n\r\n public getOperatorId() : string {\r\n return this.operatorId;\r\n }\r\n\r\n public setOperatorId(newOperatorId : string, silent: boolean = false) : void {\r\n const oldOperatorId = this.operatorId;\r\n this.operatorId = newOperatorId;\r\n\r\n if (!silent) {\r\n const model = this.getModel();\r\n\r\n const operator = model.getOperatorById(newOperatorId);\r\n const attrId = this.expressions[0].value;\r\n const attr = model.getAttributeById(attrId);\r\n \r\n this.tuneValueExpressions(attr, operator, attr.id, oldOperatorId); \r\n }\r\n }\r\n\r\n private tuneOperatorForAttr(oldAttrId : string) : void {\r\n const model = this.getModel();\r\n const attrId = this.expressions[0].value;\r\n const attr = model.getAttributeById(attrId);\r\n if (attr != null) {\r\n let newOperator = this.getModel().getDefaultOperatorForAttr(attr);\r\n let oldOperatorId = this.operatorId;\r\n this.operatorId = newOperator.id;\r\n this.tuneValueExpressions(attr, newOperator, oldAttrId, oldOperatorId); \r\n }\r\n }\r\n\r\n private tuneValueExpressions(attr: EntityAttr, operator : Operator, oldAttrId : string, oldOperatorId : string) : void {\r\n const model = this.getModel();\r\n\r\n if (!operator) return;\r\n\r\n let exprCount = this.expressions.length;\r\n\r\n let oldAttr = oldAttrId ? model.getAttributeById(oldAttrId) : null;\r\n\r\n let oldOperator: Operator = null;\r\n if (oldOperatorId) {\r\n oldOperator = model.getOperatorById(oldOperatorId);\r\n }\r\n \r\n if (oldOperator && oldOperator.paramCount == operator.paramCount) {\r\n //add necessary expressions\r\n let i = 1;\r\n while (i < operator.paramCount) {\r\n let oldOperand = model.getOperand(attr, oldOperator, i);\r\n let operand = model.getOperand(attr, operator, i);\r\n if (operand.dataType == DataType.Unknown) {\r\n operand.dataType = attr.dataType;\r\n }\r\n\r\n const editor = operand.editor && operand.editor.tag !== EditorTag.Unknown\r\n ? operand.editor\r\n : (attr.defaultEditor && attr.defaultEditor.tag !== EditorTag.Unknown\r\n ? attr.defaultEditor\r\n : new EqValueEditor());\r\n\r\n if (i >= exprCount) {\r\n var valExpr = this.createValueExpr(operand);\r\n this.expressions.push(valExpr); \r\n }\r\n else {\r\n var oldExpr = this.expressions[i];\r\n\r\n //create new value expression according to the corresponding operand\r\n var newExpr = this.createValueExpr(operand); \r\n if (this.areCompitableEditors(oldOperand.editor, editor)) {\r\n newExpr.tryCopyValueFrom(oldExpr);\r\n }\r\n\r\n this.expressions[i] = newExpr;\r\n }\r\n\r\n i++;\r\n }\r\n\r\n if (exprCount > i) {\r\n //remove all redundant expressions\r\n this.expressions.splice(i, exprCount - i);\r\n }\r\n } \r\n else {\r\n this.expressions.splice(1, this.expressions.length - 1);\r\n\r\n for(let i = 1; i < operator.paramCount; i++) {\r\n let operand = model.getOperand(attr, operator, i);\r\n if (operand.dataType == DataType.Unknown) {\r\n operand.dataType = attr.dataType;\r\n }\r\n var valExpr = this.createValueExpr(operand);\r\n this.expressions.push(valExpr); \r\n }\r\n }\r\n }\r\n\r\n private areCompitableEditors(oldEditor: EqValueEditor, newEditor: EqValueEditor): boolean {\r\n if (newEditor.tag == EqEditorTag.CustomList || newEditor.tag == EqEditorTag.List \r\n || newEditor.tag == EqEditorTag.SqlList || newEditor.tag == EditorTag.Unknown) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public addExpressionByOperand(operand : Operand, val: string = null) : Expression {\r\n let expr = this.createValueExpr(operand, val);\r\n this.expressions.push(expr);\r\n return expr;\r\n }\r\n\r\n private createValueExpr(operand : Operand, val: string = null): Expression {\r\n let valueNotDefined = val === null || typeof val === 'undefined';\r\n\r\n let value = val ? val : operand.defValue;\r\n let text = val ? val : operand.defText;\r\n\r\n let result = new Expression(this);\r\n if (operand.kind === DataKind.Query) {\r\n result.tag = ExprTag.Query;\r\n result.dataType = operand.dataType;\r\n result.kind = operand.kind;\r\n result.setContent(value, text, true);\r\n } \r\n else if (operand.kind === DataKind.Attribute) {\r\n if (!valueNotDefined) {\r\n let defAttr = this.getModel().getFirstAttributeByFilter((attr) => {\r\n return attr.useInConditions == true && (!operand.dataType || attr.dataType == operand.dataType);\r\n });\r\n\r\n value = defAttr ? defAttr.id : null;\r\n }\r\n\r\n result.tag = ExprTag.EntityAttribute;\r\n result.kind = operand.kind;\r\n result.dataType = operand.dataType;\r\n result.setContent(value, text, true);\r\n } \r\n else {\r\n if (valueNotDefined) {\r\n if (operand.defValue && operand.defValue != \"\") {\r\n value = operand.defValue;\r\n }\r\n else {\r\n if (operand.editor && operand.editor.defValue) {\r\n value = operand.editor.defValue;\r\n }\r\n else {\r\n value = '';\r\n }\r\n }\r\n \r\n if (operand.editor) {\r\n text = operand.editor.getValueText(value);\r\n }\r\n }\r\n\r\n result.tag = ExprTag.Constant;\r\n result.dataType = operand.dataType;\r\n result.kind = operand.kind;\r\n result.setContent(value, text, true);\r\n result._isDefaultValue = valueNotDefined;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n","import { \r\n EventEmitter, EqEvent, \r\n utils as dataUtils, AggregationColumnStore, AggregationSettings, DataType \r\n} from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\nimport { equtils } from '../utils/utils';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { Expression } from './expression';\r\nimport { Operator } from '../dm/operator';\r\nimport { EntityAttr } from '../dm/entity';\r\n\r\nimport { QueryColumn, SortDirection } from './query_column';\r\nimport { Condition } from './condition';\r\n\r\nimport { DataKind } from '../types/data_kind';\r\nimport { LinkType } from '../types/link_type';\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { CondTag } from '../types/cond_tag';\r\nimport { QueryData } from './dto/query_data';\r\nimport { ModelPlainData } from '../dm/dto/dm_data';\r\n\r\nimport { \r\n ColumnDescriptor, \r\n SimpleConditionDescriptor, ConditionGroupDescriptor \r\n} from './descriptors';\r\n\r\nimport { QueryChangeEventParams, QueryChangePart, QueryChangeAction } from './query_events'; \r\n\r\n/**\r\n * The error that appears when the query is not valid\r\n */\r\nexport class InvalidQueryError extends Error {\r\n /**\r\n * Creates an instance of error type.\r\n * @param message The error message\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, InvalidQueryError);\r\n }\r\n\r\n this.name = 'InvalidQueryError';\r\n }\r\n}\r\n\r\n/**\r\n * Represents query options.\r\n */\r\nexport interface QueryOptions {\r\n parent?: Query,\r\n attrTag?: ExprTag;\r\n clientListRequestHandler?: any;\r\n serverListRequestHandler?: any;\r\n}\r\n\r\nexport interface ValidateQueryOptions {\r\n checkExpressions?: boolean;\r\n}\r\n\r\nexport type LoadQueryFromDataOptions = {\r\n changeStatus?: boolean;\r\n validate?: boolean;\r\n}\r\n\r\n/**\r\n * Represents Query.\r\n */\r\nexport class Query implements AggregationColumnStore {\r\n private id: string;\r\n private name: string;\r\n private description: string;\r\n private root: Condition;\r\n private columns: QueryColumn[];\r\n private justsorted: QueryColumn[];\r\n\r\n protected extraConditions: Condition;\r\n \r\n /**\r\n * Current timezone offset (it's sent to the server for proper date/time values processing).\r\n */ \r\n public timezoneOffset: number;\r\n\r\n /**\r\n * Contains user-defined extra data for current query.\r\n */\r\n public extraData: any = {};\r\n\r\n public innerData: any = {};\r\n\r\n /** \r\n * The Data Model associated with this query.\r\n */\r\n public model: DataModel;\r\n\r\n private eventEmitter: EventEmitter;\r\n\r\n /**\r\n * The attributec class name (Tag).\r\n */\r\n public attributeExprTag: ExprTag;\r\n\r\n public clientListRequestHandler: any;\r\n\r\n public serverListRequestHandler: any;\r\n\r\n public isNewbie: boolean = true;\r\n\r\n private _isModified : boolean = false;\r\n\r\n private _enableAggregation: boolean = false;\r\n \r\n private parentQuery: Query = null;\r\n\r\n private drillDowns : Array<Query> = [];\r\n\r\n private aggrSettings: AggregationSettings;\r\n\r\n isModified() : boolean {\r\n return this._isModified;\r\n }\r\n\r\n resetModified() : void {\r\n this._isModified = false;\r\n }\r\n\r\n public get enableAggregation(): boolean {\r\n return this._enableAggregation;\r\n }\r\n\r\n public set enableAggregation(value: boolean) {\r\n const oldValue = this._enableAggregation;\r\n this._enableAggregation = value;\r\n if (!oldValue && value) {\r\n this.processQueryForAggregation();\r\n \r\n const aggrCols = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.AggregateFunction);\r\n }\r\n\r\n if (!this._enableAggregation) {\r\n this.aggrSettings.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The default constructor.\r\n * @param model The data model.\r\n * @param data JSON representation object.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n constructor(model?: DataModel, data?: QueryData, options?: QueryOptions) {\r\n this.eventEmitter = new EventEmitter(this);\r\n\r\n this.root = new Condition(this, CondTag.Group);\r\n this.extraConditions = new Condition(this, CondTag.Group);\r\n\r\n this.columns = new Array<QueryColumn>();\r\n this.justsorted = new Array<QueryColumn>();\r\n if (!this.id){\r\n this.regenerateId();\r\n }\r\n this.setDefaultName();\r\n\r\n this.description = \"\";\r\n \r\n this.model = (model) ? model : new DataModel();\r\n if (data) {\r\n this.loadFromData(data);\r\n }\r\n\r\n this.attributeExprTag = (options) ? options.attrTag || ExprTag.EntityAttribute : ExprTag.EntityAttribute;\r\n this.clientListRequestHandler = (options) ? options.clientListRequestHandler : new Array<(...params: any[]) => void>();\r\n this.serverListRequestHandler = (options) ? options.serverListRequestHandler : new Array<(...params: any[]) => void>();\r\n\r\n this.timezoneOffset = (new Date()).getTimezoneOffset();\r\n\r\n this.aggrSettings = new AggregationSettings(this);\r\n\r\n if (options) {\r\n this.parentQuery = options.parent;\r\n }\r\n\r\n this.addChangedCallback(ev => {\r\n if (ev.data \r\n && ((ev.data.part & QueryChangePart.Columns) > 0)\r\n && !ev.data.aggregation) \r\n {\r\n if (this._enableAggregation && this.updateAggregationSettings()) {\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Aggregation\r\n });\r\n }\r\n }\r\n })\r\n }\r\n\r\n protected updateAggregationSettings() : boolean {\r\n let hasChanged = false;\r\n const aggrSettings = this.getAggregationSettings();\r\n for (let i = aggrSettings.groups.length -1; i >=0; i--) {\r\n const group = aggrSettings.groups[i];\r\n for (let j = group.columns.length - 1; j >= 0; j--) {\r\n const colId = group.columns[j];\r\n if (!this.columns.find(col => col.id === colId)) {\r\n group.columns.splice(j, 1);\r\n hasChanged = true;\r\n }\r\n }\r\n if (group.columns.length == 0) {\r\n aggrSettings.groups.slice(i, 1);\r\n }\r\n }\r\n\r\n const aggregates = aggrSettings.getAggregates();\r\n for (let i = aggregates.length - 1; i >= 0; i--) {\r\n const aggr = aggregates[i];\r\n if (!this.columns.find(col => col.id === aggr.colId)) {\r\n aggregates.splice(i, 1);\r\n hasChanged = true;\r\n }\r\n }\r\n return hasChanged;\r\n }\r\n\r\n public createSubQuery() : Query {\r\n return new Query(this.model);\r\n }\r\n\r\n public useAggregation(settingsTuner: (settings: AggregationSettings) => void, silent = false) {\r\n this.aggrSettings.clear();\r\n\r\n settingsTuner(this.aggrSettings);\r\n\r\n if (this.enableAggregation) {\r\n this.processQueryForAggregation(silent);\r\n }\r\n else if (!silent) {\r\n console.warn('Aggregation is turned off. Turn it on with query.enableAggregation = true');\r\n return;\r\n }\r\n }\r\n\r\n public useDefaultAggregation() {\r\n this._enableAggregation = true;\r\n this.useAggregation((settings) => {\r\n const aggrCols = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.AggregateFunction);\r\n\r\n if (aggrCols.length) {\r\n // query contains aggregate columns\r\n\r\n const colsToGroup = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.EntityAttribute);\r\n\r\n const aggrsToAdd = [];\r\n for (const col of aggrCols) {\r\n aggrsToAdd.push({ id: col.id, func: col.expr.func });\r\n this.changeColumnType(col, ExprTag.EntityAttribute);\r\n }\r\n\r\n for(const aggr of aggrsToAdd) {\r\n settings.addAggregateColumn(aggr.id, aggr.func);\r\n }\r\n\r\n for(const col of colsToGroup) {\r\n settings.addGroup({ columns: [col.id], name: col.caption });\r\n }\r\n\r\n settings.addGrandTotals();\r\n\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Columns,\r\n wasModified: false\r\n });\r\n }\r\n else {\r\n // query does not has any aggr columns\r\n const colToAggr = this.getColumns()\r\n .filter(c => c.enabled && c.expr.tag == ExprTag.EntityAttribute\r\n && this.model.getAttributeById(c.expr.value).dataType === DataType.Currency)[0];\r\n\r\n const colToGroup = this.getColumns()\r\n .filter(c => c.enabled && c.expr.tag == ExprTag.EntityAttribute\r\n && this.model.getAttributeById(c.expr.value).dataType === DataType.String)[0];\r\n\r\n if ((!colToAggr && !settings.hasAggregates()) || !colToGroup)\r\n return;\r\n\r\n settings.addGrandTotals()\r\n .addAggregateColumn(colToAggr.id, 'SUM')\r\n .addGroup({ columns: [colToGroup.id], name: 'Default' });\r\n\r\n }\r\n });\r\n }\r\n\r\n private processQueryForAggregation(silent = false) {\r\n const aggrSettings = this.getAggregationSettings();\r\n const groups = aggrSettings.getGroups();\r\n if (groups.length > 0) {\r\n const groupColIds = groups[groups.length - 1].columns;\r\n //take the list of grouped columns from the latest group\r\n let groupedCols = [];\r\n let sortedCols = [];\r\n for (const col of this.getColumns()) {\r\n if (groupColIds.indexOf(col.id) >= 0) {\r\n groupedCols.push(col);\r\n }\r\n else if (col.sorting != SortDirection.None) {\r\n sortedCols.push(col);\r\n }\r\n }\r\n\r\n let sortIndex = 0;\r\n groupedCols.forEach(col => {\r\n if (col.sorting == SortDirection.None) {\r\n col.sorting = SortDirection.Ascending;\r\n }\r\n col.sortIndex = sortIndex++;\r\n }); \r\n \r\n sortedCols.forEach(col => {\r\n col.sortIndex = sortIndex++;\r\n }); \r\n\r\n if (!silent) {\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Columns,\r\n aggregation: true,\r\n wasModified: false\r\n });\r\n }\r\n }\r\n }\r\n\r\n public getAggregationSettings(): AggregationSettings {\r\n return this.aggrSettings;\r\n }\r\n\r\n getColumnIds(from: number, to?: number): string[] {\r\n to = to || from;\r\n return this.columns.slice(from, to - from + 1)\r\n .map(c => c.id);\r\n }\r\n\r\n /**\r\n * Checks if the columns with IDs passed in function's parameter exist and are valid\r\n */\r\n validateColumns(colIds: string[]): boolean {\r\n const enabledColIds = this.columns.filter(c => c.enabled).map(c => c.id);\r\n\r\n let prevIndex = -1;\r\n for (const col of colIds) {\r\n const index = enabledColIds.indexOf(col);\r\n if (index < 0)\r\n return false;\r\n\r\n if (prevIndex > index)\r\n return false;\r\n\r\n prevIndex = index;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n validateAggregate(colId: string, funcId: string): boolean {\r\n const col = this.columns.filter(c => c.enabled && c.id === colId)[0];\r\n const func = this.model.findAggrFunctionById(funcId);\r\n if (!func || !col || func.appliedTypes.indexOf(col.expr.dataType) < 0)\r\n return false;\r\n\r\n return true;\r\n }\r\n \r\n public isEx() : boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Resets the query: clears all its conditions and columns, regenerate the ID and sets the default name.\r\n * @param silent Indicates whether we need to avoid firing the QueryChanged event.\r\n */\r\n public reset(clearQuery: boolean = true) {\r\n if (clearQuery) {\r\n this.clear();\r\n } \r\n this.regenerateId();\r\n this.setDefaultName();\r\n\r\n this._isModified = false;\r\n this.isNewbie = true;\r\n }\r\n\r\n public hasEnabledAggrColumns(): boolean {\r\n return this.columns.filter(col => col.enabled \r\n && col.expr.tag === ExprTag.AggregateFunction).length > 0;\r\n }\r\n\r\n public setDefaultName() : string {\r\n this.setName(i18n.getText('NewQueryName'));\r\n return this.getName();\r\n }\r\n\r\n /**\r\n * Validates wether the query corresponds to the model.\r\n * @param options Validate options.\r\n * @throws {InvalidQueryError} If query is not valid.\r\n */\r\n public validate(options?: ValidateQueryOptions) {\r\n\r\n options = options || {};\r\n\r\n const entityAttrNotExistError = \"EntityAttribute isn't declared in the model: \";\r\n const wrongExprTag = \"The expression has wrond tag: \";\r\n\r\n if (!this.model) {\r\n throw new InvalidQueryError(\"Model is not declared\");\r\n }\r\n\r\n if (this.columns) {\r\n for(let column of this.columns) {\r\n if (column.expr.tag == ExprTag.EntityAttribute\r\n || column.expr.tag === ExprTag.ParentEntityAttribute) {\r\n const attr = this.model.getAttributeById(column.expr.value);\r\n if (!attr) {\r\n throw new InvalidQueryError(entityAttrNotExistError + column.expr.value);\r\n }\r\n } \r\n else if (column.expr.tag === ExprTag.AggregateFunction) {\r\n const attr = this.model.getAttributeById(column.expr.args[0].value);\r\n if (!attr) {\r\n throw new InvalidQueryError(entityAttrNotExistError + column.expr.args[0].value);\r\n }\r\n } \r\n else if (column.expr.tag !== ExprTag.CustomSql) {\r\n throw new InvalidQueryError(wrongExprTag + column.expr.tag);\r\n }\r\n }\r\n }\r\n\r\n if (this.root && this.root.getConditions()) {\r\n this.validateConditionGroup(this.root, options);\r\n }\r\n }\r\n\r\n public getAggregatedColumns(): QueryColumn[] {\r\n return this.getColumns().filter(col => col.enabled \r\n && col.expr.tag === ExprTag.AggregateFunction);\r\n }\r\n\r\n /**\r\n * Validates wether the query corresponds to the model.\r\n * @param options Validate options. \r\n * @returns `true` if it is valid, otherwise `false`\r\n */\r\n public tryValidate(options?: ValidateQueryOptions): boolean {\r\n try {\r\n this.validate(options);\r\n return true;\r\n }\r\n catch(e) {\r\n if (e instanceof InvalidQueryError) {\r\n return false;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n private validateConditionGroup(curCond: Condition, options: ValidateQueryOptions) {\r\n if (curCond.isGroup()) {\r\n for (let condition of curCond.getConditions()) {\r\n \r\n if (!condition.enabled)\r\n continue;\r\n\r\n this.validateConditionGroup(condition, options);\r\n }\r\n } \r\n else if (curCond.expressions[0].tag === ExprTag.EntityAttribute) {\r\n const attrId = curCond.expressions[0].value;\r\n const attr = this.model.getAttributeById(attrId); \r\n if (!attr) {\r\n throw new InvalidQueryError(\"EntityAttribute isn't declared in the model: \" + attrId);\r\n }\r\n\r\n if (!options.checkExpressions) \r\n return\r\n\r\n for(let i = 1; i < curCond.expressions.length; i++) {\r\n const expr = curCond.expressions[i];\r\n if (expr.tag !== ExprTag.Constant)\r\n continue;\r\n\r\n //validate number exprs\r\n if (dataUtils.isNumericType(expr.dataType)) {\r\n\r\n if (!expr.value)\r\n continue;\r\n\r\n let values = [];\r\n if (expr.kind === DataKind.List) {\r\n values = expr.value.split(/\\s*,\\s*/);\r\n } else {\r\n values = [expr.value];\r\n }\r\n\r\n for (let value of values) {\r\n const parsedVal = +value;\r\n\r\n if (isNaN(parsedVal)) {\r\n throw new InvalidQueryError(\"Expression constant is NaN in condition:\" + curCond.id);\r\n }\r\n if (dataUtils.isIntType(expr.dataType) && parsedVal != parseInt(value, 10)) {\r\n throw new InvalidQueryError(\"Expression constant is wrong interger in condition: \" + curCond.id);\r\n }\r\n }\r\n \r\n }\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * Sets data to the query.\r\n * @param data JSON representation object or JSON string\r\n * @param changeStatus Indicate whether we should change the \"isModified\" status (by default == `true`)\r\n */\r\n public loadFromDataOrJson(data: QueryData | string, options?: LoadQueryFromDataOptions) { \r\n if (data) {\r\n if (typeof data === \"string\") {\r\n this.loadFromJson(data, options);\r\n } \r\n else {\r\n this.loadFromData(data, options);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads query from JSON.\r\n * @param json The JSON string.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n public loadFromJson(json: string, options?: LoadQueryFromDataOptions) {\r\n let data = JSON.parse(json);\r\n this.loadFromData(data, options);\r\n }\r\n\r\n /**\r\n * Loads query from data representation.\r\n * @param data The query DTO.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n public loadFromData(data: QueryData, options?: LoadQueryFromDataOptions) {\r\n options = dataUtils.assign({\r\n changeStatus: true,\r\n validate: true\r\n }, options || {});\r\n\r\n let noErrors = false;\r\n\r\n this.clear();\r\n this.clearDrillDowns();\r\n \r\n if (data) {\r\n this.id = data.id as string;\r\n this.root.loadFromData(this.model, data.root);\r\n\r\n if (data.root && data.root.conds) {\r\n for(let i = 0; i < data.root.conds.length; i++) {\r\n const condData = data.root.conds[i];\r\n if (condData.conds && !this.isEx()) {\r\n console.error(\"Community version doesn't support working with groups.\");\r\n continue;\r\n }\r\n\r\n const cond = this.createCondition();\r\n cond.loadFromData(this.model, condData);\r\n this.root.addCondition(cond);\r\n }\r\n }\r\n\r\n this.name = data.name as string;\r\n this.description = data.desc as string;\r\n this.justsorted = [];\r\n \r\n if (data.justsortcols) {\r\n for (let i = 0; i < data.justsortcols.length; i++) {\r\n let newCol = this.createColumn(true);\r\n newCol.loadFromData(this.model, data.justsortcols[i]);\r\n this.justsorted.push(newCol);\r\n }\r\n }\r\n\r\n if (data.cols) {\r\n for (let i = 0; i < data.cols.length; i++) {\r\n let newCol = this.createColumn();\r\n newCol.loadFromData(this.model, data.cols[i]);\r\n this.columns.push(newCol);\r\n }\r\n }\r\n\r\n if (data.extraData) {\r\n this.extraData = data.extraData;\r\n }\r\n\r\n this.innerData = data.innerData || this.innerData;\r\n if (this.innerData && this.innerData.aggr) {\r\n this._enableAggregation = this.innerData.aggr.enabled || false;\r\n this.useAggregation(settings => {\r\n settings.loadFromData(this.innerData.aggr);\r\n }, true); \r\n }\r\n\r\n if (data.dds && data.dds.length) {\r\n for(let dd of data.dds) {\r\n const query = this.addDrillDown();\r\n query.loadFromData(dd);\r\n }\r\n }\r\n }\r\n noErrors = true;\r\n\r\n if (noErrors) {\r\n if (options.changeStatus) {\r\n this.isNewbie = false;\r\n this._isModified = false;\r\n } \r\n }\r\n\r\n if (options.validate) {\r\n this.validate();\r\n }\r\n }\r\n\r\n /**\r\n * \r\n */\r\n public addDrillDown(): Query {\r\n const query = this.model.createQuery();\r\n query.parentQuery = this;\r\n this.drillDowns.push(query);\r\n return query;\r\n }\r\n\r\n public getDrillDowns(): Array<Query> {\r\n return this.drillDowns;\r\n }\r\n\r\n public getParentQuery(): Query | null {\r\n return this.parentQuery;\r\n }\r\n\r\n /**\r\n * \r\n */\r\n public findColumnById(colId: string) : QueryColumn | null {\r\n for(let col of this.columns) {\r\n if (col.id === colId)\r\n return col;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets DataModel object associated with this query.\r\n * @retruns The data model.\r\n */\r\n public getModel(): DataModel {\r\n return this.model;\r\n }\r\n\r\n /**\r\n * Sets DataModel object associated with this query.\r\n * @param model The data model.\r\n */\r\n public setModel(model : DataModel) {\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Loads data model.\r\n * @param model JSON representation object or JSON string.\r\n */\r\n public loadModelData(model: ModelPlainData | string) {\r\n this.model.setData(model);\r\n }\r\n\r\n /**\r\n * Returns JSON representation of this query.\r\n * @retruns JSON string.\r\n */\r\n public toJSON(): string {\r\n return JSON.stringify(this.toJSONData());\r\n }\r\n\r\n /**\r\n * Returns JSON representation of this query.\r\n * @retruns JSON representation object.\r\n */\r\n public toJSONData(): QueryData {\r\n let obj: any = {\r\n modelId: this.model ? this.model.getId() : null,\r\n modelName: this.model ? this.model.getName() : null\r\n };\r\n\r\n obj.id = this.id;\r\n obj.name = this.name;\r\n if (this.description) {\r\n obj.desc = this.description;\r\n }\r\n obj.cols = [];\r\n for (let i = 0; i < this.columns.length; i++) {\r\n obj.cols.push(this.columns[i].saveToData());\r\n }\r\n\r\n obj.justsortcols = [];\r\n for (let i = 0; i < this.justsorted.length; i++) {\r\n obj.justsortcols.push(this.justsorted[i].saveToData());\r\n }\r\n\r\n if (this.extraData) {\r\n obj.extraData = this.extraData;\r\n }\r\n\r\n if (this.innerData) {\r\n obj.innerData = this.innerData;\r\n obj.innerData.aggr = this.aggrSettings.saveToData();\r\n obj.innerData.aggr.enabled = this._enableAggregation;\r\n }\r\n\r\n const rootCondToData = (condGroup: Condition) => {\r\n const result = condGroup.saveToData();\r\n result.conds = [];\r\n\r\n const conditions = condGroup.getConditions();\r\n for(let i = 0; i < conditions.length; i++) {\r\n if (conditions[i].isGroup() && !this.isEx()) {\r\n console.error(\"Community version doesn't support working with groups.\");\r\n continue;\r\n }\r\n \r\n result.conds.push(conditions[i].saveToData());\r\n }\r\n\r\n return result;\r\n };\r\n\r\n obj.root = rootCondToData(this.root);\r\n obj.extraConds = rootCondToData(this.extraConditions);\r\n\r\n if (this.drillDowns.length > 0) {\r\n obj.dds = [];\r\n for(let dd of this.drillDowns) {\r\n obj.dds.push(dd.toJSONData());\r\n }\r\n }\r\n\r\n obj.timezoneOffset = this.timezoneOffset;\r\n obj.locale = i18n.getCurrentLocale();\r\n \r\n return obj;\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any condtion.\r\n * @retruns `true` if query does not contain any condition, otherwise `false`.\r\n */\r\n public isEmptyConditions(): boolean {\r\n return this.root.isEmpty();\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any column.\r\n * @retruns `true` if query does not contain any column, otherwise `false`.\r\n */\r\n public isEmptyColumns(): boolean {\r\n return !this.columns || this.columns.length === 0;\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any column and any condition.\r\n * @retruns `true` if query does not contain any column and any condition, otherwise `false`.\r\n */\r\n public isEmpty(): boolean {\r\n return this.isEmptyColumns() && this.isEmptyConditions();\r\n }\r\n\r\n /**\r\n * Clears the query (all conditions, columns, extraData, etc).\r\n */\r\n public clear() {\r\n this._enableAggregation = false;\r\n this.aggrSettings.clear();\r\n\r\n this.clearColumns();\r\n this.clearConditions();\r\n this.clearExtraConditions();\r\n this.innerData = {};\r\n this.extraData = {};\r\n }\r\n\r\n /**\r\n * Clears all columns in query\r\n */\r\n public clearColumns() {\r\n this.columns = [];\r\n this.justsorted = []; \r\n }\r\n\r\n /**\r\n * Clears all conditions in query.\r\n */\r\n public clearConditions() {\r\n this.root.clearConditions();\r\n this.root.linkType = LinkType.All;\r\n this.root.enabled = true; \r\n }\r\n\r\n /**\r\n * Clears all extra conditions in query\r\n */\r\n public clearExtraConditions() {\r\n this.extraConditions.clearConditions();\r\n }\r\n\r\n /**\r\n * Clears all drill downs\r\n */\r\n public clearDrillDowns() {\r\n this.drillDowns = [];\r\n }\r\n\r\n /**\r\n * Gets query ID.\r\n * @returns The ID>\r\n */\r\n public getId(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * Sets query ID.\r\n * @param id New Query ID.\r\n */\r\n public setId(id : string) {\r\n this.id = id;\r\n }\r\n\r\n /**\r\n * Regenerates current query ID.\r\n * @param id New Query ID.\r\n */\r\n public regenerateId() {\r\n this.id = dataUtils.generateId(\"quer\");\r\n }\r\n\r\n /**\r\n * Gets name of the query.\r\n * @retruns The name.\r\n */\r\n public getName(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets name of the query\r\n * @param name New name.\r\n */\r\n public setName(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets description of the query.\r\n * @retruns The description.\r\n */\r\n public getDescription(): string {\r\n return this.description;\r\n }\r\n\r\n /**\r\n * Sets description of the query\r\n * @param description New description.\r\n */\r\n public setDescription(description: string) {\r\n this.description = description;\r\n }\r\n\r\n /**\r\n * Get array of columns.\r\n * @retruns Columns.\r\n */\r\n public getColumns(): QueryColumn[] {\r\n return this.columns;\r\n }\r\n\r\n /**\r\n * Gets array of columns that are used as keys \r\n * for totals.\r\n */\r\n public getUsedInTotalsColumns() {\r\n const aggrs = this.getAggregatedColumns();\r\n if (aggrs.length === 0)\r\n return [];\r\n\r\n const cols = this.getColumns()\r\n .filter(col => col.enabled && col.expr.tag === ExprTag.EntityAttribute);\r\n if(cols.length)\r\n cols.pop();\r\n\r\n return cols;\r\n }\r\n\r\n /**\r\n * Get array of columns used only in sorting.\r\n * @retruns Columns.\r\n */\r\n public getJustSortedColumns(): QueryColumn[] {\r\n return this.justsorted;\r\n }\r\n\r\n /**\r\n * Gets array of columns used in sorting\r\n * @retruns Columns\r\n */\r\n public getSortedColumns(): QueryColumn[] {\r\n let sortedCols = new Array<QueryColumn>();\r\n\r\n let cols = this.getColumns()\r\n .concat(this.getJustSortedColumns());\r\n \r\n for(let i = 0; i <cols.length; i++) {\r\n let col = cols[i];\r\n if (col.sortIndex >= 0) {\r\n sortedCols.push(col);\r\n }\r\n }\r\n\r\n sortedCols.sort((col1: QueryColumn, col2 : QueryColumn): number => {\r\n return col1.sortIndex - col2.sortIndex;\r\n });\r\n\r\n return sortedCols;\r\n }\r\n\r\n /**\r\n * Gets Colummn sorting index.\r\n * @param col The column.\r\n * @retruns The index.\r\n */\r\n public getColumnSortIndex(col: QueryColumn): number{\r\n if(col.sorting != SortDirection.None) {\r\n if (col.sortIndex < 0) {\r\n var cols = this.getColumns()\r\n .concat(this.getJustSortedColumns());\r\n return dataUtils.indexOfArrayItem(cols, col);\r\n }\r\n else {\r\n return col.sortIndex;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n public createColumn(justsorted = false) : QueryColumn {\r\n return new QueryColumn(this, justsorted);\r\n }\r\n\r\n public getColumnById(id: string): QueryColumn {\r\n return dataUtils.findItemById(this.columns, id);\r\n }\r\n\r\n /**\r\n * Adds a new column with specified parameters\r\n * @param desriptor The descriptor of the new column. Can contain different parameters like: \r\n * `attribute` - a reference to a EntityAttr object, \r\n * `attributeId` - an ID of the entity attribute we need (if we don't indicate `attribute`),\r\n * `index`, sorting`, 'sortIndex` and other \r\n * \r\n * @param author The author of this operation. This parameter is used in EasyQuery widgets only to indicate which of the initiates the change.\r\n * @retruns The column.\r\n * @example \r\n * query.addColumn({\r\n * attributeId: 'Customers.CompanyName',\r\n * sortIndex: SortDirection.Ascending \r\n * }});\r\n */\r\n public addColumn(descriptor: ColumnDescriptor, author?: string): QueryColumn { \r\n let columns = (descriptor.justsorted) \r\n ? this.justsorted \r\n : this.columns;\r\n\r\n let newColumn: QueryColumn;\r\n\r\n if (descriptor.column) {\r\n newColumn = descriptor.column;\r\n }\r\n else {\r\n newColumn = this.createColumn(descriptor.justsorted);\r\n\r\n let attr: EntityAttr;\r\n\r\n if (descriptor.attribute) {\r\n attr = descriptor.attribute\r\n }\r\n else if (descriptor.attributeId) {\r\n attr = this.model.getAttributeById(descriptor.attributeId);\r\n if (!attr) {\r\n throw new Error(`Incorrect attribute id (${descriptor.attributeId}): addColumn`);\r\n }\r\n }\r\n else {\r\n throw new Error(\"Not enought data: addColumn\");\r\n }\r\n if (descriptor.aggrFuncId && descriptor.cusomtSql) {\r\n console.warn(\"Column cannot be created using aggrFuncId and customSql at the same time. \"+\r\n \"cusomSql will be used.\");\r\n }\r\n\r\n if (descriptor.cusomtSql) {\r\n newColumn.caption = 'Custom SQL Column';\r\n newColumn.expr.tag = ExprTag.CustomSql;\r\n newColumn.expr.baseAttrId = attr.id;\r\n newColumn.expr.sql = descriptor.cusomtSql;\r\n newColumn.expr.kind = DataKind.Query;\r\n newColumn.expr.dataType = DataType.Unknown;\r\n }\r\n else if (descriptor.aggrFuncId) {\r\n const funcId = descriptor.aggrFuncId;\r\n newColumn.caption = attr.caption + ' ' \r\n + this.model.getAggrFunctionCaption(descriptor.aggrFuncId);\r\n newColumn.expr.tag = ExprTag.AggregateFunction;\r\n newColumn.expr.func = descriptor.aggrFuncId;\r\n newColumn.expr.kind = DataKind.Scalar;\r\n newColumn.expr.dataType = funcId == 'COUNT' || funcId == 'CNTDST' ? 4 : attr.dataType; \r\n newColumn.expr.distinct = false;\r\n\r\n const arg = new Expression(newColumn);\r\n arg.setValue(attr.id, true);\r\n arg.tag = ExprTag.EntityAttribute;\r\n arg.dataType = attr.dataType;\r\n newColumn.expr.args.push(arg); \r\n }\r\n else {\r\n newColumn.caption = attr.caption;\r\n newColumn.expr.setValue(attr.id, true);\r\n newColumn.expr.tag = ExprTag.EntityAttribute;\r\n newColumn.expr.dataType = attr.dataType;\r\n }\r\n \r\n newColumn.caption = descriptor.caption || newColumn.caption;\r\n newColumn.sorting = descriptor.sorting || SortDirection.None;\r\n newColumn.sortIndex = descriptor.sortIndex || -1;\r\n newColumn.enabled = dataUtils.getIfDefined(descriptor.enabled, true);\r\n newColumn.setReadOnly(dataUtils.getIfDefined(descriptor.readonly, false));\r\n }\r\n\r\n \r\n if (descriptor.index && descriptor.index >= 0 && descriptor.index < columns.length) {\r\n columns.splice(descriptor.index, 0, newColumn);\r\n } \r\n else {\r\n columns.push(newColumn);\r\n }\r\n\r\n return newColumn;\r\n }\r\n\r\n\r\n /**\r\n * Adds a new column with specified index.\r\n * @param column The column or array of columns\r\n * @param index The index of new column\r\n * @param author The author.\r\n * @example \r\n * const column = new Column();\r\n * column.caption = \"Company name\";\r\n * \r\n * query.addColumn(column, 1)\r\n */\r\n public addColumnObj(column: QueryColumn | QueryColumn[], index: any, author: any) {\r\n let columns = this.columns;\r\n\r\n if (typeof (<QueryColumn[]>column).length == \"undefined\") {\r\n if (typeof index == \"number\") {\r\n columns.splice(index, 0, column as QueryColumn);\r\n } else {\r\n columns.push(column as QueryColumn);\r\n }\r\n }\r\n else {\r\n if (typeof index == \"number\") {\r\n (columns as any).push.apply(columns, [index, 0].concat(column as any));\r\n }\r\n else {\r\n columns.push.apply(columns, [].concat(column as QueryColumn[]));\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * Changes column to Aggregate function, custom expression or simple column.\r\n * @param column The column to change.\r\n * @param tag New column expression tag.\r\n * @param args The arguments (Contains aggregate function id)\r\n */\r\n public changeColumnType(column: QueryColumn, tag: ExprTag, args?: any) {\r\n if (column.isJustSorted())\r\n return;\r\n\r\n args = args || {};\r\n column.caption = (typeof args.caption !== 'undefined') \r\n ? args.caption\r\n : '';\r\n\r\n if (tag === ExprTag.AggregateFunction) {\r\n if (!args.funcId)\r\n throw Error('\"funcId\" argument is not defined');\r\n\r\n if (column.expr.tag == ExprTag.AggregateFunction) {\r\n column.expr.func = args.funcId;\r\n return;\r\n }\r\n\r\n const expr = new Expression(column);\r\n expr.tag = ExprTag.AggregateFunction;\r\n expr.func = args.funcId;\r\n expr.distinct = false;\r\n expr.dataType = args.funcId == 'COUNT' || args.funcId == 'CNTDST' ? 4 : column.expr.dataType; \r\n\r\n const arg = new Expression(column);\r\n arg.loadFromData(this.model, column.expr.saveToData());\r\n\r\n expr.args.push(arg);\r\n\r\n column.expr = expr;\r\n }\r\n else if (tag === ExprTag.CustomSql) {\r\n const attrId = \r\n (column.expr.tag == ExprTag.AggregateFunction) \r\n ? column.expr.args[0].value\r\n : column.expr.value;\r\n\r\n let sqlText = '';\r\n if (this.model) {\r\n sqlText = this.model.getAttributeById(attrId).expr;\r\n }\r\n\r\n const customSqlExpr = new Expression(column);\r\n customSqlExpr.tag = ExprTag.CustomSql;\r\n customSqlExpr.dataType = DataType.String; //the default data type\r\n customSqlExpr.sql = sqlText;\r\n customSqlExpr.baseAttrId = attrId;\r\n column.expr = customSqlExpr; \r\n } \r\n else if (tag === ExprTag.EntityAttribute) {\r\n if (column.expr.tag === ExprTag.EntityAttribute\r\n || column.expr.tag === ExprTag.ParentEntityAttribute) {\r\n return;\r\n }\r\n\r\n const exprId = (column.expr.tag === ExprTag.CustomSql) \r\n ? column.expr.baseAttrId\r\n : column.expr.args[0].value;\r\n\r\n const attr = this.model.getAttributeById(exprId); \r\n \r\n const expr = new Expression(column);\r\n expr.tag = ExprTag.EntityAttribute;\r\n expr.dataType = attr != null ? attr.dataType : DataType.Unknown;\r\n expr.setValue(exprId, true);\r\n column.expr = expr;\r\n }\r\n }\r\n\r\n /**\r\n * Moves the column with specified index to another position.\r\n * @param index1 The index of the column that should be moved.\r\n * @param index2 The index of the position the column should be moved to\r\n * @param author The author\r\n */\r\n public moveColumn(index1: number, index2: number) {\r\n const columns = this.getColumns();\r\n dataUtils.moveArrayItem(columns, index1, index2); \r\n }\r\n\r\n /**\r\n * Removes the column.\r\n * @param column The column to be removed.\r\n * @param author The author\r\n */\r\n public removeColumn(column: QueryColumn, author: any) {\r\n \r\n const columns = (column.isJustSorted()) \r\n ? this.getJustSortedColumns()\r\n : this.getColumns();\r\n\r\n dataUtils.removeArrayItem(columns, column);\r\n }\r\n\r\n /**\r\n * Adds a condition group - a group of simple conditions (predicates) linked by AND or OR\r\n * @param descriptor The descriptor of the new condition group.\r\n * @returns The new search condition.\r\n */\r\n public addConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n console.error(\"Community version doesn't support working with groups.\");\r\n return null;\r\n }\r\n\r\n public addExtraConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n console.error(\"Community version doesn't support working with groups.\");\r\n return null;\r\n }\r\n\r\n public createCondition(tag = CondTag.Simple): Condition {\r\n return new Condition(this, tag);\r\n }\r\n\r\n\r\n /**\r\n * Adds a new simple condition (a predicate)\r\n * @param descriptor The descriptor which defines different parameters of the new condition\r\n * @returns The new condition.\r\n */\r\n public addSimpleCondition (descriptor : SimpleConditionDescriptor): Condition {\r\n let parent = descriptor.parent as Condition || this.getRootCondition();\r\n\r\n let model = this.getModel();\r\n if (!model) return null;\r\n\r\n if (!descriptor.attribute && !descriptor.attributeId) {\r\n throw new Error(\"Either `attribute` or `attributeId` parameter must have a value\");\r\n }\r\n\r\n if (!descriptor.attribute) {\r\n descriptor.attribute = model.getAttributeById(descriptor.attributeId);\r\n if (!descriptor.attribute) {\r\n throw new Error(\"Could not find this attribute: \" + descriptor.attributeId);\r\n }\r\n }\r\n\r\n if (!descriptor.operator && descriptor.operatorId) {\r\n descriptor.operator = model.getOperatorById(descriptor.operatorId);\r\n }\r\n\r\n if (!descriptor.operator) {\r\n descriptor.operator = model.getDefaultOperatorForAttr(descriptor.attribute);\r\n }\r\n\r\n let cond = this.createSimpleConditionObject(descriptor.attribute, descriptor.operator, descriptor.value);\r\n parent.addCondition(cond);\r\n\r\n cond.enabled = dataUtils.getIfDefined(descriptor.enabled, true);\r\n cond.setReadOnly(dataUtils.getIfDefined(descriptor.readonly, false))\r\n \r\n return cond; \r\n }\r\n\r\n public addSimpleExtraCondition(descriptor : SimpleConditionDescriptor): Condition {\r\n descriptor.parent = descriptor.parent || this.extraConditions;\r\n return this.addSimpleCondition(descriptor);\r\n }\r\n\r\n protected createSimpleConditionObject(attr: EntityAttr, operator: Operator, inputValues: string | Array<string>): Condition {\r\n if (!attr || !attr.useInConditions) {\r\n let attrCaption = attr ? attr.caption : 'NULL';\r\n throw \"Can't add a condition with such attribute: \" + attrCaption;\r\n }\r\n\r\n let cond = this.createCondition(CondTag.Simple);\r\n cond.setOperatorId(operator.id, true);\r\n\r\n let attrExpr = new Expression(cond);\r\n\r\n attrExpr.setValue(attr.id, true);\r\n attrExpr.tag = this.attributeExprTag;\r\n attrExpr.kind = DataKind.Attribute;\r\n attrExpr.dataType = attr.dataType;\r\n\r\n cond.expressions.push(attrExpr);\r\n \r\n let model = this.getModel();\r\n\r\n const valCount = operator.paramCount;\r\n let values = dataUtils.fillArray(new Array(valCount - 1), null);\r\n\r\n if (inputValues !== null && typeof inputValues !== \"undefined\") {\r\n if (Array.isArray(inputValues)) {\r\n dataUtils.copyArrayTo(inputValues, values);\r\n }\r\n else if (valCount > 0 ) {\r\n values[0] = inputValues; \r\n }\r\n }\r\n\r\n var valLength = values.length;\r\n for (var i = 0; i < valLength; i++) {\r\n let operand = model.getOperand(attr, operator, i + 1);\r\n cond.addExpressionByOperand(operand, values[i]);\r\n }\r\n return cond;\r\n }\r\n\r\n /**\r\n * Removes several columns passed as array.\r\n * @param columnsToRemove The list of columns to be removed.\r\n * @param author The author.\r\n */\r\n public removeColumns(columnsToRemove: QueryColumn[], author: any) {\r\n\r\n let justSortedColumns = columnsToRemove.filter(c => c.isJustSorted());\r\n let columns = columnsToRemove.filter(c => !c.isJustSorted());\r\n\r\n function removeFromArray(arr, arrToRemove) {\r\n\r\n let ctrLen = arrToRemove.length;\r\n for (let i = 0; i < ctrLen; i++) {\r\n let index = arr.indexOf(arrToRemove[i]);\r\n if (index >= 0) {\r\n arr.splice(index, 1);\r\n }\r\n } \r\n\r\n }\r\n\r\n if (columns.length > 0) {\r\n removeFromArray(this.getColumns(), columns);\r\n }\r\n\r\n if (justSortedColumns.length > 0) {\r\n removeFromArray(this.getJustSortedColumns(), justSortedColumns);\r\n }\r\n\r\n } \r\n\r\n /**\r\n * Fires process event.\r\n * @param data The data.\r\n */\r\n public fireProcessEvent(data: any) {\r\n this.eventEmitter.fire('query.process', data);\r\n }\r\n\r\n /**\r\n * Fires a QueryChanged event.\r\n * @param params The event parameters.\r\n */\r\n fireChangedEvent(params?: QueryChangeEventParams) \r\n /**\r\n * \r\n * @param params \r\n * @param postpone \r\n * @param wasModified \r\n * @deprecated Method with 'postpone\\' and \\'wasModified\\' args is deprecated. Pass args in params object\r\n */\r\n fireChangedEvent(params?: QueryChangeEventParams, postpone?: number, wasModified?: boolean) \r\n public fireChangedEvent(params?: QueryChangeEventParams, postpone?: number, wasModified?: boolean) {\r\n params = params || { part: QueryChangePart.All };\r\n if (typeof(postpone) != 'undefined' || typeof(wasModified) != 'undefined') {\r\n params.postpone = postpone || 0;\r\n params.wasModified = wasModified;\r\n console.warn('Method with \\'postpone\\' and \\'wasModified\\' args is deprecated. Pass params in data object')\r\n }\r\n\r\n this._isModified = typeof (params.wasModified) != 'undefined'\r\n ? params.wasModified\r\n : true;\r\n\r\n const eventData = params || {\r\n part: QueryChangePart.All \r\n };\r\n \r\n this.eventEmitter.fire('query.change', eventData, params.postpone || 0);\r\n }\r\n\r\n public fireColumnsChangedEvent(action?: QueryChangeAction, column? : QueryColumn | QueryColumn[], justsorted = false){\r\n this.fireChangedEvent({\r\n part: (justsorted) \r\n ? QueryChangePart.SortingColumns\r\n :QueryChangePart.Columns,\r\n action: action,\r\n changee: column\r\n });\r\n }\r\n\r\n public fireConditionsChangedEvent(action?: QueryChangeAction, condition? : Condition | Condition[]){\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Conditions,\r\n action: action,\r\n changee: condition\r\n });\r\n }\r\n\r\n /**\r\n * Runs through condition with this callback.\r\n * @param processCondition The function to process condition.\r\n */\r\n public runThroughConditions(processCondition: (cond: Condition) => void) {\r\n let processGroup = function (predicate: Condition) {\r\n\r\n for (let i = 0; i < predicate.getConditions().length; i++) {\r\n let cond = predicate.getConditions()[i];\r\n if (cond.isGroup()) {\r\n processGroup(cond);\r\n }\r\n else {\r\n if (processCondition)\r\n processCondition(cond);\r\n }\r\n }\r\n };\r\n\r\n processGroup(this.getRootCondition());\r\n }\r\n\r\n /**\r\n * Gets one value for the attribute\r\n * @param attrId The attribute ID.\r\n * @retruns The value.\r\n */\r\n public getOneValueForAttr(attrId: string): string {\r\n let res = null;\r\n this.runThroughConditions(function (cond) {\r\n if (cond.enabled) {\r\n const expr = cond.expressions[0];\r\n const opid = cond.getOperatorId();\r\n if (expr.value == attrId && cond.expressions[1] &&\r\n (opid == \"Equal\" || opid == \"InList\" || opid == \"StartsWith\")) \r\n {\r\n res = cond.expressions[1].value;\r\n }\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Gets root predicate\r\n * @retruns The condition.\r\n */\r\n public getRootCondition(): Condition {\r\n return this.root;\r\n }\r\n\r\n /**\r\n * Add process callback\r\n * @param callback The callback.\r\n * @retruns The callback ID.\r\n */\r\n public addProcessCallback(callback: (event: EqEvent) => void): string {\r\n return this.eventEmitter.subscribe('query.process', callback);\r\n }\r\n\r\n /**\r\n * Remove process callback\r\n * @param callbackId The callback ID.\r\n */\r\n public removeProcessCallback(callbackId: string) {\r\n this.eventEmitter.unsubscribe('query.process', callbackId);\r\n }\r\n\r\n /**\r\n * Add changed callback\r\n * @param callback The callback ID.\r\n */\r\n public addChangedCallback(callback: (event: EqEvent) => void): string {\r\n return this.eventEmitter.subscribe('query.change', callback);\r\n }\r\n\r\n /**\r\n * Remove changed callback\r\n * @param callbackId The callback ID.\r\n */\r\n public removeChangedCallback(callbackId: string) {\r\n this.eventEmitter.unsubscribe('query.change', callbackId); \r\n }\r\n\r\n /**\r\n * Retruns conditions text\r\n */\r\n public getConditionsText() {\r\n const model = this.getModel();\r\n if (!model) return '';\r\n\r\n const getConditionGroupText = (group : Condition) => {\r\n let result = '',\r\n conjKey = \"Conj\" + equtils.linkTypeToStr(group.linkType),\r\n conjText = i18n.getText(conjKey),\r\n condText,\r\n i;\r\n\r\n for (i = 0; i < group.getConditions().length; i++) {\r\n condText = \"\";\r\n let cond = group.getConditions()[i];\r\n if (cond.enabled || typeof(cond.enabled) === \"undefined\" ) {\r\n if (cond.isGroup()) {\r\n condText = getConditionGroupText(cond);\r\n if (condText) {\r\n condText = \"(\" + condText + \")\";\r\n }\r\n }\r\n else {\r\n let opId = cond.getOperatorId();\r\n let operator = model.getOperatorById(opId);\r\n let parts = equtils.parseOperatorFormat(operator);\r\n let plen = parts.length;\r\n\r\n for (let pi = 0; pi < plen; pi++) {\r\n let part = parts[pi];\r\n let txt = part.text;\r\n if (part.type == \"expression\") {\r\n let expr = cond.expressions[part.index];\r\n if (expr.kind == DataKind.Attribute || expr.tag == ExprTag.EntityAttribute) {\r\n let attr = model.getAttributeById(expr.value);\r\n txt = model.getAttributeText(attr, \"{entity} {attr}\");\r\n }\r\n else {\r\n txt = expr.getText();\r\n if (this.model.isDateMacro(txt) || this.model.isTimeMacro(txt)) {\r\n const macroText = txt.substring(3, txt.length - 2);\r\n const res = i18n.getText(macroText);\r\n txt = res || txt;\r\n }\r\n }\r\n }\r\n if (pi > 0) condText += \" \";\r\n condText += txt;\r\n }\r\n }\r\n }\r\n\r\n if (condText) {\r\n if (i > 0 && result) {\r\n result += \" \" + conjText + \" \";\r\n }\r\n result += condText;\r\n }\r\n }\r\n\r\n if (group.linkType == LinkType.None || group.linkType == LinkType.NotAll) {\r\n result = \"not ( \" + result + \" )\";\r\n }\r\n \r\n return result;\r\n };\r\n return getConditionGroupText(this.getRootCondition());\r\n }\r\n\r\n /**\r\n * Retruns conditions text\r\n */\r\n public getConditionsTextAsHtml() {\r\n const model = this.getModel();\r\n if (!model) return '<div class=\"eqjs-query-text\"></div>';\r\n\r\n const quoteExprText = (expr : Expression): string => {\r\n if (expr.kind == DataKind.Query) {\r\n return `<${expr.getText()}>`;\r\n }\r\n else if (expr.kind == DataKind.List ) {\r\n return `[${expr.getText()}]`;\r\n }\r\n else if (expr.dataType == DataType.String \r\n || expr.dataType == DataType.Memo \r\n || expr.dataType == DataType.FixedChar) {\r\n return `"${expr.getText()}"`;\r\n }\r\n else {\r\n let txt = expr.getText();\r\n if (this.model.isDateMacro(txt) || this.model.isTimeMacro(txt)) {\r\n const macroText = txt.substring(3, txt.length - 2);\r\n const res = i18n.getText(macroText);\r\n txt = res || txt;\r\n }\r\n return txt;\r\n }\r\n\r\n }\r\n\r\n const getConditionGroupText = (group: Condition) => {\r\n let result = '',\r\n conjKey = \"Conj\" + equtils.linkTypeToStr(group.linkType),\r\n conjText = `<span class=\"eqjs-query-text-conj\">${i18n.getText(conjKey)}</span>`,\r\n condText,\r\n i;\r\n\r\n for (i = 0; i < group.getConditions().length; i++) {\r\n condText = \"\";\r\n let cond = group.getConditions()[i];\r\n if (cond.enabled || typeof (cond.enabled) === \"undefined\") {\r\n if (cond.isGroup()) {\r\n condText = getConditionGroupText(cond);\r\n if (condText) {\r\n condText = \"(\" + condText + \")\";\r\n }\r\n }\r\n else {\r\n let opId = cond.getOperatorId();\r\n let operator = model.getOperatorById(opId);\r\n let parts = equtils.parseOperatorFormat(operator);\r\n let plen = parts.length;\r\n\r\n for (let pi = 0; pi < plen; pi++) {\r\n let part = parts[pi];\r\n let txt = part.text;\r\n if (part.type == \"expression\") {\r\n let expr = cond.expressions[part.index];\r\n if (expr.kind == DataKind.Attribute || expr.tag == ExprTag.EntityAttribute) {\r\n let attr = model.getAttributeById(expr.value);\r\n txt = `<span class=\"eqjs-query-text-attr\">${model.getAttributeText(attr, \"{entity} {attr}\")}</span>`;\r\n }\r\n else {\r\n txt = `<span class=\"eqjs-query-text-expr\">${quoteExprText(expr)}</span>`;\r\n }\r\n }\r\n else if (part.type == \"operator\") {\r\n txt = `<span class=\"eqjs-query-text-op\">${txt}</span>`;\r\n }\r\n if (pi > 0) condText += \" \";\r\n condText += txt;\r\n }\r\n }\r\n }\r\n\r\n if (condText) {\r\n if (i > 0 && result) {\r\n result += \" \" + conjText + \" \";\r\n }\r\n result += condText;\r\n }\r\n }\r\n\r\n if (group.linkType == LinkType.None || group.linkType == LinkType.NotAll) {\r\n result = \"<span class=\\\"eqjs-query-text-conj\\\">not</span> ( \" + result + \" )\";\r\n }\r\n\r\n return result;\r\n };\r\n return `<div class=\"eqjs-query-text\">${getConditionGroupText(this.getRootCondition())}</div>`;\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\nimport { Query } from '../query/query';\r\nimport { QueryData } from '../query/dto/query_data';\r\n\r\nimport { EqContext } from './context';\r\n\r\nexport interface QueryListItem {\r\n id: string;\r\n name: string;\r\n text?: string;\r\n}\r\n\r\nexport interface BrowserQueryStorageOptions {\r\n keyPrefix?: string;\r\n}\r\n\r\nexport interface GetQueryListOptions {\r\n modelId?: string;\r\n}\r\n\r\nexport interface NewQueryOptions {\r\n queryId?: string;\r\n name?: string;\r\n modelId?: string;\r\n query?: Query;\r\n description?: string;\r\n data?: any;\r\n}\r\n\r\nexport interface LoadQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n}\r\n\r\nexport interface SaveQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n query?: Query;\r\n data?: any;\r\n}\r\n\r\nexport interface RemoveQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n data?: any;\r\n}\r\n\r\nexport interface QueryStorage {\r\n init(options?);\r\n getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]>;\r\n newQuery(options?: NewQueryOptions): Promise<QueryData>;\r\n loadQuery(options?: LoadQueryOptions): Promise<QueryData>;\r\n saveQuery(options?: SaveQueryOptions): Promise<QueryData>;\r\n removeQuery(options?: RemoveQueryOptions): Promise<void>;\r\n}\r\n\r\nexport class BrowserQueryStorage implements QueryStorage {\r\n private queryListKey;\r\n private queryKeyPrefix;\r\n\r\n constructor(protected context: EqContext) {\r\n console.warn('BrowserQueryStorage is used for managing queries');\r\n }\r\n\r\n public init(options?: BrowserQueryStorageOptions) {\r\n let keyPrefix = 'eq';\r\n\r\n if (options && options.keyPrefix) {\r\n keyPrefix = options.keyPrefix;\r\n }\r\n\r\n this.queryListKey = keyPrefix + '-querylist'\r\n this.queryKeyPrefix = keyPrefix;\r\n }\r\n\r\n public getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n resolve(JSON.parse(itemsString));\r\n }\r\n\r\n resolve([]);\r\n } \r\n catch (err) {\r\n reject(err);\r\n };\r\n \r\n });\r\n }\r\n\r\n public newQuery(options?: NewQueryOptions): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const query = new Query(this.context.getModel());\r\n query.reset();\r\n query.setDefaultName();\r\n if (options) {\r\n if (options.query) {\r\n query.loadFromData(options.query.toJSONData());\r\n }\r\n\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n\r\n if (options.name) {\r\n query.setName(options.name);\r\n }\r\n \r\n if (options.description) {\r\n query.setDescription(options.description);\r\n } \r\n }\r\n\r\n this._saveQuery(query);\r\n resolve(query.toJSONData());\r\n });\r\n }\r\n\r\n public loadQuery(options?: LoadQueryOptions): Promise<QueryData> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const queryItem = localStorage.getItem(this.queryKeyPrefix + '-' + options.queryId);\r\n if (queryItem) {\r\n resolve(JSON.parse(queryItem));\r\n }\r\n\r\n throw new Error('Query is not found: ' + options.queryId);\r\n } \r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n public saveQuery(options?: SaveQueryOptions): Promise<QueryData> {\r\n return new Promise<QueryData>((resolve, reject) => {\r\n try {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n const query = options.query || this.context.getQuery();\r\n this._saveQuery(query);\r\n resolve(null);\r\n } \r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n private _saveQuery(query: Query) {\r\n let queryList: QueryListItem[] = []\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n queryList = JSON.parse(itemsString);\r\n }\r\n\r\n let item = dataUtils.findItemById(queryList, query.getId());\r\n if (!item) {\r\n item = { id: query.getId(), name: query.getName(), text: query.getDescription() };\r\n queryList.push(item);\r\n }\r\n item.name = query.getName();\r\n item.text = query.getDescription();\r\n\r\n localStorage.setItem(this.queryListKey, JSON.stringify(queryList));\r\n localStorage.setItem(this.queryKeyPrefix + '-' + query.getId(), query.toJSON());\r\n }\r\n\r\n public removeQuery(options?: RemoveQueryOptions): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n const queryId = options.queryId || this.context.getQuery().getId();\r\n\r\n let queryList: QueryListItem[] = []\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n queryList = JSON.parse(itemsString);\r\n }\r\n queryList = queryList.filter(item => item.id != queryId);\r\n\r\n localStorage.setItem(this.queryListKey, JSON.stringify(queryList));\r\n localStorage.removeItem(this.queryKeyPrefix + '-' + queryId);\r\n\r\n resolve();\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n \r\n}\r\n\r\n","import { ModelPlainData } from '../dm/dto/dm_data';\r\nimport { EqContext } from './context';\r\n\r\nexport interface ModelLoadOptions {\r\n modelId: string;\r\n}\r\n\r\nexport abstract class EqModelLoader {\r\n protected modelPromise: Promise<ModelPlainData> | null = null;\r\n\r\n protected modelLoadingResolveFunc: (value?: ModelPlainData | PromiseLike<ModelPlainData>) => void;\r\n\r\n protected modelLoadingRejectFunc: (reason?: any) => void;\r\n\r\n constructor(protected context: EqContext) {\r\n \r\n }\r\n\r\n public init(options : any) : void {\r\n }\r\n\r\n public getContext() : EqContext {\r\n return this.context;\r\n }\r\n\r\n protected createModelLoadingPromise() : void {\r\n this.modelPromise = new Promise<ModelPlainData>((resolve, reject) => {\r\n this.modelLoadingResolveFunc = resolve;\r\n this.modelLoadingRejectFunc = reject;\r\n });\r\n }\r\n\r\n /**\r\n * Returns the `Promise` of the model loading process \r\n */\r\n public getModelPromise(): Promise<ModelPlainData> {\r\n return this.modelPromise \r\n || Promise.reject(new Error(\"Model has been never loaded.\"));\r\n }\r\n\r\n public startModelLoading(options: ModelLoadOptions): Promise<ModelPlainData> {\r\n this.createModelLoadingPromise();\r\n this.sendLoadModelRequest(options);\r\n return this.modelPromise;\r\n }\r\n\r\n protected abstract sendLoadModelRequest(options);\r\n}","import { EqModelLoader, ModelLoadOptions as LoadModelOptions } from '../main/model_loader';\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EqServerModelLoader extends EqModelLoader {\r\n\r\n constructor(context: EqContext) {\r\n super(context);\r\n }\r\n\r\n public init() {\r\n \r\n }\r\n\r\n protected sendLoadModelRequest(options: LoadModelOptions) {\r\n const context = this.getContext();\r\n\r\n const http = context.getServices().getHttpClient();\r\n const url = context.resolveEndpoint('GetModel', { modelId : options.modelId });\r\n\r\n http.get(url)\r\n .then((responseData) => {\r\n if (!responseData.model) {\r\n this.modelLoadingRejectFunc(new Error('Wrong response format for \"GetModel\" request'));\r\n }\r\n\r\n this.modelLoadingResolveFunc(responseData.model);\r\n })\r\n .catch(error => {\r\n this.modelLoadingRejectFunc(error);\r\n });\r\n }\r\n}\r\n","import { FetchDataOptions, DataFetcher } from '../main/data_fetcher';\r\nimport { EqContext } from '../main/context';\r\nimport { Query } from '../query/query';\r\n\r\nexport class EqServerDataFetcher implements DataFetcher {\r\n constructor(private context: EqContext) {\r\n }\r\n\r\n public fetchData(fetchOptions?: FetchDataOptions): Promise<any> {\r\n const query = fetchOptions.query as Query || this.context.getQuery();\r\n const queryId = query.getId();\r\n\r\n let requestData: any = {\r\n 'options': fetchOptions.options\r\n };\r\n\r\n if (typeof(fetchOptions.queryId) !== 'undefined') {\r\n requestData.queryId = fetchOptions.queryId;\r\n }\r\n else {\r\n requestData.query = query.toJSONData();\r\n }\r\n\r\n if (fetchOptions.debug) {\r\n requestData.debug = fetchOptions.debug;\r\n }\r\n\r\n if (fetchOptions.chunk) {\r\n requestData.chunk = fetchOptions.chunk;\r\n }\r\n\r\n if (fetchOptions.data) {\r\n requestData.data = fetchOptions.data;\r\n }\r\n\r\n if (typeof(fetchOptions.aux) != 'undefined') {\r\n requestData.aux = fetchOptions.aux;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('FetchData', \r\n {modelId: query.getModel().getId(), queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then(data => data);\r\n }\r\n}\r\n","import { EqContext } from '../main/context';\r\nimport { QuerySynchronizer, SyncOptions } from '../main/query_synchronizer'\r\n\r\nexport class EqServerQuerySynchronizer implements QuerySynchronizer {\r\n\r\n constructor(private context : EqContext) {\r\n \r\n }\r\n\r\n public syncQuery(options?: SyncOptions): Promise<any> {\r\n options = options || {};\r\n \r\n const query = options.query || this.context.getQuery();\r\n const ops = options.options || {};\r\n\r\n let requestData: any = {\r\n 'query': query.toJSONData(),\r\n 'options': ops,\r\n };\r\n\r\n if (options.data) {\r\n requestData.data = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('SyncQuery', \r\n { modelId: query.getModel().getId(), queryId: query.getId() });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then(responseData => responseData);\r\n }\r\n\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { EqValueListResolver, LoadValueListOptions, ValueListItem } from '../main/value_list_resolver';\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EqServerValueListResolver implements EqValueListResolver {\r\n\r\n constructor(private context: EqContext) {\r\n }\r\n\r\n public loadValueList(options?: LoadValueListOptions): Promise<ValueListItem[]> {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n\r\n const requestData = dataUtils.assign({ modelId: modelId}, options.params);\r\n const editorId = requestData.editorId;\r\n\r\n const http = this.context.getServices().getHttpClient();\r\n const url = this.context.resolveEndpoint('GetValueList', {modelId: modelId, listId: editorId });\r\n \r\n let queryParams: any = {};\r\n if (options && options.params && options.params.queryParams) {\r\n queryParams = options.params.queryParams;\r\n }\r\n\r\n return http.get(url, { queryParams: queryParams })\r\n .then((responseData) => {\r\n if (responseData && responseData.values) {\r\n return responseData.values;\r\n }\r\n else {\r\n throw new Error('Wrong response format. No \"values\" property');\r\n } \r\n });\r\n }\r\n}","import { GetQueryFileOptions, QueryFileLoader, UploadQueryFileOptions } from '../main/query_file_loader';\r\nimport { EqContext } from '../main/context';\r\nimport { QueryData } from '../query/dto/query_data';\r\n\r\nexport class EqQueryFileLoader implements QueryFileLoader {\r\n\r\n constructor(protected context: EqContext) {}\r\n\r\n getQueryFile(options?: GetQueryFileOptions): Promise<void> {\r\n\r\n const query = options.query || this.context.getQuery();\r\n\r\n const url = this.context.resolveEndpoint('GetQueryFile', {modelId: query.getModel().getId(), \r\n format: options.format || 'xml' });\r\n\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n const actionResult = http.post(url, {\r\n query: query.toJSONData()\r\n });\r\n const request = actionResult.getRequest();\r\n\r\n return actionResult.then((responseData) => {\r\n const blob = new Blob([responseData]);\r\n let fileName = request.getXMLHttpRequest()\r\n .getResponseHeader(\"Content-Disposition\").match(/filename=\"(.*)\"/)[1];\r\n\r\n if (options.fileName) {\r\n fileName = options.fileName \r\n + fileName.substring(fileName.lastIndexOf('.'));\r\n }\r\n\r\n if (window.navigator['msSaveOrOpenBlob']) {\r\n // Internet Explorer\r\n window.navigator['msSaveOrOpenBlob'](blob, fileName);\r\n } else {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style.display = \"none\";\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(a.href);\r\n document.body.removeChild(a);\r\n }\r\n });\r\n }\r\n\r\n uploadQueryFile(options?: UploadQueryFileOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n\r\n const url = this.context.resolveEndpoint('UploadQueryFile', \r\n {modelId: query.getModel().getId() });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, options.data, {\r\n dataType: 'form-data'\r\n })\r\n .then(responseData => {\r\n return responseData.query;\r\n });\r\n \r\n }\r\n}","import { \r\n AggregatesContainer, \r\n AggrCalculationOptions, GroupKey, GroupTotals,\r\n AggregatesCalculator\r\n} from '@easydata/core';\r\n\r\nimport { EqContext } from '../main/context';\r\n\r\ntype LevelData = Map<string, GroupTotals>;\r\n\r\ninterface LevelDescriptor {\r\n receivedCallbacks: Array<(data: LevelData) => void>;\r\n data: LevelData;\r\n}\r\n\r\nexport class EqAggregatesContainer implements AggregatesContainer { \r\n private levels: { [key: number]: LevelDescriptor } = {};\r\n\r\n constructor(protected context: EqContext) { \r\n }\r\n \r\n getAggregateData(level: number, groupKey: GroupKey): Promise<GroupTotals> {\r\n return new Promise<GroupTotals>((resolve, reject) => {\r\n const processFunc = (data) => {\r\n // map values\r\n const keyStr = this.groupKeyToStr(groupKey);\r\n const value = data.get(keyStr);\r\n if (value) {\r\n resolve(value);\r\n }\r\n else {\r\n reject(`Can't find data for ${keyStr}`);\r\n }\r\n }\r\n\r\n const desc = this.getLevelDesc(level, false);\r\n if (desc && desc.data) {\r\n processFunc(desc.data);\r\n }\r\n else {\r\n desc.receivedCallbacks.push(processFunc);\r\n }\r\n });\r\n }\r\n\r\n public setAggregateData(level: number, data: LevelData) {\r\n const desc = this.getLevelDesc(level, true);\r\n desc.data = data;\r\n\r\n if (desc.receivedCallbacks) {\r\n for(const callback of desc.receivedCallbacks) {\r\n callback(desc.data);\r\n }\r\n }\r\n\r\n desc.receivedCallbacks = [];\r\n }\r\n\r\n public updateAggregateData(level: number, groupKey : GroupKey, values: GroupTotals) {\r\n const desc = this.getLevelDesc(level, true);\r\n\r\n const key = this.groupKeyToStr(groupKey);\r\n desc.data.set(key, values);\r\n }\r\n\r\n private groupKeyToStr(groupKey: GroupKey) : string {\r\n return JSON.stringify(groupKey);\r\n }\r\n\r\n private getLevelDesc(level: number, createIfNotExists : boolean) : LevelDescriptor {\r\n let desc = this.levels[level];\r\n if (!desc && createIfNotExists) {\r\n desc = {\r\n receivedCallbacks: [],\r\n data: new Map<string, GroupTotals>()\r\n };\r\n this.levels[level] = desc;\r\n }\r\n return desc;\r\n } \r\n\r\n public clear() {\r\n this.levels = [];\r\n }\r\n}\r\n\r\n\r\nexport class DefaultAggregatesCalculator implements AggregatesCalculator {\r\n private aggrs: AggregatesContainer = null;\r\n\r\n constructor (protected context: EqContext)\r\n { \r\n }\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrs;\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions) {\r\n console.warn(\"Grand totals and sub totals aggregation calculation can be used in Enterprise version only\");\r\n options = options || {};\r\n options.maxLevel = options.maxLevel >= 0\r\n ? options.maxLevel : 0;\r\n\r\n this.aggrs = new EqAggregatesContainer(this.context);\r\n \r\n const query = this.context.createQuery();\r\n query.loadFromData(this.context.getQuery().toJSONData());\r\n\r\n const settings = this.context.getQuery().getAggregationSettings();\r\n\r\n const aggrColId = settings.getAggregates().map(a => a.colId);\r\n const columns = query.getColumns()\r\n .filter(col => aggrColId.indexOf(col.id) < 0);\r\n\r\n for (let i = 0; i < columns.length; i++) {\r\n columns[i].enabled = false;\r\n }\r\n\r\n if (settings.hasGrandTotals()) {\r\n this.aggrs.setAggregateData(0, new Map<string, GroupKey>());\r\n if (options.resultObtained)\r\n options.resultObtained({}, 0);\r\n }\r\n\r\n const groups = settings.getGroups();\r\n for (let level = 1; level <= groups.length && level <= options.maxLevel; level++) {\r\n this.aggrs.setAggregateData(level, new Map<string, GroupTotals>());\r\n if (options.resultObtained)\r\n options.resultObtained({}, level);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n needRecalculation(): boolean {\r\n return true;\r\n }\r\n\r\n reset(): void { \r\n }\r\n}","import { HttpClient, AggregatesCalculator } from '@easydata/core';\r\n\r\nimport { EqContext } from '../main/context';\r\nimport { Query } from '../query/query';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { EqModelLoader } from '../main/model_loader';\r\nimport { DataModelStorage, InMemoryModelStorage } from '../main/model_storage';\r\nimport { QueryStorage, BrowserQueryStorage } from '../main/query_storage';\r\nimport { QuerySynchronizer } from '../main/query_synchronizer';\r\nimport { DataFetcher } from '../main/data_fetcher';\r\nimport { EqValueListResolver } from '../main/value_list_resolver';\r\nimport { QueryFileLoader } from '../main/query_file_loader';\r\nimport { EqServerModelLoader } from '../eqs/eqs_model_loader';\r\nimport { EqServerDataFetcher } from '../eqs/eqs_data_fetcher';\r\nimport { EqServerQuerySynchronizer } from '../eqs/eqs_query_synchronizer';\r\nimport { EqServerValueListResolver } from '../eqs/eqs_value_list_resolver';\r\nimport { EqQueryFileLoader } from '../eqs/eqs_query_file_loader';\r\nimport { DefaultAggregatesCalculator } from '../data/eq_aggr_container';\r\n\r\nexport class EqServiceProvider {\r\n\r\n private httpClient: HttpClient;\r\n\r\n private queryResolver: (context: EqContext) => Query;\r\n\r\n private modelResolver: (context: EqContext) => DataModel;\r\n\r\n private modelStorage : DataModelStorage;\r\n\r\n private modelLoader: EqModelLoader = null;\r\n\r\n private queryStorage: QueryStorage = null;\r\n\r\n private querySynchronizer: QuerySynchronizer = null;\r\n\r\n private dataFetcher: DataFetcher = null;\r\n\r\n private valueListResolver: EqValueListResolver = null;\r\n\r\n private queryFileLoader: QueryFileLoader = null;\r\n\r\n private aggrCalculator: AggregatesCalculator = null;\r\n\r\n private modelStorageResolver: (context: EqContext) => DataModelStorage;\r\n\r\n private modelLoaderResolver: (context: EqContext) => EqModelLoader;\r\n\r\n private queryStorageResolver: (context: EqContext) => QueryStorage;\r\n\r\n private querySynchronizerResolver: (context: EqContext) => QuerySynchronizer;\r\n\r\n private dataFetcherResolver: (context: EqContext) => DataFetcher;\r\n\r\n private vlrResolver:(context: EqContext) => EqValueListResolver;\r\n\r\n private queryFileLoaderResolver: (context: EqContext) => QueryFileLoader;\r\n\r\n private aggrCalculatoResolver: (context: EqContext) => AggregatesCalculator;\r\n\r\n constructor(protected context: EqContext) { \r\n this.httpClient = new HttpClient();\r\n this.httpClient.defaultHeaders['x-eqjs-version'] = '7.2.0'; \r\n\r\n this.modelResolver = (_) => new DataModel();\r\n this.modelStorageResolver = null;\r\n this.queryResolver = (context) => new Query(context.getModel());\r\n this.modelLoaderResolver = (context) => new EqServerModelLoader(context);\r\n this.queryStorageResolver = (context) => new BrowserQueryStorage(context);\r\n this.querySynchronizerResolver = (context) => new EqServerQuerySynchronizer(context);\r\n this.vlrResolver = (context) => new EqServerValueListResolver(context);\r\n this.dataFetcherResolver = (context) => new EqServerDataFetcher(context);\r\n this.queryFileLoaderResolver = (context) => new EqQueryFileLoader(context);\r\n this.aggrCalculatoResolver = (context) => new DefaultAggregatesCalculator(context);\r\n }\r\n\r\n public reset() {\r\n this.modelStorage = null;\r\n this.modelLoader = null;\r\n this.queryStorage = null;\r\n this.querySynchronizer = null;\r\n }\r\n\r\n public getHttpClient(): HttpClient {\r\n return this.httpClient;\r\n }\r\n\r\n public createDataModel(): DataModel {\r\n if (!this.modelResolver) {\r\n throw 'Model resolver is not defined';\r\n }\r\n return this.modelResolver(this.context);\r\n } \r\n \r\n public createQuery(): Query {\r\n if (!this.queryResolver) {\r\n throw 'Query resolver is not defined';\r\n }\r\n return this.queryResolver(this.context);\r\n }\r\n\r\n public getModelLoader(): EqModelLoader {\r\n if (!this.modelLoader) {\r\n if (!this.modelLoaderResolver) {\r\n throw 'ModelLoaderResolver is not defined';\r\n }\r\n this.modelLoader = this.modelLoaderResolver(this.context); \r\n }\r\n return this.modelLoader;\r\n }\r\n\r\n public getModelStorage(): DataModelStorage {\r\n if (!this.modelStorage) {\r\n if (!this.modelStorageResolver) {\r\n throw 'ModelStorageResolver is not defined';\r\n }\r\n this.modelStorage = this.modelStorageResolver(this.context);\r\n }\r\n return this.modelStorage;\r\n }\r\n\r\n public getQueryStorage(): QueryStorage {\r\n if (!this.queryStorage) {\r\n if (!this.queryStorageResolver) {\r\n throw 'QueryStorageResolver is not defined';\r\n }\r\n this.queryStorage = this.queryStorageResolver(this.context); \r\n }\r\n return this.queryStorage;\r\n }\r\n\r\n public getQuerySynchronizer(): QuerySynchronizer {\r\n if (!this.querySynchronizer) {\r\n if (!this.querySynchronizerResolver) {\r\n throw 'QuerySynchronizerResolver is not defined';\r\n }\r\n this.querySynchronizer = this.querySynchronizerResolver(this.context); \r\n }\r\n return this.querySynchronizer;\r\n }\r\n\r\n\r\n public getDataFetcher(): DataFetcher {\r\n if (!this.dataFetcher) {\r\n if (!this.dataFetcherResolver) {\r\n throw 'DataFetcherResolver is not defined';\r\n }\r\n this.dataFetcher = this.dataFetcherResolver(this.context);\r\n }\r\n\r\n return this.dataFetcher;\r\n }\r\n\r\n public getValueListResolver(): EqValueListResolver {\r\n if (!this.valueListResolver) {\r\n if (!this.vlrResolver) {\r\n throw 'Resolver for ValueListResolver is not defined';\r\n }\r\n\r\n this.valueListResolver = this.vlrResolver(this.context);\r\n }\r\n\r\n return this.valueListResolver;\r\n }\r\n\r\n public getQueryFileLoader(): QueryFileLoader {\r\n if (!this.queryFileLoader) {\r\n if (!this.queryFileLoaderResolver) {\r\n throw 'Resolver for QueryFileLoader is not defined';\r\n }\r\n\r\n this.queryFileLoader = this.queryFileLoaderResolver(this.context);\r\n }\r\n\r\n return this.queryFileLoader;\r\n }\r\n\r\n public getAggregatesCalculator(): AggregatesCalculator {\r\n if (!this.aggrCalculator) {\r\n if (!this.aggrCalculatoResolver) {\r\n throw 'Resolver for AggregatesCalculator is not defined';\r\n }\r\n\r\n this.aggrCalculator = this.aggrCalculatoResolver(this.context);\r\n }\r\n\r\n return this.aggrCalculator;\r\n }\r\n \r\n public registerDataModelResolver(resolver: (context: EqContext) => DataModel): void {\r\n this.modelResolver = resolver;\r\n }\r\n\r\n public registerQueryResolver(resolver: (context: EqContext) => Query): void {\r\n this.queryResolver = resolver;\r\n }\r\n\r\n public registerModelLoaderResolver(resolver: (context: EqContext) => EqModelLoader): void {\r\n this.modelLoaderResolver = resolver;\r\n }\r\n\r\n public registerModelStorageResolver(resolver: (context: EqContext) => DataModelStorage): void {\r\n this.modelStorageResolver = resolver;\r\n }\r\n\r\n public registerQueryStorageResolver(resolver: (context: EqContext) => QueryStorage): void {\r\n this.queryStorageResolver = resolver;\r\n }\r\n\r\n public registerDataFetcherResolver(resolver: (context: EqContext) => DataFetcher): void {\r\n this.dataFetcherResolver = resolver;\r\n }\r\n\r\n public registerQuerySyncronizerResolver(resolver: (context: EqContext) => QuerySynchronizer): void {\r\n this.querySynchronizerResolver = resolver;\r\n }\r\n\r\n public registerValueListResolver(resolver: (context: EqContext) => EqValueListResolver): void {\r\n this.vlrResolver = resolver;\r\n }\r\n\r\n public registerQueryFileLoaderResolver(resolver: (context: EqContext) => QueryFileLoader): void {\r\n this.queryFileLoaderResolver = resolver;\r\n }\r\n\r\n public registerAggregatesCalculator(resolver: (context: EqContext) => AggregatesCalculator): void {\r\n this.aggrCalculatoResolver = resolver;\r\n }\r\n}","import {\r\n DataLoader,\r\n DataChunkDescriptor, DataChunk, EasyDataTable\r\n} from '@easydata/core';\r\nimport { ContextFetchDataOptions } from 'src/main/context_options';\r\n\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EasyQueryDataLoader implements DataLoader {\r\n\r\n constructor(private context: EqContext) { }\r\n\r\n private dataLoadPromise: Promise<DataChunk>;\r\n\r\n public loadChunk(chunk?: DataChunkDescriptor): Promise<DataChunk> {\r\n // We have to refactor page logic in view to make it simplier to integrate \r\n // different grids\r\n this.dataLoadPromise = new Promise<DataChunk>((resolve, reject) => {\r\n const fetchOptions : ContextFetchDataOptions = {\r\n chunk: chunk,\r\n success: (result) => {\r\n const dataTable = new EasyDataTable({\r\n loader: this.context.dataLoader, //TODO: Why not just `this`?\r\n chunkSize: this.context.resultTable.chunkSize\r\n });\r\n \r\n const resultSet = result.resultSet;\r\n\r\n for (const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n dataTable.setTotal(result.meta.totalRecords);\r\n for (const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n \r\n resolve({\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !chunk.needTotal || chunk.offset + chunk.limit < totalRecords\r\n });\r\n },\r\n error: (error) => reject(error)\r\n };\r\n \r\n if (this.context.debugMode) {\r\n fetchOptions.debug = `Data Chunk. Offset: ${chunk.offset}`;\r\n }\r\n\r\n this.context.fetchDataChunk(fetchOptions);\r\n });\r\n\r\n return this.dataLoadPromise;\r\n }\r\n}\r\n","/** Represents groups of widgets. Used to identify widgets */\r\nexport enum WidgetGroup {\r\n /** None widget group. */\r\n None = 0,\r\n\r\n /** The group of widgets responsible for the Model. */\r\n Model = 1 << 0,\r\n \r\n /** The group of widgets responsible for the Query. */\r\n Query = 1 << 1,\r\n\r\n /** The group of widgets responsible for the Result. */\r\n Result = 1 << 2,\r\n\r\n /** The group of widgets responsible for the statement. */\r\n Statement = 1 << 3,\r\n\r\n /** The group of widgets responsible for tracking Query status. */\r\n QueryStatus = 1 << 4,\r\n\r\n /** All. */\r\n All = (1 << 16) - 1\r\n}","export enum EqAction {\r\n LoadModel = 'LoadModel',\r\n\r\n LoadQuery = 'LoadQuery',\r\n\r\n LoadQueryList = 'LoadQueryList',\r\n \r\n NewQuery = 'NewQuery',\r\n \r\n SaveQuery = 'SaveQuery',\r\n\r\n RemoveQuery = 'RemoveQuery',\r\n\r\n SyncQuery = 'SyncQuery',\r\n \r\n FetchData = 'FetchData',\r\n\r\n GetValueList = 'GetValueList',\r\n \r\n ExportResult = 'ExportResult',\r\n\r\n GetQueryFile = 'GetQueryFile',\r\n\r\n UploadQueryFile = 'UploadQueryFile'\r\n}","import { utils } from '@easydata/core'\r\n\r\nexport interface DataModelStorageItem {\r\n id : string;\r\n name: string;\r\n description?: string;\r\n}\r\n\r\nexport interface DataModelStorage {\r\n getModels() : Promise<DataModelStorageItem[]>;\r\n}\r\n\r\nexport class InMemoryModelStorage implements DataModelStorage { \r\n private models: DataModelStorageItem[] = [];\r\n constructor(models? : DataModelStorageItem[]) {\r\n if (models) {\r\n utils.assign(this.models, [], models);\r\n }\r\n }\r\n\r\n getModels(): Promise<DataModelStorageItem[]> {\r\n return new Promise((resolve, reject) => {\r\n resolve(this.models)\r\n });\r\n }\r\n}","export enum EqActionResult {\r\n Error = 0,\r\n Success = 1\r\n}\r\n\r\n\r\n/**\r\n * Represents a status message object which is used in different events within the context \r\n */\r\nexport interface ActionStatus {\r\n action: string;\r\n result?: EqActionResult;\r\n text?: string;\r\n sourceError?: Error;\r\n}\r\n\r\n\r\n\r\n","import { EqExporter, ExportOptions } from '../export/exporter'\r\nimport { EqContext } from '../main/context'\r\n\r\nexport class EqServerExporter implements EqExporter {\r\n\r\n private format: string;\r\n private responseType?: XMLHttpRequestResponseType;\r\n\r\n private context: EqContext;\r\n\r\n constructor(context: EqContext) {\r\n this.context = context;\r\n }\r\n\r\n public setFormat(format: string, responseType?: XMLHttpRequestResponseType) {\r\n this.format = format;\r\n this.responseType = responseType;\r\n }\r\n\r\n public export(exportOptions?: ExportOptions): Promise<any> {\r\n exportOptions = exportOptions || {};\r\n const http = this.context.getServices().getHttpClient();\r\n const format = this.format || \"csv\";\r\n\r\n const query = exportOptions.query || this.context.getQuery();\r\n const modelId = query.getModel().getId();\r\n\r\n let requestData: any = {\r\n 'settings': exportOptions.settings,\r\n }\r\n\r\n if (typeof(exportOptions.queryId) !== 'undefined') {\r\n requestData.queryId = exportOptions.queryId;\r\n }\r\n else {\r\n requestData.query = query.toJSONData();\r\n }\r\n\r\n const url = this.context.resolveEndpoint('ExportResult',\r\n {modelId: modelId, format: format });\r\n const actionResult = http.post(url, requestData, { responseType: this.responseType });\r\n\r\n const request = actionResult.getRequest();\r\n\r\n return actionResult.then((responseData) => {\r\n const blob = new Blob([responseData]);\r\n const filename = request.getXMLHttpRequest()\r\n .getResponseHeader(\"Content-Disposition\").match(/filename=\"(.*)\"/)[1];\r\n\r\n if (window.navigator['msSaveOrOpenBlob']) {\r\n // Internet Explorer\r\n window.navigator['msSaveOrOpenBlob'](blob, filename);\r\n } \r\n else {\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style .display= \"none\";\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = filename;\r\n a.click();\r\n window.URL.revokeObjectURL(a.href);\r\n document.body.removeChild(a);\r\n }\r\n });\r\n }\r\n}","import { \r\n EasyDataTable, EventEmitter, \r\n utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\n\r\nimport { EqServiceProvider } from '../common/eq_services';\r\n\r\nimport { DataModel } from '../dm/data_model';\r\nimport { Query } from '../query/query';\r\nimport { QueryChangePart } from '../query/query_events';\r\n\r\nimport { Widget } from './widget';\r\nimport { \r\n ContextExportResultOptions, ContextFetchDataOptions, \r\n ContextGetQueryFileOptions, ContextLoadModelOptions, \r\n ContextLoadQueryListOptions, ContextLoadQueryOptions, \r\n ContextLoadValueListOptions, ContextNewQueryOptions, \r\n ContextRemoveQueryOptions, ContextSaveQueryOptions, \r\n ContextSyncQueryOptions, ContextUploadQueryFileOptions, \r\n EqContextOptions\r\n} from './context_options';\r\nimport { ExternalListCache } from './list_cache';\r\nimport { ActionStatus, EqActionResult } from './action';\r\n\r\nimport { QueryData } from '../query/dto/query_data';\r\nimport { ModelPlainData } from '../dm/dto/dm_data';\r\n\r\nimport { WidgetGroup } from '../types/widget_group';\r\nimport { equtils } from '../utils/utils';\r\nimport { EqAction } from './eq_actions';\r\nimport { EqExporter} from '../export/exporter';\r\n\r\nimport { EqServerExporter } from '../eqs/eqs_exporter';\r\nimport { EasyQueryDataLoader } from '../data/eq_data_loader';\r\nimport { LoadValueListParams, ValueListItem } from './value_list_resolver';\r\n\r\ntype EqExporterResolver = (context: EqContext) => EqExporter;\r\n\r\n/**\r\n * Encapsulates all information about EasyQuery components on some webpage\r\n * and provides some basic operation over those components\r\n * Each context includes the following main components:\r\n * - one data model, \r\n * - one query, \r\n * - one result set \r\n * - several UI widgets. \r\n */\r\nexport class EqContext {\r\n private servicesInitialized = false;\r\n\r\n private eqServices : EqServiceProvider;\r\n\r\n private internalListCache: any = {};\r\n private externalListCache?: ExternalListCache;\r\n\r\n private dataModel: DataModel;\r\n \r\n public defaultModelId?: string;\r\n\r\n private query: Query;\r\n\r\n public defaultQueryId?: string;\r\n\r\n public initialQuery?: QueryData;\r\n\r\n public resultTable: EasyDataTable;\r\n\r\n public dataLoader: EasyQueryDataLoader;\r\n\r\n public resultContent?: string;\r\n\r\n public resultStatement?: string;\r\n\r\n private widgets: Array<Widget>;\r\n\r\n private eventEmitter: EventEmitter;\r\n\r\n private errorHandlerId : string;\r\n\r\n public clientListRequestHandler: (data: any, callback: (list: any) => void ) => boolean;\r\n\r\n public loadModelOnStart: boolean = true;\r\n public loadQueryOnStart: boolean = false;\r\n\r\n private exporters: Map<string, EqExporterResolver>;\r\n private endpoints: Map<string, string>;\r\n\r\n public useStoredQueryOnFetch = false;\r\n\r\n public debugMode: boolean = false;\r\n\r\n /**\r\n * Tuners.\r\n * Each tuner is a function which are called before sending a request to the server\r\n */\r\n private beforeLoadModel?: (context: EqContext, options?: ContextLoadModelOptions) => void;\r\n private beforeSyncQuery?: (context: EqContext, options?: ContextSyncQueryOptions) => void;\r\n private beforeLoadQuery?: (context: EqContext, options?: ContextLoadQueryOptions) => void;\r\n private beforeFetchData?: (context: EqContext, options?: ContextFetchDataOptions) => void;\r\n private beforeExportResult?: (context: EqContext, options?: ContextExportResultOptions) => void;\r\n\r\n\r\n private afterGroupFetch?: (result?:any, level?: number) => void;\r\n\r\n constructor() {\r\n this.eqServices = new EqServiceProvider(this);\r\n\r\n this.widgets = new Array<Widget>();\r\n this.eventEmitter = new EventEmitter(this);\r\n\r\n this.exporters = new Map<string, EqExporterResolver>();\r\n this.endpoints = new Map<EqEndpointKey, string>();\r\n\r\n this.dataLoader = new EasyQueryDataLoader(this);\r\n\r\n this.resultTable = new EasyDataTable({\r\n loader: this.dataLoader,\r\n onUpdate: this.onResultTableUpdate.bind(this)\r\n });\r\n this.resultTable.id = 'ResultTable';\r\n\r\n this.errorHandlerId = this.addEventListener('error', (context: EqContext, status: ActionStatus) => {\r\n status.result = EqActionResult.Error;\r\n const msgTitle = status.action ? status.action + ' error' : 'Error';\r\n let msgText = status.text ? status.text : '';\r\n if (status.sourceError && status.sourceError.message !== msgText) {\r\n msgText += '\\n' + status.sourceError;\r\n }\r\n console.error(msgTitle + ': ' + msgText);\r\n });\r\n }\r\n\r\n public getServices() : EqServiceProvider {\r\n return this.eqServices;\r\n }\r\n\r\n public registerExporter(format: string, resolver: EqExporterResolver) {\r\n this.exporters.set(format, resolver);\r\n }\r\n\r\n public registerServerExporter(format: string, responseType: XMLHttpRequestResponseType) {\r\n this.registerExporter(format, (context) => {\r\n const exporter = new EqServerExporter(context);\r\n exporter.setFormat(format, responseType);\r\n return exporter;\r\n });\r\n }\r\n\r\n public getExporter(format: string): EqExporter | null {\r\n const resolver = this.exporters.get(format);\r\n if (resolver) {\r\n return resolver(this);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getExportFormats(): string[] {\r\n return Array.from(this.exporters.keys());\r\n }\r\n\r\n public addDefaultExporters() {\r\n this.registerServerExporter('csv', '');\r\n\r\n this.registerServerExporter('excel-html', '');\r\n }\r\n\r\n //----------- endpoint processing functions --------------\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EqEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EqEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.getModel().getId();\r\n }\r\n else if (opt == 'queryId') {\r\n optVal = this.getQuery().getId();\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public setEndpoint(key: EqEndpointKey, value: string) : void\r\n public setEndpoint(key: EqEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EqEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EqEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetModel', equtils.combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('GetQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('SaveQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('SyncQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}/sync'));\r\n this.setEnpointIfNotExist('NewQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries'));\r\n this.setEnpointIfNotExist('RemoveQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('GetQueryList', equtils.combinePath(endpointBase, 'models/{modelId}/queries'));\r\n this.setEnpointIfNotExist('FetchData', equtils.combinePath(endpointBase, 'models/{modelId}/fetch'));\r\n this.setEnpointIfNotExist('GetValueList', equtils.combinePath(endpointBase, 'models/{modelId}/valuelists/{listId}'));\r\n this.setEnpointIfNotExist('ExportResult', equtils.combinePath(endpointBase, 'models/{modelId}/export/{format}'));\r\n this.setEnpointIfNotExist('GetQueryFile', equtils.combinePath(endpointBase, 'models/{modelId}/getqueryfile/{format}'));\r\n this.setEnpointIfNotExist('UploadQueryFile', equtils.combinePath(endpointBase, 'models/{modelId}/uploadqueryfile'));\r\n }\r\n\r\n private elasticPaging: boolean = false;\r\n\r\n public initStart(): void {\r\n this.servicesInitialized = true;\r\n }\r\n\r\n /**\r\n * Initializes the context\r\n * @param options \r\n */\r\n public init(options?: EqContextOptions) {\r\n if (!this.servicesInitialized)\r\n this.initStart();\r\n \r\n options = options || {};\r\n\r\n if (typeof(options.debugMode) !== 'undefined') {\r\n this.debugMode = options.debugMode;\r\n }\r\n\r\n if (typeof(options.chunkSize) !== 'undefined') {\r\n this.resultTable.chunkSize = options.chunkSize;\r\n }\r\n\r\n if (typeof (options.elasticPaging) !== 'undefined') {\r\n this.elasticPaging = options.elasticPaging;\r\n }\r\n \r\n if (options.listCache) {\r\n this.setExternalListCache(options.listCache);\r\n }\r\n \r\n if (options.locale) {\r\n i18n.setCurrentLocale(options.locale);\r\n }\r\n\r\n if (options.localeSettings) {\r\n i18n.updateLocaleSettings(options.localeSettings);\r\n }\r\n\r\n if (options.endpoint) {\r\n this.baseEndpoint = options.endpoint;\r\n console.warn('The `endpoint` option is deprecated.\\n' \r\n + 'Please use `context.useEndpoint(endpointURL)` function instead.');\r\n }\r\n\r\n this.setDefaultEndpoints(this.baseEndpoint);\r\n\r\n if (options.modelStorageResolver) {\r\n const eqServices = this.getServices()\r\n eqServices.registerModelStorageResolver(options.modelStorageResolver);\r\n }\r\n\r\n this.loadQueryOnStart = false;\r\n if (options.loadQueryOnStart) {\r\n this.loadQueryOnStart = options.loadQueryOnStart;\r\n }\r\n\r\n this.loadModelOnStart = true;\r\n if (typeof options.loadModelOnStart !== 'undefined') {\r\n this.loadModelOnStart = options.loadModelOnStart;\r\n }\r\n\r\n if (options.handlers) {\r\n if (options.handlers.onInit) {\r\n this.addEventListener('ready', options.handlers.onInit);\r\n }\r\n\r\n if (options.handlers.afterLoadModel) {\r\n this.addEventListener('loadModel', options.handlers.afterLoadModel);\r\n }\r\n\r\n if (options.handlers.afterLoadQuery) {\r\n this.addEventListener('loadQuery', options.handlers.afterLoadQuery);\r\n }\r\n\r\n if (options.handlers.afterSyncQuery) {\r\n this.addEventListener('syncQuery', options.handlers.afterSyncQuery);\r\n }\r\n\r\n if (options.handlers.afterFetchData) {\r\n this.addEventListener('fetchData', options.handlers.afterFetchData);\r\n }\r\n\r\n if (options.handlers.afterExportResult) {\r\n this.addEventListener('exportResult', options.handlers.afterExportResult);\r\n }\r\n\r\n if (options.handlers.onProcessStart) {\r\n this.addEventListener('processStart', options.handlers.onProcessStart);\r\n }\r\n\r\n if (options.handlers.onProcessEnd) {\r\n this.addEventListener('processEnd', options.handlers.onProcessEnd);\r\n }\r\n\r\n if (options.handlers.onError) {\r\n this.removeEventListener('error', this.errorHandlerId);\r\n this.addEventListener('error', options.handlers.onError);\r\n } \r\n\r\n if (options.handlers.onListRequest) {\r\n this.clientListRequestHandler = options.handlers.onListRequest;\r\n }\r\n\r\n if (options.handlers.beforeLoadModel) {\r\n this.beforeLoadModel = options.handlers.beforeLoadModel;\r\n }\r\n\r\n if (options.handlers.beforeLoadQuery) {\r\n this.beforeLoadQuery = options.handlers.beforeLoadQuery;\r\n }\r\n\r\n if (options.handlers.beforeSyncQuery) {\r\n this.beforeSyncQuery = options.handlers.beforeSyncQuery;\r\n }\r\n\r\n if (options.handlers.beforeFetchData) {\r\n this.beforeFetchData = options.handlers.beforeFetchData;\r\n }\r\n\r\n if (options.handlers.beforeExportResult) {\r\n this.beforeExportResult = options.handlers.beforeExportResult;\r\n }\r\n }\r\n \r\n this.initialQuery = options.initialQuery;\r\n\r\n this.defaultQueryId = options.defaultQueryId || '';\r\n\r\n this.defaultModelId = options.defaultModelId || '__default';\r\n\r\n const modelLoader = this.eqServices.getModelLoader();\r\n modelLoader.init(options);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.init(options);\r\n\r\n if (options.useDefaultExporters !== false) {\r\n this.addDefaultExporters();\r\n }\r\n\r\n if (options.serverExporters) {\r\n for (const format of options.serverExporters) {\r\n const responseType = format == 'csv' || format == 'excel-html' ? '' : 'arraybuffer';\r\n this.registerServerExporter(format, responseType);\r\n }\r\n }\r\n\r\n const query = this.getQuery();\r\n\r\n if (options.defaultQueryId) {\r\n query.setId(options.defaultQueryId);\r\n }\r\n\r\n //init widgets\r\n this.widgets.forEach((widget) => {\r\n let widgetOptions = {}; \r\n if (options.widgets && options.widgets[widget.getWidgetType()]) {\r\n widgetOptions = options.widgets[widget.getWidgetType()];\r\n }\r\n widget.init(this, widgetOptions);\r\n });\r\n\r\n if (this.loadModelOnStart) {\r\n this.loadDefaultModel();\r\n }\r\n else {\r\n this.fireEvent('ready');\r\n }\r\n }\r\n\r\n /**\r\n * Sets endpoint for all EasyQuery actions. Should be called before `init` and \r\n * `useEnterprise` methods\r\n * @param endpoint \r\n * @example \r\n * ```\r\n * view.getContext()\r\n * .useEndpoint('/api/easyquery')\r\n * .useEnterprise(function () {\r\n * view.init();\r\n * });\r\n * ```\r\n */\r\n public useEndpoint(endpoint: string): EqContext {\r\n this.baseEndpoint = endpoint;\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new widget to the context. \r\n * After that the widget will start to receive messages from other context components.\r\n * @param widget \r\n */\r\n public addWidget(widget: Widget) {\r\n this.widgets.push(widget);\r\n }\r\n\r\n /**\r\n * Returns all widgets with current type.\r\n * @param widgetType The widget type\r\n */\r\n public getAllWidgetsByType(widgetType: string): Widget[] {\r\n return this.widgets\r\n .filter(widget => widget.getWidgetType() === widgetType);\r\n }\r\n\r\n /**\r\n * Returns first registerd widget with current type\r\n * @param widgetType The widget type\r\n */\r\n public getWidgetByType(widgetType: string): Widget | null {\r\n const widgets = this.getAllWidgetsByType(widgetType);\r\n return widgets.length > 0 ? widgets[0] : null;\r\n }\r\n\r\n /**\r\n * This method is called automatically when some change was made either in context's data model or query\r\n * @param groups \r\n */\r\n public refreshWidgets(groups: WidgetGroup = WidgetGroup.All) {\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.refresh();\r\n }\r\n }); \r\n }\r\n\r\n /**\r\n * Register a new handler for 'query changed' event\r\n * @param callback \r\n */\r\n public addQueryChangedCallback(callback) {\r\n this.getQuery().addChangedCallback(callback);\r\n }\r\n\r\n /**\r\n * Removes the function from the list of registerd handlers for 'query changed' event\r\n * @param callback \r\n */\r\n public removeQueryChangedCallback(callback) {\r\n this.getQuery().removeChangedCallback(callback);\r\n }\r\n\r\n /**\r\n * Creates a new query object using the current instance of EqServices\r\n */\r\n public createQuery() : Query {\r\n return this.eqServices.createQuery();\r\n }\r\n\r\n /**\r\n * Gets the current query\r\n */\r\n public getQuery(): Query {\r\n if (!this.query) {\r\n if (!this.servicesInitialized) {\r\n throw new Error(\"Can't create query until the context is initialized\");\r\n }\r\n this.query = this.createQuery();\r\n }\r\n return this.query;\r\n }\r\n\r\n /**\r\n * Gets the current data model\r\n */\r\n public getModel(): DataModel {\r\n if (!this.dataModel) {\r\n this.dataModel = this.eqServices.createDataModel();\r\n }\r\n return this.dataModel;\r\n }\r\n\r\n /** \r\n * Sets the content of the current data model \r\n */\r\n public loadModelFromData(modelPlainData: ModelPlainData){\r\n this.getQuery().loadModelData(modelPlainData);\r\n this.dataModel = this.getQuery().getModel();\r\n }\r\n\r\n /**\r\n * Sets the ID of the default model\r\n * @param modelId \r\n */\r\n public setDefaultModelId(modelId: string) {\r\n this.defaultModelId = modelId;\r\n }\r\n \r\n\r\n /**\r\n * Notifies context components about starting of some long process (e.g. model loading)\r\n * This method raises onProcessStart event in the context and all its widgets \r\n * @param message \r\n * @param groups \r\n */\r\n public startProcess(message: ActionStatus, groups?: WidgetGroup) {\r\n this.eventEmitter.fire('processStart', message);\r\n\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.onProcessStart();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Notifies all context components about the finishing of some long process\r\n * @param status\r\n * @param groups \r\n */\r\n public endProcess(status: ActionStatus, groups?: WidgetGroup) { \r\n this.eventEmitter.fire('processEnd', status);\r\n\r\n if (status.result === EqActionResult.Error) {\r\n this.throwError(status);\r\n }\r\n\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.onProcessEnd();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Throws the error passed in the function parameter.\r\n * If onError event handler is defined - we call that method. \r\n * Otherwise - just place the error message to the browser console.\r\n * @param error \r\n */\r\n public throwError(status: ActionStatus) {\r\n status.result = EqActionResult.Error;\r\n this.eventEmitter.fire('error', status);\r\n }\r\n\r\n /**\r\n * If `defaultModelId` property is define - this method calls `loadModel` function in the broker \r\n * to load the model with such ID.\r\n * \r\n */\r\n public loadDefaultModel() {\r\n this.loadModel({\r\n modelId: this.defaultModelId,\r\n silent: true,\r\n success: () => {\r\n this.refreshWidgets(WidgetGroup.Model);\r\n\r\n let query = this.getQuery();\r\n this.fireEvent('initialModelLoad');\r\n\r\n if (this.initialQuery) {\r\n query.loadFromData(this.initialQuery, {\r\n changeStatus: false\r\n });\r\n }\r\n\r\n if (this.loadQueryOnStart) {\r\n this.loadQuery({\r\n queryId: this.defaultQueryId,\r\n modelId: this.defaultModelId,\r\n success: () => {\r\n this.refreshWidgets(WidgetGroup.Query);\r\n //if we load query on start - then we should call 'ready' event only after its successful loading\r\n this.fireEvent('ready');\r\n }\r\n });\r\n }\r\n else {\r\n this.refreshWidgets(WidgetGroup.Query);\r\n this.fireEvent('ready');\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Clears the content of the current query\r\n */\r\n public clearQuery() {\r\n const query = this.getQuery();\r\n query.clear();\r\n query.fireChangedEvent({\r\n part: QueryChangePart.All\r\n });\r\n }\r\n\r\n /**\r\n * Clears all query results (the data set and the statement, if any)\r\n */\r\n public clearResult() {\r\n this.resultTable.clear(); // do not set resultTable to null. Just clear\r\n this.resultStatement = null;\r\n this.resultContent = null; \r\n }\r\n\r\n /**\r\n * Sets the external 'list cache' provider - an object which implements `ExternalListCache` inteface\r\n * @param cache \r\n */\r\n public setExternalListCache(cache: ExternalListCache) {\r\n this.externalListCache = cache;\r\n }\r\n\r\n private getListFromCache(params: LoadValueListParams) {\r\n const key = this.getListCacheKey(params);\r\n if(this.externalListCache) {\r\n return this.externalListCache.get(key);\r\n }\r\n else {\r\n return this.internalListCache[key];\r\n }\r\n }\r\n\r\n private getListCacheKey(params: LoadValueListParams) {\r\n let key: string = params.listName == 'SQL' ? 'SQL_' + params.editorId : params.listName;\r\n\r\n if (params.queryParams) {\r\n key += '_' + Object.keys(params.queryParams).filter(k => k != 'listName')\r\n .map(k => params.queryParams[k])\r\n .join('_');\r\n } \r\n\r\n return key;\r\n }\r\n\r\n private addListToCache (params, list) {\r\n const key = this.getListCacheKey(params);\r\n\r\n if(this.externalListCache) {\r\n this.externalListCache.set(key, list);\r\n }\r\n else {\r\n this.internalListCache[key] = list;\r\n }\r\n }\r\n\r\n /**\r\n * Clears the current list cache.\r\n */\r\n public resetListCache () {\r\n if(this.externalListCache) {\r\n this.externalListCache.clear();\r\n }\r\n else {\r\n this.internalListCache = {};\r\n }\r\n }\r\n\r\n /**\r\n * Gets the handler for 'GetList' requests\r\n */\r\n public getListRequestHandler(): any {\r\n return this._listRequestHandler;\r\n }\r\n\r\n private _predefinedListRequestHandlers: any = {\r\n '_DSDE': (params: ListRequestHandlerParams, onResult: (values: ValueListItem []) => void) => {\r\n const data = this.getModel().getAllDateMacros()\r\n .map(macroId => { \r\n return { id: '${{' + macroId + '}}', text: i18n.getText(macroId) } \r\n });\r\n onResult(data);\r\n return true;\r\n },\r\n '_DSTE': (params: ListRequestHandlerParams, onResult: (values: ValueListItem []) => void) => {\r\n const data = this.getModel().getAllTimeMacros()\r\n .map(macroId => { \r\n return { id: '${{' + macroId + '}}', text: i18n.getText(macroId) } \r\n });\r\n onResult(data);\r\n return true;\r\n }\r\n };\r\n\r\n\r\n private _listRequestHandler = (params: ListRequestHandlerParams, \r\n onResult: (values: ValueListItem[]) => void) => {\r\n\r\n if (params == null || !params.listName)\r\n return;\r\n\r\n const query = this.getQuery();\r\n const newParams = dataUtils.assign({ listName: params.listName }, params.editorParams);\r\n const procParams: any = {};\r\n const attrPattern = /@{{(.+?)}}/;\r\n\r\n for (const prop in newParams) {\r\n if (!procParams[prop])\r\n continue;\r\n\r\n let dynamicParam = newParams[prop].match(attrPattern);\r\n if (dynamicParam) {\r\n let paramValue = query.getOneValueForAttr(dynamicParam[1]);\r\n if (!paramValue) {\r\n paramValue = '';\r\n }\r\n procParams[prop] = newParams[prop].replace(attrPattern, paramValue);\r\n }\r\n }\r\n\r\n const requestParams = {\r\n listName: procParams.listName,\r\n editorId: params.editorId,\r\n queryParams: procParams\r\n };\r\n\r\n let list = this.getListFromCache(params);\r\n if (list && list.length > 0) {\r\n onResult(list);\r\n return;\r\n }\r\n\r\n let processed = false;\r\n\r\n const predefinedHandler = this._predefinedListRequestHandlers[params.editorId];\r\n if (predefinedHandler) {\r\n processed = predefinedHandler(params, onResult);\r\n }\r\n \r\n if (!processed && this.clientListRequestHandler) {\r\n processed = this.clientListRequestHandler(params, onResult);\r\n }\r\n\r\n if (!processed) {\r\n this.loadValueList({\r\n params: requestParams,\r\n success: (data) => {\r\n if (data) {\r\n this.addListToCache(params, data);\r\n }\r\n\r\n onResult(data);\r\n },\r\n error: (message) => {\r\n onResult(null);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Adds the translations of the EasyQuery messages for some locale\r\n * @param locale - the ISO code of the locale (like `en` or `uk`)\r\n * @param localeInfo - Locale settings and translations of EasyQuery texts and messages.\r\n * We expected an object with the struture of LocaleInfo interface here. \r\n */\r\n public addLocale(locale: string, localeInfo: i18n.LocaleInfo) {\r\n i18n.addLocale(locale, localeInfo);\r\n }\r\n\r\n /**\r\n * Adds event listener for event type.\r\n * @param eventType The event type\r\n * @param handler The handler for event\r\n */\r\n public addEventListener(eventType: 'ready' | 'loadModel' | 'initialModelLoad' | 'loadQuery' \r\n | 'syncQuery' | 'fetchData' | 'exportResult', handler: (context: EqContext) => void): string;\r\n public addEventListener(eventType: 'processStart' | 'processEnd', handler: (context: EqContext, status: ActionStatus) => void): string;\r\n public addEventListener(eventType: 'error', handler: (context: EqContext, status: ActionStatus) => void): string;\r\n public addEventListener(eventType: EqContextEventType | string, handler: (context: EqContext, data?: any) => void): string\r\n {\r\n return this.eventEmitter.subscribe(eventType, (event) => handler(this, event.data));\r\n }\r\n\r\n /**\r\n * Remove event handler for event type .\r\n * @param eventType The event type.\r\n * @param handlerId The handler id.\r\n */\r\n public removeEventListener(eventType: string, handlerId: string) {\r\n this.eventEmitter.unsubscribe(eventType, handlerId);\r\n } \r\n\r\n /**\r\n * Fires event.\r\n * @param eventType The event type.\r\n */\r\n public fireEvent(eventType: 'ready' | 'loadModel' | 'initialModelLoad' | 'loadQuery' | 'syncQuery' | 'fetchData' | 'exportResult');\r\n public fireEvent(eventType: 'processStart' | 'processEnd', data: ActionStatus);\r\n public fireEvent(eventType: 'error', data: Error);\r\n public fireEvent(eventType: EqContextEventType | string, data?: any) {\r\n this.eventEmitter.fire(eventType, data);\r\n }\r\n \r\n private baseEndpoint: string = 'api/easyquery';\r\n\r\n public getBaseEndpoint() {\r\n return this.baseEndpoint;\r\n } \r\n \r\n /**\r\n * Sends a `loadValueList` requesthe server and processes the response.\r\n * @param options A map of options to pass to `loadValueList` function.\r\n */\r\n public loadValueList(options?: ContextLoadValueListOptions) {\r\n options = options || {};\r\n\r\n this.startProcess({\r\n action: EqAction.GetValueList, \r\n text: 'Loading values'\r\n }, WidgetGroup.Result);\r\n\r\n const valueListResolver = this.eqServices.getValueListResolver();\r\n valueListResolver.loadValueList(options)\r\n .then((values) => {\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.GetValueList, \r\n text: 'Values loaded'\r\n }, WidgetGroup.Result);\r\n \r\n if (options.success) {\r\n options.success(values);\r\n }\r\n })\r\n .catch((error) => {\r\n const editorId = options && options.params ? options.params.editorId : 'undefined';\r\n const errorMessage = `Can't load the value list for editor ${editorId}.\\n ${error.message}`\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.GetValueList, \r\n text: errorMessage,\r\n sourceError: error \r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'GetValueList');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Starts the process of the model loading.\r\n * This method can initiate a request to EasyQueryServer backend or get the model from OData or GraphQL endpoint \r\n * The content of the `options` parameter depends on concrete loader implementation.\r\n * @param options A map of options to pass to `loadModel` function (can be ommited)\r\n * @example \r\n * context.loadModel()\r\n * .then(model => {\r\n * alert(\"Model loaded!\");\r\n * });\r\n */\r\n public loadModel(options?: ContextLoadModelOptions): Promise<DataModel> {\r\n\r\n if (this.beforeLoadModel) {\r\n this.beforeLoadModel(this, options)\r\n }\r\n\r\n const modelId = options.modelId || '__default';\r\n const silent = options.silent || false;\r\n\r\n this.startProcess({\r\n action: EqAction.LoadModel,\r\n text: 'Loading model: ' + modelId\r\n }, WidgetGroup.Model)\r\n\r\n const modelLoader = this.eqServices.getModelLoader();\r\n return modelLoader.startModelLoading(options)\r\n .then((value) => {\r\n\r\n if (value) {\r\n this.loadModelFromData(value);\r\n\r\n if (this.dataModel.isEmpty()) {\r\n console.warn(`Empty model has been loaded. Model ID: ${this.dataModel.getId()}`);\r\n }\r\n }\r\n else {\r\n console.warn('Model has not been changed.');\r\n }\r\n\r\n\r\n this.fireEvent('loadModel');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.LoadModel,\r\n text: 'Model loaded: ' + modelId\r\n }, WidgetGroup.Model);\r\n\r\n if (!silent) {\r\n this.clearQuery();\r\n this.clearResult();\r\n\r\n this.refreshWidgets();\r\n }\r\n\r\n if (options.success) {\r\n options.success(this.getModel());\r\n }\r\n\r\n return this.getModel();\r\n })\r\n .catch(error => {\r\n const errorMessage = `Can't load model ${modelId}.\\n ${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.LoadModel,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Model);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, \"LoadModel\");\r\n }\r\n\r\n return this.getModel();\r\n });\r\n }\r\n\r\n public callWhenModelLoaded(callFunc: any) : void {\r\n const modelLoader = this.eqServices.getModelLoader();\r\n\r\n modelLoader.getModelPromise().then(() => {\r\n callFunc();\r\n });\r\n }\r\n\r\n /**\r\n * Loads the query \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks and `queryId` property of the query to load.\r\n * @example\r\n * context.loadQuery({\r\n * queryId: \"query-id\"\r\n * });\r\n */\r\n public loadQuery(options?: ContextLoadQueryOptions) {\r\n options = options || {};\r\n const modelLoader = this.eqServices.getModelLoader();\r\n\r\n this.clearResult();\r\n\r\n modelLoader.getModelPromise()\r\n .then(() => {\r\n options = options || {};\r\n \r\n const queryId = options.queryId;\r\n const silent = options.silent || false;\r\n \r\n if (this.beforeLoadQuery) {\r\n this.beforeLoadQuery(this, options);\r\n }\r\n\r\n this.startProcess({\r\n action: EqAction.LoadQuery,\r\n text: \"Query loading: \" + queryId\r\n }, WidgetGroup.Query);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.loadQuery(options)\r\n .then((data) => {\r\n\r\n if (data) {\r\n this.query.loadFromData(data, {\r\n validate: false\r\n });\r\n }\r\n\r\n this.fireEvent('loadQuery');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.LoadQuery,\r\n text: 'Query loaded: ' + queryId\r\n }, WidgetGroup.Query);\r\n\r\n this.query.resetModified();\r\n\r\n if (!silent) {\r\n this.query.fireChangedEvent({\r\n part: QueryChangePart.Properties,\r\n wasModified: this.query.isModified()\r\n });\r\n\r\n this.refreshWidgets();\r\n }\r\n\r\n if (options.success) {\r\n options.success(this.query);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const query = this.getQuery();\r\n\r\n error.message = \"Can't load query [\" + query.getId() + \"]\\n\" + (error.message || \"\");\r\n \r\n if (options.error) {\r\n options.error(error.message, EqAction.LoadQuery);\r\n }\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.LoadQuery,\r\n text: error.message,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n /**\r\n * Loads the list of queries available for the current user. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks\r\n */\r\n public loadQueryList(options?: ContextLoadQueryListOptions) {\r\n const modelLoader = this.eqServices.getModelLoader();\r\n modelLoader.getModelPromise()\r\n .then(() => {\r\n this.startQueryListLoading(options);\r\n })\r\n .catch((error) => {\r\n const errorMessage = `Can't load the list of available queries.\\n ${error.message}`;\r\n this.throwError({\r\n action: EqAction.LoadQueryList,\r\n text: errorMessage,\r\n sourceError: error\r\n });\r\n }) \r\n }\r\n\r\n protected startQueryListLoading(options?: ContextLoadQueryListOptions): void {\r\n options = options || {};\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n \r\n const queryListLoadingPromise = queryStorage.getQueryList(options);\r\n\r\n queryListLoadingPromise\r\n .then((queries) => {\r\n if (options.success) {\r\n options.success(queries);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't load the list of available queries.\\n ${error.message}`;\r\n \r\n if (options.error) {\r\n options.error(errorMessage, 'LoadQueryList');\r\n }\r\n else {\r\n this.throwError({\r\n action: EqAction.LoadQueryList,\r\n text: errorMessage,\r\n sourceError: error\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new query and returns its content back to the client-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks and `silent` option\r\n * @example\r\n * context.newQuery({\r\n * silent: true\r\n * });\r\n */\r\n public newQuery(options?: ContextNewQueryOptions) : Query {\r\n options = options || {};\r\n\r\n const clearQuery = typeof options.clearQuery !== 'undefined' ? options.clearQuery : true; \r\n this.query.reset(clearQuery);\r\n \r\n if (options.queryId) {\r\n this.query.setId(options.queryId);\r\n }\r\n \r\n if (options.name) {\r\n this.query.setName(options.name);\r\n }\r\n\r\n if (options.description) {\r\n this.query.setDescription(options.description);\r\n }\r\n\r\n const silent = options.silent || false;\r\n\r\n let useStorage = true;\r\n if (typeof options.useStorage !== 'undefined') {\r\n useStorage = options.useStorage;\r\n }\r\n\r\n const onNewQuery = () => {\r\n const query = this.getQuery();\r\n query.isNewbie = true;\r\n\r\n if (!silent) {\r\n query.fireChangedEvent({\r\n part: QueryChangePart.All,\r\n wasModified: query.isModified()\r\n });\r\n }\r\n }\r\n\r\n if (useStorage) {\r\n this.startProcess({\r\n action: EqAction.NewQuery,\r\n text: 'New query creation...'\r\n }, WidgetGroup.Query);\r\n \r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.newQuery(options)\r\n .then((queryData) => {\r\n\r\n if (queryData) {\r\n this.query.loadFromData(queryData);\r\n }\r\n \r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.NewQuery,\r\n text: 'A new query has been created'\r\n }, WidgetGroup.Query);\r\n \r\n onNewQuery();\r\n \r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't create a new query.\\n${error.message}`;\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.NewQuery,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n \r\n if (options.error) {\r\n options.error(errorMessage, \"NewQuery\");\r\n } \r\n }); \r\n }\r\n else {\r\n onNewQuery();\r\n }\r\n return this.query;\r\n }\r\n\r\n /**\r\n * Saves the current query to some storage on the server-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public saveQuery(options?: ContextSaveQueryOptions) {\r\n options = options || {};\r\n\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.SaveQuery,\r\n text: 'Query saving: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.saveQuery(options)\r\n .then((data) => {\r\n this.endProcess({\r\n action: EqAction.SaveQuery,\r\n result: EqActionResult.Success,\r\n text: \"Query saved: \" + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n if (data) {\r\n query.loadFromData(data);\r\n }\r\n\r\n query.resetModified();\r\n query.isNewbie = false;\r\n \r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't save query ${query.getId()}.\\n ${error.message}`;\r\n\r\n this.endProcess({\r\n action: EqAction.SaveQuery,\r\n result: EqActionResult.Error,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, EqAction.SaveQuery);\r\n } \r\n }); \r\n }\r\n\r\n /**\r\n * Removes the current query from some storage on the server-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public removeQuery(options?: ContextRemoveQueryOptions) {\r\n options = options || {};\r\n const query = this.getQuery();\r\n \r\n this.startProcess({\r\n action: EqAction.RemoveQuery,\r\n text: 'Query deleting: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.removeQuery(options)\r\n .then(() => {\r\n query.reset();\r\n\r\n this.endProcess({\r\n action: EqAction.RemoveQuery,\r\n result: EqActionResult.Success,\r\n text: \"Query deleted: \" + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't remove query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n action: EqAction.RemoveQuery,\r\n result: EqActionResult.Error,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'RemoveQuery');\r\n } \r\n }); \r\n }\r\n\r\n /**\r\n * Syncronizes the current query. \r\n * @param options \r\n * The content of the `options` parameter depends on `QuerySyncronizer` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public syncQuery(options?: ContextSyncQueryOptions) { \r\n options = options || {};\r\n \r\n const query = this.getQuery();\r\n\r\n if (this.beforeSyncQuery) {\r\n this.beforeSyncQuery(this, options);\r\n }\r\n \r\n this.startProcess({\r\n action: EqAction.SyncQuery,\r\n text: 'Query syncing: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n const querySyncrhonizer = this.eqServices.getQuerySynchronizer();\r\n querySyncrhonizer.syncQuery(options)\r\n .then((result) => { \r\n this.resultStatement = result && result.statement \r\n ? result.statement \r\n : '';\r\n\r\n this.fireEvent('syncQuery');\r\n\r\n this.refreshWidgets(WidgetGroup.Statement);\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.SyncQuery,\r\n text: 'Query synced: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n if (result) {\r\n if (result.querySaved) {\r\n\r\n const q = result.query as QueryData;\r\n if (q) {\r\n \r\n query.setId(q.id)\r\n query.setName(q.name);\r\n query.setDescription(q.desc)\r\n query.extraData = q.extraData;\r\n }\r\n\r\n query.resetModified();\r\n this.refreshWidgets(WidgetGroup.QueryStatus);\r\n }\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't synchronize query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.SyncQuery, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'SyncQuery');\r\n } \r\n });\r\n }\r\n\r\n /**\r\n * Fetches the data (usuall by executing current query) and processes the result. \r\n * @param options \r\n * The `options` parameter in addition to the options defined in ExecuteQueryOptions structure may also contain `success` and `error` callbacks.\r\n * @example\r\n * context.fetchData({ success: function(result) {\r\n * //do whatever you want with the result\r\n * }})\r\n * \r\n */\r\n public fetchData(options?: ContextFetchDataOptions) {\r\n options = options || {}; \r\n\r\n const elasticPaging = typeof(options.elasticPaging) !== 'undefined' \r\n ? options.elasticPaging \r\n : this.elasticPaging;\r\n\r\n this.resultTable.elasticChunks = elasticPaging;\r\n\r\n options.chunk = options.chunk ||\r\n {\r\n offset: 0,\r\n limit: this.resultTable.chunkSize,\r\n needTotal: !elasticPaging\r\n };\r\n \r\n if (this.debugMode) {\r\n options.debug = 'Fetching the result set. Initial chunk'; \r\n }\r\n\r\n if (!this.query.tryValidate({\r\n checkExpressions: true\r\n })) {\r\n return;\r\n }\r\n\r\n //just to support the old way of catching \"group fetch\" operation finish\r\n if (options.groupFetchSuccess) {\r\n this.afterGroupFetch = options.groupFetchSuccess;\r\n }\r\n\r\n if (this.resultTable.elasticChunks) {\r\n options.chunk.limit++;\r\n }\r\n\r\n this.fetchDataChunk({\r\n ...options,\r\n success: (result) => {\r\n if (result.statement) {\r\n this.resultStatement = result.statement;\r\n this.refreshWidgets(WidgetGroup.Statement);\r\n }\r\n\r\n const aggrCalculator = this.getServices().getAggregatesCalculator();\r\n aggrCalculator.reset();\r\n\r\n this.resultContent = result;\r\n\r\n if (result.resultSet) {\r\n this.resultTable.clear();\r\n this.resultTable.id = this.query.getId();\r\n const resultSet = result.resultSet;\r\n for (const col of resultSet.cols) {\r\n this.resultTable.columns.add(col);\r\n }\r\n\r\n if (result.meta && typeof (result.meta.totalRecords) !== 'undefined') {\r\n this.resultTable.setTotal(result.meta.totalRecords);\r\n }\r\n \r\n const count = resultSet.rows.length;\r\n if (this.resultTable.elasticChunks && count === options.chunk.limit) {\r\n resultSet.rows.splice(resultSet.rows.length - 1, 1);\r\n }\r\n\r\n for (const row of resultSet.rows) {\r\n this.resultTable.addRow(row);\r\n }\r\n\r\n if (this.resultTable.elasticChunks) {\r\n this.resultTable['total'] = (count < options.chunk.limit)\r\n ? resultSet.rows.length \r\n : 0;\r\n }\r\n\r\n this.resultTable.fireUpdated();\r\n }\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public getQueryFile(options?: ContextGetQueryFileOptions) {\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.GetQueryFile,\r\n text: 'Getting query file: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryFileLoader = this.getServices().getQueryFileLoader();\r\n queryFileLoader.getQueryFile(options)\r\n .then(() => { \r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.GetQueryFile, \r\n text: 'Getting query file: ' + query.getId()\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch(error => {\r\n const errorMessage = `Can't get file for query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.GetQueryFile, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'GetQueryFile');\r\n }\r\n });\r\n }\r\n\r\n public uploadQueryFile(options?: ContextUploadQueryFileOptions) {\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.UploadQueryFile,\r\n text: 'Uploading query file: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryFileLoader = this.getServices().getQueryFileLoader();\r\n queryFileLoader.uploadQueryFile(options)\r\n .then((data) => { \r\n query.loadFromData(data);\r\n \r\n this.fireEvent('loadQuery');\r\n\r\n this.refreshWidgets();\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.UploadQueryFile, \r\n text: 'Uploading query file: ' + query.getId()\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch(error => { \r\n const errorMessage = `Can't upload a file for query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.UploadQueryFile, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'UploadQueryFile');\r\n }\r\n });\r\n }\r\n\r\n public fetchDataChunk(options?: ContextFetchDataOptions) {\r\n const queryId = this.getQuery().getId();\r\n\r\n let fetchOptions = options || {};\r\n \r\n if (this.useStoredQueryOnFetch) {\r\n fetchOptions.queryId = this.query.getId();\r\n }\r\n if (this.beforeFetchData) {\r\n this.beforeFetchData(this, fetchOptions);\r\n } \r\n \r\n this.startProcess({\r\n action: EqAction.FetchData, \r\n text: 'Fetching data for the query: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const dataFetcher = this.eqServices.getDataFetcher();\r\n dataFetcher.fetchData(fetchOptions)\r\n .then((result) => {\r\n if (result.statement) {\r\n this.resultStatement = result.statement;\r\n }\r\n\r\n this.resultContent = result;\r\n\r\n // we need to call success callback before firing fetchData,\r\n // because otherwise, it won't update the result table \r\n // in the context before afterFetchData callback is called.\r\n if (fetchOptions.success) {\r\n fetchOptions.success(result);\r\n }\r\n\r\n this.fireEvent('fetchData');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.FetchData, \r\n text: 'Data fetching is finished for the query: ' + queryId\r\n }, WidgetGroup.Result);\r\n })\r\n .catch((error: Error) => { \r\n const errorMessage = `Data fetching error for the query ${queryId}. \\n${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Result);\r\n\r\n if (fetchOptions.error) {\r\n fetchOptions.error(errorMessage, EqAction.FetchData);\r\n }\r\n });\r\n }\r\n\r\n protected onResultTableUpdate() {\r\n const aggrSettings = this.query.getAggregationSettings();\r\n const calculator = this.getServices().getAggregatesCalculator();\r\n if (aggrSettings.needAggrCalculation() && calculator.needRecalculation()) {\r\n calculator.calculate({\r\n maxLevel: aggrSettings.getGroups().length + 1,\r\n resultObtained: (result, level) => {\r\n if (this.afterGroupFetch) {\r\n this.afterGroupFetch(result);\r\n }\r\n },\r\n errorOccurred: error => {\r\n const errorMessage = `Data fetching error on group level ${error.level} query. \\n${error.message}`;\r\n this.throwError({\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n sourceError: error\r\n })\r\n }\r\n }); \r\n }\r\n }\r\n\r\n /**\r\n * Fetches the data for a drill-down query (if defined) and processes the result. \r\n * @param options \r\n */\r\n public fetchDrillDownData(options: ContextFetchDataOptions) {\r\n options = options || {};\r\n\r\n options.chunk = options.chunk ||\r\n {\r\n offset: 0,\r\n limit: this.resultTable.chunkSize,\r\n needTotal: true\r\n };\r\n\r\n const query = options.query as Query;\r\n const queryId = query.getId();\r\n \r\n this.startProcess({\r\n action: EqAction.FetchData, \r\n text: 'DrillDown executing: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const queryExecutor = this.eqServices.getDataFetcher();\r\n queryExecutor.fetchData(options)\r\n .then((result) => {\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.FetchData, \r\n text: 'DrillDown execution error: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n \r\n })\r\n .catch((error) => {\r\n const errorMessage = `Drill-down data fetching error for query ${queryId}. \\n${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'DrillDown');\r\n } else {\r\n this.throwError({\r\n action: EqAction.FetchData, \r\n text: errorMessage\r\n }); \r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches the data for defined by this context and exports them to the specified format. \r\n * @param options \r\n * The content of the `options` parameter depends on `EqExporter` implementation.\r\n * Usually it contains `format` property which defines the format of the exported data (e.g. `csv`),\r\n * and `success` and `error` callbacks\r\n * @example\r\n * context.exportResult({\r\n * format: csv\r\n * });\r\n * \r\n */\r\n public exportResult(options?: ContextExportResultOptions) {\r\n options = options || {};\r\n\r\n if (this.beforeExportResult) {\r\n this.beforeExportResult(this, options);\r\n }\r\n\r\n const format = options.format;\r\n\r\n if (format) {\r\n const exporter = this.getExporter(format);\r\n\r\n if (exporter) {\r\n const queryId = this.getQuery().getId();\r\n\r\n if (this.useStoredQueryOnFetch) {\r\n options.queryId = queryId;\r\n }\r\n\r\n this.startProcess({\r\n action: EqAction.ExportResult, \r\n text: 'Exporting result for query: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const localeSettings = i18n.getLocaleSettings();\r\n options.settings = localeSettings;\r\n\r\n const aggrSettings = this.query.getAggregationSettings();\r\n if (aggrSettings.hasAggregates()\r\n && (aggrSettings.hasGrandTotals() || aggrSettings.hasGroups())) \r\n {\r\n options.aggregates = aggrSettings.saveToData();\r\n }\r\n\r\n exporter.export(options)\r\n .then((result) => {\r\n this.fireEvent('exportResult');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.ExportResult,\r\n text: `The result set for query [${queryId}] has been successfully exported`\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Error on exporting data for query ${queryId}. \\n${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.ExportResult,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'ExportResult');\r\n } \r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\ntype EqContextEventType = \r\n 'ready' | \r\n 'loadModel' | \r\n 'loadQuery' |\r\n 'syncQuery' |\r\n 'initialModelLoad' | \r\n 'processStart' | \r\n 'processEnd' | \r\n 'fetchData' |\r\n 'exportResult' |\r\n 'error';\r\n\r\ntype EqEndpointKey = \r\n 'GetModel' | \r\n 'GetQuery' |\r\n 'SaveQuery' |\r\n 'NewQuery' |\r\n 'RemoveQuery' |\r\n 'GetQueryList' |\r\n 'SyncQuery' |\r\n 'FetchData' |\r\n 'GetValueList' |\r\n 'ExportResult' | \r\n 'GetQueryFile' |\r\n 'UploadQueryFile';\r\n\r\ntype ListRequestHandlerParams = {\r\n listName: string,\r\n editorId: string,\r\n editorParams?: {\r\n [key: string]: string\r\n }\r\n}","import { utils } from '@easydata/core';\r\nimport { EqContext } from './context';\r\nimport { WidgetGroup } from '../types/widget_group';\r\n \r\n/**\r\n * Represents a widget - a visual element with \"knows\" how to render itself.\r\n * Some widgets just display some information from the context (like the generated SQL or the result set).\r\n * Others - allow user to interact with them to define query conditions or columns.\r\n */\r\nexport abstract class Widget \r\n{\r\n protected context: EqContext;\r\n protected group: WidgetGroup;\r\n protected slot: HTMLElement;\r\n\r\n private _id : string;\r\n\r\n /**\r\n Initializes a new instance of the `Widget` class\r\n * @param slot - an HTML element in which we should place our widget.\r\n */\r\n constructor(slot: HTMLElement) {\r\n this.slot = slot;\r\n this._id = utils.generateId(this.getWidgetType());\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n abstract getWidgetType() : string;\r\n\r\n /**\r\n * Initializes the widget and assign it to some context\r\n * @param context \r\n * @param options \r\n */\r\n public init(context: EqContext, options?: any){\r\n this.context = context;\r\n }\r\n\r\n /**\r\n * Returns current context (the one this widget belongs to)\r\n */\r\n public getContext(): EqContext {\r\n return this.context;\r\n }\r\n\r\n /**\r\n * Refreshes the widget's content\r\n */\r\n public refresh() {\r\n this.refreshCore();\r\n }\r\n\r\n /**\r\n * This function is called from `refresh` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget \r\n */\r\n protected refreshCore() { \r\n }\r\n\r\n /**\r\n * This function is called on the start of some process this widget participates in.\r\n * For example, some widgets can show a spinner or a progress bar\r\n * at the beginning of some long process (e.g. model loading). \r\n */ \r\n public onProcessStart() {\r\n this.onProcessStartCore();\r\n }\r\n\r\n /**\r\n * This function is called from `onProcessStart` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget. \r\n */\r\n protected onProcessStartCore() {\r\n }\r\n\r\n /**\r\n * This function is called on the end of some process this widget participates in.\r\n * For example, some widgets should be updated on model loading \r\n * or after the execution of the current query\r\n */\r\n public onProcessEnd() {\r\n this.onProcessEndCore();\r\n } \r\n\r\n /**\r\n * This function is called from `onProcessEnd` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget. \r\n */\r\n protected onProcessEndCore() {\r\n }\r\n\r\n /**\r\n * Returns `true` if the widget belongs to one of the groups specified in the parameter\r\n * @param groups\r\n */\r\n public belongsToGroup(groups?: WidgetGroup): boolean {\r\n if (typeof groups != 'undefined' && groups != null) {\r\n if ((groups & this.group) === 0)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public destroy() : void {\r\n this.destroyCore();\r\n }\r\n\r\n protected destroyCore() { \r\n }\r\n}\r\n","class EqVersionInfo {\r\n\r\n constructor(public major: number, public minor: number, public update: number) {}\r\n\r\n\r\n public toString(): string {\r\n return `${this.major}.${this.minor}.${this.update}`\r\n }\r\n}\r\n\r\nexport const versionInfo = new EqVersionInfo(6, 2, 0);","import { i18n } from '@easydata/core'\r\n\r\nfunction addEasyQueryCoreTexts() {\r\n i18n.updateDefaultTexts({\r\n NewQueryName: '[New query]',\r\n\r\n //DateTime macroses\r\n Today: 'Today',\r\n Yesterday: 'Yesterday',\r\n Tomorrow: 'Tomorrow',\r\n FirstDayOfMonth: 'First day of the month',\r\n LastDayOfMonth: 'Last day of the month',\r\n FirstDayOfWeek: 'First day of the week',\r\n FirstDayOfYear: 'First day of the year',\r\n FirstDayOfNextWeek: 'First day of the next week',\r\n FirstDayOfNextMonth: 'First day of the next month',\r\n FirstDayOfNextYear: 'First day of the next year',\r\n Now: 'Now',\r\n HourStart: 'This hour start',\r\n Midnight: 'Midnight',\r\n Noon: 'Noon',\r\n\r\n Entities: {},\r\n Attributes: {},\r\n Operators: {},\r\n AggreateFunctions: {}\r\n });\r\n}\r\n\r\naddEasyQueryCoreTexts();","export * from './utils/utils'\r\nexport * from './utils/constants'\r\n\r\nexport * from './export/exporter'\r\n\r\nexport * from './common/eq_services'\r\nexport * from './common/tree'\r\n\r\nexport * from './data/eq_data_loader'\r\nexport * from './data/google_data_converter'\r\nexport * from './data/eq_aggr_container'\r\n\r\nexport * from './types/data_kind'\r\nexport * from './types/link_type'\r\nexport * from './types/cond_tag'\r\nexport * from './types/cond_part'\r\nexport * from './types/expr_tag'\r\nexport * from './types/eq_editor_tag'\r\nexport * from './types/widget_group'\r\n\r\nexport * from './dm/aggr_function'\r\nexport * from './dm/data_model'\r\nexport * from './dm/entity'\r\nexport * from './dm/operator'\r\nexport * from './dm/value_editor'\r\nexport * from './dm/link'\r\n\r\nexport * from './dm/dto/af_data'\r\nexport * from './dm/dto/dm_data'\r\nexport * from './dm/dto/entity_data'\r\nexport * from './dm/dto/operator_data'\r\n\r\nexport * from './main/eq_actions'\r\nexport * from './main/model_loader'\r\nexport * from './main/model_storage'\r\nexport * from './main/query_storage'\r\nexport * from './main/context'\r\nexport * from './main/list_cache'\r\nexport * from './main/context_options'\r\nexport * from './main/widget'\r\nexport * from './main/action'\r\nexport * from './main/data_fetcher'\r\nexport * from './main/query_synchronizer'\r\nexport * from './main/value_list_resolver'\r\nexport * from './main/query_file_loader'\r\n\r\nexport * from './query/query_column'\r\nexport * from './query/condition'\r\nexport * from './query/expression'\r\nexport * from './query/query'\r\nexport * from './query/descriptors'\r\nexport * from './query/query_events'\r\n\r\nexport * from './query/dto/query_data'\r\nexport * from './query/dto/query_column_data'\r\nexport * from './query/dto/condition_data'\r\nexport * from './query/dto/expression_data'\r\n\r\nexport * from './eqs/eqs_exporter'\r\nexport * from './eqs/eqs_model_loader'\r\nexport * from './eqs/eqs_data_fetcher'\r\nexport * from './eqs/eqs_query_synchronizer'\r\nexport * from './eqs/eqs_value_list_resolver'\r\nexport * from './eqs/eqs_query_file_loader'\r\n\r\nexport * from './utils/format_parser'\r\n\r\nexport * from './utils/version_info'\r\n\r\n//for backward compatibility\r\nexport { i18n } from '@easydata/core'\r\n\r\nimport './i18n/text_resources'\r\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack://easyqueryCore/webpack/universalModuleDefinition","webpack://easyqueryCore/webpack/bootstrap","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easyqueryCore/c:/azuredevops-agents/korzhdev/_work/1/s/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easyqueryCore/./src/data/google_data_converter.ts","webpack://easyqueryCore/./src/utils/format_parser.ts","webpack://easyqueryCore/./src/types/link_type.ts","webpack://easyqueryCore/./src/utils/utils.ts","webpack://easyqueryCore/./src/utils/constants.ts","webpack://easyqueryCore/./src/dm/aggr_function.ts","webpack://easyqueryCore/./src/dm/value_editor.ts","webpack://easyqueryCore/./src/types/data_kind.ts","webpack://easyqueryCore/./src/dm/operator.ts","webpack://easyqueryCore/./src/dm/entity.ts","webpack://easyqueryCore/./src/types/eq_editor_tag.ts","webpack://easyqueryCore/./src/types/expr_tag.ts","webpack://easyqueryCore/./src/common/tree.ts","webpack://easyqueryCore/./src/dm/data_model.ts","webpack://easyqueryCore/./src/query/expression.ts","webpack://easyqueryCore/./src/query/query_events.ts","webpack://easyqueryCore/./src/query/query_column.ts","webpack://easyqueryCore/./src/types/cond_tag.ts","webpack://easyqueryCore/./src/types/cond_part.ts","webpack://easyqueryCore/./src/query/condition.ts","webpack://easyqueryCore/./src/query/query.ts","webpack://easyqueryCore/./src/main/query_storage.ts","webpack://easyqueryCore/./src/main/model_loader.ts","webpack://easyqueryCore/./src/eqs/eqs_model_loader.ts","webpack://easyqueryCore/./src/eqs/eqs_data_fetcher.ts","webpack://easyqueryCore/./src/eqs/eqs_query_synchronizer.ts","webpack://easyqueryCore/./src/eqs/eqs_value_list_resolver.ts","webpack://easyqueryCore/./src/eqs/eqs_query_file_loader.ts","webpack://easyqueryCore/./src/data/eq_aggr_container.ts","webpack://easyqueryCore/./src/common/eq_services.ts","webpack://easyqueryCore/./src/data/eq_data_loader.ts","webpack://easyqueryCore/./src/types/widget_group.ts","webpack://easyqueryCore/./src/main/eq_actions.ts","webpack://easyqueryCore/./src/main/model_storage.ts","webpack://easyqueryCore/./src/main/action.ts","webpack://easyqueryCore/./src/eqs/eqs_exporter.ts","webpack://easyqueryCore/./src/main/context.ts","webpack://easyqueryCore/./src/main/widget.ts","webpack://easyqueryCore/./src/utils/version_info.ts","webpack://easyqueryCore/./src/i18n/text_resources.ts","webpack://easyqueryCore/./src/public_api.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;QCVA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;;;;;;;;;;;;;;;;;;;AClFA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B,qC;;AC7CO;AACP;AACA;AACA;AACA;AACA,CAAC,wCAAwC;AACzC,4C;;ACNO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sC;;ACdO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,gCAAgC;AACjC,uC;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,mBAAmB;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,+CAA+C,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,wC;;ACzDO;AACP;AACA,mBAAmB,WAAW;AAC9B;AACA;AACA;AACA;AACO;AACP;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wC;;AC/B8C;AACP;AACvC;AACA;AACA;AACO,IAAI,SAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAK;AACjB;AACA;AACA;AACA;AACA,kCAAkC,WAAK,cAAc;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAK,cAAc;AACxD;AACA,iCAAiC,WAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iDAAiD;AAClE,QAAQ,WAAK;AACb;AACA;AACA;AACA;AACA;AACA,2BAA2B,WAAK,cAAc;AAC9C;AACA,8BAA8B,WAAK,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,WAAK,cAAc;AACxD;AACA;AACA;AACA,QAAQ,WAAK;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,WAAK,cAAc;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA,iDAAiD,QAAQ;AACzD;AACA;AACA;AACA;AACA;AACA,eAAe,WAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA,iBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,qBAAqB,EAAE;AAC7D,mCAAmC,qBAAqB,EAAE;AAC1D;AACA;AACA;AACA,yDAAyD,sBAAsB;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAE,SAAI,KAAK,SAAI,KAAK;AACrB,gC;;ACnduC;AACO;AACV;AAC7B,IAAI,WAAK;AAChB;AACA;AACA,6BAA6B,QAAQ,0BAA0B,iCAAiC,EAAE;AAClG;AACA;AACA;AACA,gBAAgB,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AACtD;AACA;AACA;AACA,gBAAgB,QAAQ,SAAS,QAAQ,OAAO,QAAQ;AACxD;AACA;AACA,yBAAyB,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AAC/D,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,WAAW,QAAQ;AACnE;AACA;AACA;AACA;AACA,qBAAqB,QAAQ,OAAO,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ;AAC3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA,uBAAuB,iBAAiB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,uBAAuB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,uBAAuB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,0BAA0B;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,WAAW;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sFAAsF,QAAQ,qBAAqB,QAAQ;AAC3H,6CAA6C,QAAQ,kBAAkB,QAAQ;AAC/E,yBAAyB,QAAQ,sBAAsB,QAAQ;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,YAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,YAAiB;AACtC;AACA;AACA;AACA;AACA,SAAS;AACT,eAAe,aAAkB;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA,kBAAkB,SAAI;AACtB,iBAAiB,SAAI;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAI;AACnD;AACA;AACA;AACA,CAAC,EAAE,WAAK,KAAK,WAAK,KAAK;AACvB,iC;;ACvgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC2B;AAC5B,8C;;ACvBA,iBAAiB,SAAI,IAAI,SAAI;AAC7B;AACA;AACA,cAAc,gBAAgB,sCAAsC,iBAAiB,EAAE;AACvF,6BAA6B,uDAAuD;AACpF;AACA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA,CAAC;AACD,gBAAgB,SAAI,IAAI,SAAI;AAC5B;AACA,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuC;AACiB;AACb;AACE;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC4B;AAC7B,IAAI,sBAAU;AACd;AACA;AACA;AACA;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA,yBAAyB,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,WAAK,2BAA2B;AACxD;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA,yCAAyC,6CAA6C;AACtF,kDAAkD;AAClD;AACA;AACA;AACA;AACA,0BAA0B,WAAW;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,gBAAgB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACqB;AACtB,uC;;ACnJ8C;AACa;AACpB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,qBAAqB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,sBAAsB;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA,+BAA+B,+BAA+B;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,oCAAoC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,0BAA0B,EAAE;AACnF;AACA;AACA,CAAC;AACqB;AACtB,IAAI,0BAAc;AAClB;AACA;AACA;AACA,yBAAyB,uBAAuB;AAChD,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAK;AACnC,8BAA8B,WAAK;AACnC,8BAA8B,WAAK;AACnC,gCAAgC,WAAK;AACrC,8BAA8B,WAAK;AACnC,gCAAgC,WAAK;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,uC;;AC7IgD;AACF;AAC9C;AACA;AACA;AACA,IAAI,wBAAW;AACf;AACA;AACA;AACA,mBAAmB,SAAS;AAC5B,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACsB;AACvB,wC;;AChEoC;AACG;AACS;AACF;AACa;AACd;AAC7C;AACA;AACA;AACA,IAAI,kBAAQ;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA;AACA,mBAAmB,0BAAc;AACjC;AACA;AACA,mBAAmB,wBAAW;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,yBAAyB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE,gBAAgB,EAAE;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,gBAAgB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,iBAAiB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,sBAAsB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,8BAA8B,SAAI;AAClC;AACA;AACA;AACA,iCAAiC,WAAK,8BAA8B,yDAAyD;AAC7H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA;AACA,8BAA8B,SAAI;AAClC;AACA;AACA,iCAAiC,WAAK,8BAA8B,sDAAsD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,yBAAyB;AACzD;AACA;AACA,8BAA8B,SAAI;AAClC,iCAAiC,WAAK;AACtC;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,kCAAkC,WAAK,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,qBAAqB;AACtD;AACA;AACA,8BAA8B,SAAI;AAClC,0CAA0C,WAAK;AAC/C;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,SAAI;AAC1B;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,SAAS,OAAO,QAAQ;AACzE;AACA,6CAA6C,SAAS,WAAW,QAAQ;AACzE,6CAA6C,SAAS,WAAW,QAAQ;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,WAAK;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,SAAI;AACjC;AACA;AACA;AACA;AACA,2BAA2B,eAAe;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAI;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,KAAK;AACtD,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,CAAC;AACmB;AACpB,qC;;AC1eA,IAAI,oBAAQ,IAAI,SAAI,IAAI,SAAI;AAC5B,IAAI,oBAAQ;AACZ,gDAAgD,OAAO;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,oBAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,oBAAQ,EAAE,gBAAgB;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,+BAA+B;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oBAAQ,CAAC,oBAAQ,GAAG,SAAS,sEAAsE;AACtH,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA,sCAAsC,6BAA6B,EAAE;AACrE;AACA;AACA;AACA,8CAA8C,gBAAgB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,gBAAgB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAC8B;AAC/B,yC;;AChM8C;AACP;AAChC;AACP;AACA;AACA;AACA;AACA;AACA,CAAC,0CAA0C;AAC3C,IAAI,sBAAU;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,WAAK,yBAAyB,QAAQ;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACqB;AACtB,IAAI,0BAAc;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,iCAAiC,sBAAU;AAC3C;AACA;AACA;AACA,sBAAsB,sBAAU;AAChC;AACA;AACA;AACA;AACA,aAAa,QAAQ,OAAO,QAAQ,WAAW,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,SAAS,QAAQ,OAAO,QAAQ,WAAW,QAAQ,8BAA8B,EAAE;AACvH,wCAAwC,cAAc,EAAE;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,WAAK;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACyB;AAC1B,uC;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACkB;AACnB,oC;;AC5C+C;AACV;AACS;AACP;AACvC,IAAI,6BAAa;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,0BAAc;AAC1C;AACA;AACA,kDAAkD,gBAAgB;AAClE;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,6BAA6B,0BAA0B;AACvD,mCAAmC,yCAAyC,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD,gCAAgC,kCAAkC;AAClE,gCAAgC,yBAAyB;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC,yBAAyB,WAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,uBAAuB;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACwB;AACzB,2C;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,CAAC;AACmB;AACpB,qC;;ACnB8C;AAC9C;AACA;AACA;AACA,IAAI,0BAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qCAAqC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,cAAc;AAChD,+BAA+B,eAAe;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,gBAAgB;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACuB;AACxB,yC;;AC5HO;AACP;AACA;AACA;AACA;AACA;AACA,oDAAoD,EAAE,WAAW,EAAE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,wBAAwB;AACzB,kC;;ACd8B;AAC9B,SAAI;AACJ,wD;;ACFA;AACkC;AACO;AACN;AACnC;AACmC;AACC;AACD;AACnC;AACiC;AACE;AACC;AACC;AACF;AA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","file":"easyquery.core.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easyqueryCore\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easyqueryCore\"] = factory();\n\telse\n\t\troot[\"easyqueryCore\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","/** Represents the common types of the data. */\r\nexport var DataType;\r\n(function (DataType) {\r\n /** Unknown type value*/\r\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\r\n /** String value*/\r\n DataType[DataType[\"String\"] = 1] = \"String\";\r\n /** 8-bit integer value */\r\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\r\n /** 16-bit integer value */\r\n DataType[DataType[\"Word\"] = 3] = \"Word\";\r\n /** 32-bit integer value */\r\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\r\n /** 64-bit integer value */\r\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\r\n /** Boolean value */\r\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\r\n /** Floating-point numeric value */\r\n DataType[DataType[\"Float\"] = 7] = \"Float\";\r\n /** Money value */\r\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\r\n /** Binary-coded decimal value */\r\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\r\n /** Date value */\r\n DataType[DataType[\"Date\"] = 10] = \"Date\";\r\n /** Time value */\r\n DataType[DataType[\"Time\"] = 11] = \"Time\";\r\n /** Date and time value */\r\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\r\n /** Autoincrement 32-bit integer value */\r\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\r\n /** MEMO value (text with unlimited length) */\r\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\r\n /** BLOB value (any data with unlimited length) */\r\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\r\n /** Fixed character value */\r\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\r\n /** The unique identifier */\r\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\r\n /*-------- Spatial data types ----------*/\r\n /** Any geometry data */\r\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\r\n /** Any data that represents some geography objects</summary> */\r\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\r\n})(DataType || (DataType = {}));\r\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\r\n(function (EntityAttrKind) {\r\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\r\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\r\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\r\n})(EntityAttrKind || (EntityAttrKind = {}));\r\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\r\n /** Unknown tag value */\r\n Unknown: \"Unknown\",\r\n /** Edit tag value */\r\n Edit: \"EDIT\",\r\n /** DateTime tag value */\r\n DateTime: \"DATETIME\",\r\n /** List tag value */\r\n List: \"LIST\",\r\n /** CustomList tag value */\r\n CustomList: \"CUSTOMLIST\",\r\n /** File tag value */\r\n File: \"FILE\"\r\n};\r\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\r\n(function (HttpMethod) {\r\n HttpMethod[\"Trace\"] = \"TRACE\";\r\n HttpMethod[\"Options\"] = \"OPTIONS\";\r\n HttpMethod[\"Get\"] = \"GET\";\r\n HttpMethod[\"Put\"] = \"PUT\";\r\n HttpMethod[\"Post\"] = \"POST\";\r\n HttpMethod[\"Delete\"] = \"DELETE\";\r\n})(HttpMethod || (HttpMethod = {}));\r\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\r\n function HttpRequest(xhr, descriptor) {\r\n this.xhr = xhr;\r\n this.method = descriptor.method;\r\n this.url = descriptor.url;\r\n this.headers = descriptor.headers;\r\n this.queryParams = descriptor.queryParams;\r\n this.data = descriptor.data;\r\n }\r\n HttpRequest.prototype.setHeader = function (name, value) {\r\n this.headers[name] = value;\r\n };\r\n HttpRequest.prototype.setQueryParam = function (name, value) {\r\n this.queryParams[name] = value;\r\n };\r\n HttpRequest.prototype.getXMLHttpRequest = function () {\r\n return this.xhr;\r\n };\r\n HttpRequest.prototype.getResponseHeaders = function () {\r\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\r\n var headers = this.xhr.getAllResponseHeaders();\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n // Create a map of header names to values\r\n var headerMap = {};\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var line = arr_1[_i];\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n headerMap[header] = value;\r\n }\r\n return headerMap;\r\n }\r\n return {};\r\n };\r\n HttpRequest.prototype.open = function () {\r\n var _this = this;\r\n if (this.xhr.readyState !== this.xhr.UNSENT)\r\n return;\r\n var url = this.url;\r\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\r\n url += encodeURI('?' + Object.keys(this.queryParams)\r\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\r\n .join('&'));\r\n }\r\n this.xhr.open(this.method, url, true);\r\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n for (var header in this.headers) {\r\n this.xhr.setRequestHeader(header, this.headers[header]);\r\n }\r\n };\r\n HttpRequest.prototype.abort = function () {\r\n this.xhr.abort();\r\n };\r\n return HttpRequest;\r\n}());\r\nexport { HttpRequest };\r\n//# sourceMappingURL=http_request.js.map","export function repeatString(str, times) {\r\n var result = \"\";\r\n for (var i = 0; i < times; i++) {\r\n result += str;\r\n }\r\n return result;\r\n}\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\nexport function strEndsWith(str, symbol) {\r\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\r\n}\r\n/**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1\r\n * @param path2\r\n */\r\nexport function combinePath(path1, path2) {\r\n var result = path1;\r\n if (result != null && result.length > 0) {\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=string_utils.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Contains internatialization functionality.\r\n */\r\nexport var i18n;\r\n(function (i18n) {\r\n var englishUSLocaleSettings = {\r\n shortDateFormat: 'MM/dd/yyyy',\r\n longDateFormat: 'dd MMM, yyyy',\r\n editDateFormat: 'MM/dd/yyyy',\r\n shortTimeFormat: 'HH:mm',\r\n editTimeFormat: 'HH:mm',\r\n longTimeFormat: 'HH:mm:ss',\r\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'],\r\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n decimalSeparator: '.',\r\n currency: 'USD'\r\n };\r\n var defaultLocale = {\r\n localeId: 'en-US',\r\n englishName: 'English',\r\n displayName: 'English',\r\n texts: {\r\n ButtonOK: 'OK',\r\n ButtonCancel: 'Cancel',\r\n Yes: 'Yes',\r\n No: 'No',\r\n True: 'True',\r\n False: 'False'\r\n },\r\n settings: englishUSLocaleSettings\r\n };\r\n var allLocales = {\r\n 'en-US': defaultLocale\r\n };\r\n var currentLocale;\r\n var mappers = [];\r\n function mapInfo(info) {\r\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\r\n var mapper = mappers_1[_i];\r\n mapper(info);\r\n }\r\n }\r\n function addMapper(mapper) {\r\n mappers.push(mapper);\r\n }\r\n i18n.addMapper = addMapper;\r\n /**\r\n * Gets added locales with their names.\r\n * @returns The locales.\r\n */\r\n function getLocales() {\r\n var result = [];\r\n for (var locale in allLocales) {\r\n result.push({\r\n locale: locale,\r\n englishName: allLocales[locale].englishName,\r\n displayName: allLocales[locale].displayName\r\n });\r\n }\r\n return result.sort(function (a, b) {\r\n if (a.englishName > b.englishName) {\r\n return 1;\r\n }\r\n else if (a.englishName === b.englishName) {\r\n return 0;\r\n }\r\n return -1;\r\n });\r\n }\r\n i18n.getLocales = getLocales;\r\n /**\r\n * Gets the current locale ID.\r\n * @returns The locale.\r\n */\r\n function getCurrentLocale() {\r\n return currentLocale.localeId;\r\n }\r\n i18n.getCurrentLocale = getCurrentLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @deprecated Use setCurrentLocale instead\r\n * @param l The locale.\r\n */\r\n function setLocale(l) {\r\n console.warn('This method is deprecated. Use setCurrentLocale instead');\r\n setCurrentLocale(l);\r\n }\r\n i18n.setLocale = setLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @param localeId The locale.\r\n */\r\n function setCurrentLocale(localeId) {\r\n var newLocale = allLocales[localeId];\r\n if (newLocale) {\r\n utils.assignDeep(currentLocale, newLocale);\r\n }\r\n else {\r\n currentLocale.englishName = localeId;\r\n currentLocale.displayName = localeId;\r\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\r\n }\r\n currentLocale.localeId = localeId;\r\n }\r\n i18n.setCurrentLocale = setCurrentLocale;\r\n /**\r\n * Returns localized text by the key defined in parameter.\r\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\r\n *\r\n ```\r\n const text = i18n.getText('CmdClickToAddCondition')\r\n ```\r\n * @param args The keys of the resource string.\r\n * @returns Text of the resource defined by key or null if the key is not found\r\n *\r\n */\r\n function getText() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var textsObj = currentLocale.texts;\r\n var resText = '';\r\n if (args && args.length) {\r\n var argLength = args.length;\r\n for (var i = 0; i < argLength; i++) {\r\n resText = textsObj[args[i]];\r\n if (typeof resText === 'object') {\r\n textsObj = resText;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return resText;\r\n }\r\n i18n.getText = getText;\r\n function getLocaleSettings() {\r\n return currentLocale.settings;\r\n }\r\n i18n.getLocaleSettings = getLocaleSettings;\r\n function getOneLocaleSetting(key) {\r\n return currentLocale.settings[key];\r\n }\r\n i18n.getOneLocaleSetting = getOneLocaleSetting;\r\n function getShortMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.shortMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getShortMonthName = getShortMonthName;\r\n function getLongMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.longMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getLongMonthName = getLongMonthName;\r\n function getShortWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.shortWeekDayNames.length >= dayNum\r\n ? settings.shortWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getShortWeekDayName = getShortWeekDayName;\r\n function getLongWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.longWeekDayNames.length >= dayNum\r\n ? settings.longWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getLongWeekDayName = getLongWeekDayName;\r\n /**\r\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\r\n * @param settingsToUpdate a LocaleSettings object\r\n */\r\n function updateLocaleSettings(settingsToUpdate) {\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\r\n }\r\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\r\n }\r\n i18n.updateLocaleSettings = updateLocaleSettings;\r\n /**\r\n * Updates the texts for the current locale\r\n * @param texts A plain JS object that contains textual resources\r\n */\r\n function updateLocaleTexts(texts) {\r\n if (typeof texts !== 'object') {\r\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\r\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\r\n return;\r\n }\r\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\r\n utils.assignDeep(currentLocale.texts, texts);\r\n }\r\n i18n.updateLocaleTexts = updateLocaleTexts;\r\n function updateDefaultTexts(texts) {\r\n for (var localeId in allLocales) {\r\n var locale = allLocales[localeId];\r\n locale.texts = utils.assignDeep({}, texts, locale.texts);\r\n }\r\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\r\n }\r\n i18n.updateDefaultTexts = updateDefaultTexts;\r\n /**\r\n * Updates the information for the specified locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be added\r\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function updateLocaleInfo(localeId, localeData) {\r\n mapInfo(localeData);\r\n var localeInfoToUpdate = currentLocale;\r\n if (localeId) {\r\n if (!localeData.localeId) {\r\n localeData.localeId = localeId;\r\n }\r\n localeInfoToUpdate = allLocales[localeId];\r\n if (!localeInfoToUpdate) {\r\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\r\n allLocales[localeId] = localeInfoToUpdate;\r\n }\r\n }\r\n utils.assignDeep(localeInfoToUpdate, localeData);\r\n }\r\n i18n.updateLocaleInfo = updateLocaleInfo;\r\n /**\r\n * Adds the locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be created\r\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function addLocale(localeId, localeInfo) {\r\n updateLocaleInfo(localeId, localeInfo);\r\n }\r\n i18n.addLocale = addLocale;\r\n /**\r\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\r\n */\r\n function determineSettingsByLocale(localeId) {\r\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\r\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\r\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\r\n var dateFormat = dateStr\r\n .replace('07', 'dd')\r\n .replace('7', 'd')\r\n .replace('06', 'MM')\r\n .replace('6', 'M')\r\n .replace('2020', 'yyyy')\r\n .replace('20', 'yy');\r\n var timeFormat = timeStr\r\n .replace('19', 'HH')\r\n .replace('07', 'hh')\r\n .replace('7', 'h')\r\n .replace('34', 'mm')\r\n .replace('56', 'ss')\r\n .replace('PM', 'tt');\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = {};\r\n }\r\n var localeSettings = {\r\n shortDateFormat: dateFormat,\r\n shortTimeFormat: timeFormat\r\n };\r\n updateLocaleSettings(localeSettings);\r\n }\r\n function loadBrowserLocaleSettings() {\r\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\r\n determineSettingsByLocale(lang);\r\n }\r\n function resetLocales() {\r\n if (!currentLocale) {\r\n currentLocale = utils.assignDeep({}, defaultLocale);\r\n loadBrowserLocaleSettings();\r\n }\r\n }\r\n i18n.resetLocales = resetLocales;\r\n function dateTimeToStr(dateTime, dataType, format) {\r\n if (format) {\r\n if (format == 'd') {\r\n format = buildShortDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'D') {\r\n format = buildLongDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'f') {\r\n format = buildShortDateTimeFormat(DataType.DateTime);\r\n }\r\n else if (format == 'F') {\r\n format = buildLongDateTimeFormat(DataType.DateTime);\r\n }\r\n }\r\n else {\r\n format = buildShortDateTimeFormat(dataType);\r\n }\r\n return utils.dateTimeToStr(dateTime, format);\r\n }\r\n i18n.dateTimeToStr = dateTimeToStr;\r\n function buildShortDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.shortDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.shortTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function buildLongDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.longDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.longTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function numberToStr(number, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n return formatWithSequence(number, format.slice(1));\r\n }\r\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\r\n var locale = getCurrentLocale();\r\n return number.toLocaleString(locale, getNumberFromatOptions(format));\r\n }\r\n else {\r\n return convertWithMask(Math.trunc(number), format);\r\n }\r\n }\r\n var localeSettings = getLocaleSettings();\r\n return utils.numberToStr(number, localeSettings.decimalSeparator);\r\n }\r\n i18n.numberToStr = numberToStr;\r\n function booleanToStr(bool, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n var values = format.slice(1).split('|');\r\n if (values.length > 1) {\r\n var value = values[(bool) ? 1 : 0];\r\n return i18n.getText(value) || value;\r\n }\r\n }\r\n }\r\n return \"\" + bool;\r\n }\r\n i18n.booleanToStr = booleanToStr;\r\n var cachedSequenceFormats = {};\r\n function formatWithSequence(number, format) {\r\n if (!cachedSequenceFormats[format]) {\r\n // parse and save in cache format values \r\n var values_2 = format.split('|')\r\n .filter(function (v) { return v.length > 0; })\r\n .map(function (v) { return v.split('='); });\r\n cachedSequenceFormats[format] = {};\r\n if (values_2.length > 0) {\r\n if (values_2[0].length > 1) {\r\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\r\n var value = values_1[_i];\r\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\r\n }\r\n }\r\n else {\r\n values_2.forEach(function (value, index) {\r\n cachedSequenceFormats[format][index] = value[0];\r\n });\r\n }\r\n }\r\n }\r\n var values = cachedSequenceFormats[format];\r\n if (values[number] !== undefined) {\r\n var value = values[number];\r\n return i18n.getText(value) || value;\r\n }\r\n return number.toString();\r\n }\r\n function convertWithMask(number, mask) {\r\n var value = number.toString();\r\n var result = '';\r\n var index = value.length - 1;\r\n for (var i = mask.length - 1; i >= 0; i--) {\r\n var ch = mask.charAt(i);\r\n if (ch === '#' || ch === '0') {\r\n if (index >= 0) {\r\n result += value.charAt(index);\r\n index--;\r\n }\r\n else {\r\n if (ch === '0') {\r\n result += 0;\r\n }\r\n }\r\n }\r\n else {\r\n result += ch;\r\n }\r\n }\r\n return result.split('').reverse().join('');\r\n }\r\n function getNumberFromatOptions(format) {\r\n var localeSettings = getLocaleSettings();\r\n var type = format[0].toUpperCase();\r\n var digits = (format.length > 1)\r\n ? Number.parseInt(format.slice(1))\r\n : type == 'D' ? 1 : 2;\r\n switch (type) {\r\n case 'D':\r\n return {\r\n style: 'decimal',\r\n useGrouping: false,\r\n minimumIntegerDigits: digits\r\n };\r\n case 'C':\r\n return {\r\n style: 'currency',\r\n currency: localeSettings.currency,\r\n minimumFractionDigits: digits\r\n };\r\n default:\r\n return {\r\n style: 'decimal',\r\n minimumFractionDigits: digits\r\n };\r\n }\r\n }\r\n})(i18n || (i18n = {}));\r\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\r\nimport { DataType } from '../types/data_type';\r\nimport { i18n } from '../i18n/i18n';\r\nexport var utils;\r\n(function (utils) {\r\n function getAllDataTypes() {\r\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\r\n }\r\n utils.getAllDataTypes = getAllDataTypes;\r\n function getDateDataTypes() {\r\n return [DataType.Time, DataType.Date, DataType.DateTime];\r\n }\r\n utils.getDateDataTypes = getDateDataTypes;\r\n function getStringDataTypes() {\r\n return [DataType.String, DataType.Memo, DataType.FixedChar];\r\n }\r\n utils.getStringDataTypes = getStringDataTypes;\r\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\r\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\r\n function getNumericDataTypes() {\r\n return _numericTypes;\r\n }\r\n utils.getNumericDataTypes = getNumericDataTypes;\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\r\n //-------------- object functions -------------------\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function copies only the first level properties.\r\n * For a deep copy please use `assignDeep`\r\n * @param target - the target object\r\n * @param args - an array of the source objects\r\n */\r\n function assign(target) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n var source = args[i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n utils.assign = assign;\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function make a deep copy -\r\n * so `assignDeep` will be called recursively for all object properties\r\n * on the first level.\r\n * @param target - the target object\r\n * @param sources - an array of the source objects\r\n */\r\n function assignDeep(target) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n return assignDeepCore(new WeakMap(), target, sources);\r\n }\r\n utils.assignDeep = assignDeep;\r\n function assignDeepCore(hashSet, target, sources) {\r\n if (!target) {\r\n target = {};\r\n }\r\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\r\n var source = sources_1[_i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n var sourceVal = source[key];\r\n if (sourceVal !== null && typeof sourceVal === 'object') {\r\n if (hashSet.has(sourceVal)) {\r\n target[key] = hashSet.get(sourceVal);\r\n }\r\n else {\r\n if (Array.isArray(sourceVal)) {\r\n target[key] = createArrayFrom(sourceVal);\r\n hashSet.set(sourceVal, target[key]);\r\n }\r\n else {\r\n if (typeof target[key] == 'undefined' || target[key] == null) {\r\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\r\n }\r\n hashSet.set(sourceVal, target[key]);\r\n assignDeepCore(hashSet, target[key], [sourceVal]);\r\n }\r\n }\r\n }\r\n else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n function getIfDefined(value, defaultValue) {\r\n return (typeof value !== 'undefined') ? value : defaultValue;\r\n }\r\n utils.getIfDefined = getIfDefined;\r\n function IsDefinedAndNotNull(value) {\r\n return typeof value !== 'undefined' && value !== null;\r\n }\r\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\r\n function copyArrayTo(collection1, collection2) {\r\n var len1 = collection1.length;\r\n var len2 = collection2.length;\r\n for (var i = 0; i < len1 && i < len2; i++) {\r\n collection2[i] = collection1[i];\r\n }\r\n }\r\n utils.copyArrayTo = copyArrayTo;\r\n function createArrayFrom(collection) {\r\n var result = [];\r\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\r\n var item = collection_1[_i];\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n utils.createArrayFrom = createArrayFrom;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the found object or null.\r\n * @param array\r\n * @param id\r\n */\r\n function findItemById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return array[idx];\r\n }\r\n return null;\r\n }\r\n utils.findItemById = findItemById;\r\n function findItemIndexById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return idx;\r\n }\r\n return -1;\r\n }\r\n utils.findItemIndexById = findItemIndexById;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the index of the found element, or -1 if nothing was found.\r\n * @param array\r\n * @param id\r\n */\r\n function indexOfArrayItem(arr, item) {\r\n if (arr.indexOf) {\r\n return arr.indexOf(item);\r\n }\r\n else {\r\n var len = arr.length;\r\n for (var i = 0; i < len; i++) {\r\n if (item == arr[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n utils.indexOfArrayItem = indexOfArrayItem;\r\n /**\r\n * Moves an item in some array to a new position\r\n * @param array\r\n * @param index1\r\n * @param index2\r\n */\r\n function moveArrayItem(array, index1, index2) {\r\n if (index1 >= array.length) {\r\n throw 'Index out of bounds: ' + index1;\r\n }\r\n if (index2 >= array.length) {\r\n index2 = array.length - 1;\r\n }\r\n var item = array.splice(index1, 1)[0];\r\n array.splice(index2, 0, item);\r\n }\r\n utils.moveArrayItem = moveArrayItem;\r\n /**\r\n * Searches for a particular item in the array are removes that item if found.\r\n * @param arr\r\n * @param value\r\n */\r\n function removeArrayItem(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index != -1) {\r\n return arr.splice(index, 1)[0];\r\n }\r\n }\r\n utils.removeArrayItem = removeArrayItem;\r\n function insertArrayItem(arr, index, value) {\r\n arr.splice(index, 0, value);\r\n }\r\n utils.insertArrayItem = insertArrayItem;\r\n function fillArray(arr, value, start, end) {\r\n if (start === void 0) { start = 0; }\r\n var len = arr.length >>> 0;\r\n var relativeStart = start >> 0;\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n while (k < final) {\r\n arr[k] = value;\r\n k++;\r\n }\r\n return arr;\r\n }\r\n utils.fillArray = fillArray;\r\n //------------ DOM utils ------------\r\n /**\r\n * Calculates the shift on which we need to move our element horizontally\r\n * to find current window\r\n * @param absLeft\r\n * @param width\r\n */\r\n function shiftToFitWindow(absLeft, width) {\r\n var body = document.getElementsByTagName('body')[0];\r\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\r\n var absRight = absLeft + width;\r\n var shift = 0;\r\n if (absRight > winWidth) {\r\n shift = winWidth - absRight - 10;\r\n if (absLeft + shift < 0) {\r\n shift = 10 - absLeft;\r\n }\r\n }\r\n return shift;\r\n }\r\n utils.shiftToFitWindow = shiftToFitWindow;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an object\r\n * @param val\r\n */\r\n function isObject(val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ((typeof val === 'function') || (typeof val === 'object'));\r\n }\r\n utils.isObject = isObject;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isNumericType(dtype) {\r\n var index = _numericTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isNumericType = isNumericType;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isIntType(dtype) {\r\n var index = _intTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isIntType = isIntType;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an a numeric value\r\n * @param val\r\n */\r\n function isNumeric(val) {\r\n return !isNaN(parseFloat(val)) && isFinite(val);\r\n }\r\n utils.isNumeric = isNumeric;\r\n /**\r\n * Returns `true` if two data types passed in parameters\r\n * are compatible - so it's safe to copy the values between\r\n * two expressions with these two types\r\n * @param type1\r\n * @param type2\r\n */\r\n function areCompatibleDataTypes(type1, type2) {\r\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\r\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\r\n || (type1 == DataType.DateTime && type2 == DataType.Date);\r\n }\r\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\r\n /**\r\n * Returns `true` if the property with named `propName`\r\n * in the object `obj` has some value\r\n * @param obj\r\n * @param propName\r\n */\r\n function isPropSet(obj, propName) {\r\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\r\n }\r\n utils.isPropSet = isPropSet;\r\n //-------------- ID generator -----------\r\n var prefixIdLen = 4;\r\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n var magicTicks = 636712160627685350;\r\n /**\r\n * Generates an unique ID\r\n */\r\n function generateId(prefix) {\r\n if (!prefix) {\r\n prefix = 'easy';\r\n }\r\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\r\n if (prfx && prfx.length > 0) {\r\n prfx += \"-\";\r\n }\r\n //adding 2 random symbols\r\n var randValue = strf.repeatString(\"\", 2);\r\n ;\r\n var maxSymbolIndex = symbols.length - 1;\r\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n //generating main ID part (64-base representation of the current value of the time ticks)\r\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\r\n return prfx + randValue + ticksNum64;\r\n }\r\n utils.generateId = generateId;\r\n function intToNum36(value) {\r\n var targetBase = 36;\r\n var i = 14;\r\n var buffer = strf.repeatString(\"\", i);\r\n var rest = value;\r\n do {\r\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\r\n rest = Math.floor(rest /= targetBase);\r\n } while (rest > 0);\r\n return strf.reverseString(buffer.trim());\r\n }\r\n function squeezeMoniker(str, maxlen) {\r\n var parts = str.split('-');\r\n var pml = 1;\r\n var ptt = maxlen;\r\n if (parts.length < maxlen) {\r\n pml = maxlen / parts.length;\r\n ptt = parts.length;\r\n }\r\n var result = \"\";\r\n for (var i = 0; i < ptt; i++) {\r\n result += squeeze(parts[i], pml);\r\n }\r\n return result;\r\n }\r\n function squeeze(str, maxlen) {\r\n var len = str.length;\r\n if (len > maxlen) {\r\n var step = len / maxlen;\r\n var result = \"\";\r\n result += str[0];\r\n var nextIndex = step;\r\n var ch = void 0;\r\n for (var i = 1; i < len; i++) {\r\n ch = str[i];\r\n if (i + 1 > nextIndex) {\r\n result += ch;\r\n nextIndex += step;\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n function replaceAtString(str, index, value) {\r\n return str.substr(0, index) + value + str.substr(index + value.length);\r\n }\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n function getNowTicks() {\r\n return (621355968e9 + (new Date()).getTime() * 1e4);\r\n }\r\n function safeParseInt(str) {\r\n var res = parseInt(str);\r\n if (isNaN(res))\r\n throw \"\\\"\" + str + \"\\\" is not a valid number\";\r\n return res;\r\n }\r\n function getDaysInMonth(month, year) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n // ------------- date/time functions -------------------\r\n // TO DO: improve to process all datetime cases\r\n function strToDateTime(value, format) {\r\n if (!value || value.length == 0)\r\n return new Date();\r\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var formatItems = normalizedFormat.split('-');\r\n var dateItems = normalizedValue.split('-');\r\n var monthIndex = formatItems.indexOf(\"MM\");\r\n var dayIndex = formatItems.indexOf(\"dd\");\r\n var yearIndex = formatItems.indexOf(\"yyyy\");\r\n var hourIndex = formatItems.indexOf(\"HH\");\r\n var minutesIndex = formatItems.indexOf(\"mm\");\r\n var secondsIndex = formatItems.indexOf(\"ss\");\r\n var today = new Date();\r\n try {\r\n var year = yearIndex > -1 && yearIndex < dateItems.length\r\n ? safeParseInt(dateItems[yearIndex])\r\n : today.getFullYear();\r\n var month = monthIndex > -1 && monthIndex < dateItems.length\r\n ? safeParseInt(dateItems[monthIndex]) - 1\r\n : today.getMonth() - 1;\r\n if (month > 11)\r\n throw '';\r\n var day = dayIndex > -1 && dayIndex < dateItems.length\r\n ? safeParseInt(dateItems[dayIndex])\r\n : today.getDate();\r\n if (day > getDaysInMonth(month, year))\r\n throw '';\r\n var hour = hourIndex > -1 && hourIndex < dateItems.length\r\n ? safeParseInt(dateItems[hourIndex])\r\n : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\r\n ? safeParseInt(dateItems[minutesIndex])\r\n : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\r\n ? safeParseInt(dateItems[secondsIndex])\r\n : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(year, month, day, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw value + \" is not a valid date.\";\r\n }\r\n }\r\n utils.strToDateTime = strToDateTime;\r\n function strToTime(str) {\r\n var timeItems = str.split(':');\r\n try {\r\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(0, 0, 0, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw str + \" is not a valid time.\";\r\n }\r\n }\r\n utils.strToTime = strToTime;\r\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\r\n /**\r\n * Returns string representation of the date/time value according to the custom format (second parameter)\r\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\r\n * @param date\r\n * @param format\r\n */\r\n function dateTimeToStr(date, format) {\r\n var year = date.getFullYear();\r\n var month = date.getMonth() + 1;\r\n var day = date.getDate();\r\n var hour = date.getHours();\r\n var minute = date.getMinutes();\r\n var second = date.getSeconds();\r\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\r\n var isPm = hour > 11;\r\n var matches = {\r\n yyyy: year.toString(),\r\n MMMM: i18n.getLongMonthName(month),\r\n MMM: i18n.getShortMonthName(month),\r\n MM: (month < 10) ? '0' + month : month.toString(),\r\n M: month.toString(),\r\n dd: (day < 10) ? '0' + day : day.toString(),\r\n d: day.toString(),\r\n HH: (hour < 10) ? '0' + hour : hour.toString(),\r\n H: hour.toString(),\r\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\r\n h: hour12.toString(),\r\n tt: isPm ? 'PM' : 'AM',\r\n mm: (minute < 10) ? '0' + minute : minute.toString(),\r\n ss: (second < 10) ? '0' + second : second.toString()\r\n };\r\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\r\n return $1 || matches[match];\r\n });\r\n }\r\n utils.dateTimeToStr = dateTimeToStr;\r\n /**\r\n * Converts a numeric value to the string taking into the account the decimal separator\r\n * @param value - the number to convert\r\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\r\n */\r\n function numberToStr(number, decimalSeparator) {\r\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\r\n return number.toString().replace('.', decimalSeparator);\r\n }\r\n utils.numberToStr = numberToStr;\r\n})(utils || (utils = {}));\r\n//# sourceMappingURL=utils.js.map","var HttpActionResult = /** @class */ (function () {\r\n function HttpActionResult(request, promise) {\r\n this.request = request;\r\n this.promise = promise;\r\n }\r\n HttpActionResult.prototype.getPromise = function () {\r\n return this.promise;\r\n };\r\n HttpActionResult.prototype.getRequest = function () {\r\n return this.request;\r\n };\r\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\r\n return this.promise.then(onfulfilled, onrejected);\r\n };\r\n HttpActionResult.prototype.catch = function (onrejected) {\r\n return this.promise.catch(onrejected);\r\n };\r\n HttpActionResult.prototype.finally = function (onfinally) {\r\n return this.promise.finally(onfinally);\r\n };\r\n return HttpActionResult;\r\n}());\r\nexport { HttpActionResult };\r\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { utils } from '../utils/utils';\r\nimport { HttpActionResult } from './http_action_result';\r\nimport { HttpMethod } from './http_method';\r\nimport { HttpRequest } from './http_request';\r\nvar HttpResponseError = /** @class */ (function (_super) {\r\n __extends(HttpResponseError, _super);\r\n function HttpResponseError(status, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.status = status;\r\n return _this;\r\n }\r\n return HttpResponseError;\r\n}(Error));\r\nexport { HttpResponseError };\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n this.defaultHeaders = {};\r\n this.customPayload = undefined;\r\n }\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(HttpMethod.Get, url, null, options);\r\n };\r\n HttpClient.prototype.post = function (url, data, options) {\r\n return this.send(HttpMethod.Post, url, data, options);\r\n };\r\n HttpClient.prototype.put = function (url, data, options) {\r\n return this.send(HttpMethod.Put, url, data, options);\r\n };\r\n HttpClient.prototype.delete = function (url, data, options) {\r\n return this.send(HttpMethod.Delete, url, data, options);\r\n };\r\n HttpClient.prototype.send = function (method, url, data, options) {\r\n options = options || {};\r\n var dataType = options.dataType || 'json';\r\n var contentType = options.contentType || (dataType !== 'form-data')\r\n ? 'application/json'\r\n : null;\r\n if (data && dataType != 'form-data' && this.customPayload) {\r\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\r\n }\r\n var XHR = ('onload' in new XMLHttpRequest())\r\n ? XMLHttpRequest\r\n : window[\"XDomainRequest\"]; //IE support\r\n var xhr = new XHR();\r\n var desc = {\r\n method: method,\r\n url: url,\r\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\r\n queryParams: options.queryParams || {},\r\n data: data\r\n };\r\n if (contentType)\r\n desc.headers['Content-Type'] = contentType;\r\n var request = new HttpRequest(xhr, desc);\r\n if (this.beforeEachRequest) {\r\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\r\n this.beforeEachRequest(request);\r\n }\r\n if (this.onRequest) {\r\n this.onRequest(request);\r\n }\r\n var dataToSend = (request.data && typeof request.data !== 'string'\r\n && dataType == 'json')\r\n ? JSON.stringify(request.data)\r\n : request.data;\r\n request.open();\r\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\r\n if (options.responseType)\r\n xhr.responseType = options.responseType;\r\n xhr.onerror = function (error) {\r\n reject(new HttpResponseError(xhr.status, xhr.responseText));\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState != 4)\r\n return; //we process only the state change to DONE(4)\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status === 0) {\r\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\r\n }\r\n else if (status >= 200 && status < 400) {\r\n //Success\r\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? xhr.response\r\n : (responseContentType.indexOf('application/json') == 0\r\n ? JSON.parse(xhr.responseText)\r\n : xhr.responseText);\r\n resolve(responseObj);\r\n }\r\n else {\r\n //Error\r\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? HttpClient.decodeArrayBuffer(xhr.response)\r\n : Promise.resolve(xhr.responseText);\r\n rtPromise.then(function (responseText) {\r\n var responseObj = (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(responseText)\r\n : responseText;\r\n var message = responseObj.message ||\r\n (status == 404\r\n ? \"No such endpoint: \" + url\r\n : responseObj);\r\n reject(new HttpResponseError(status, message));\r\n });\r\n }\r\n };\r\n xhr.send(dataToSend);\r\n }));\r\n };\r\n HttpClient.decodeArrayBuffer = function (uintArray) {\r\n var reader = new FileReader();\r\n return new Promise(function (resolve) {\r\n reader.onloadend = function () {\r\n if (reader.readyState == FileReader.DONE) {\r\n resolve(reader.result);\r\n }\r\n };\r\n reader.readAsText(new Blob([uintArray]));\r\n });\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\r\nimport { EntityAttrKind } from '../types/entity_attr_kind';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Represents one entity.\r\n */\r\nvar MetaEntity = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntity(parent) {\r\n /** Returns false if this entity is read-only */\r\n this.isEditable = true;\r\n this.name = \"\";\r\n this.caption = \"\";\r\n this.description = \"\";\r\n this.parent = parent;\r\n this.attributes = new Array();\r\n this.subEntities = new Array();\r\n }\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntity.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.name = dto.name;\r\n this.captionPlural = dto.namePlur;\r\n this.caption = dto.name;\r\n this.description = dto.desc;\r\n if (typeof (dto.ied) !== 'undefined')\r\n this.isEditable = dto.ied;\r\n this.subEntities = new Array();\r\n if (dto.ents) {\r\n for (var i = 0; i < dto.ents.length; i++) {\r\n var newEntity = model.createEntity(this);\r\n newEntity.loadFromData(model, dto.ents[i]);\r\n this.subEntities.push(newEntity);\r\n }\r\n }\r\n this.attributes = new Array();\r\n if (dto.attrs) {\r\n for (var i = 0; i < dto.attrs.length; i++) {\r\n var newAttr = model.createEntityAttr(this);\r\n newAttr.loadFromData(model, dto.attrs[i]);\r\n this.attributes.push(newAttr);\r\n }\r\n }\r\n }\r\n };\r\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\r\n var opts = { stop: false };\r\n var internalProcessEntity = function (entity) {\r\n if (processEntity)\r\n processEntity(entity, opts);\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\r\n var attr = entity.attributes[i];\r\n if (processAttribute) {\r\n processAttribute(attr, opts);\r\n }\r\n if (opts.stop)\r\n return;\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\r\n internalProcessEntity(entity.subEntities[i]);\r\n }\r\n }\r\n };\r\n internalProcessEntity(this);\r\n };\r\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\r\n return this.getPrimaryAttrs()[0];\r\n };\r\n MetaEntity.prototype.getPrimaryAttrs = function () {\r\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\r\n };\r\n return MetaEntity;\r\n}());\r\nexport { MetaEntity };\r\nvar MetaEntityAttr = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntityAttr(entity) {\r\n this.id = \"\";\r\n this.caption = \"{Unrecognized attribute}\";\r\n this.dataType = DataType.String;\r\n this.size = 0;\r\n this.isPrimaryKey = false;\r\n this.isForeignKey = false;\r\n this.isNullable = true;\r\n this.showOnView = true;\r\n this.isEditable = true;\r\n this.showOnCreate = true;\r\n this.showOnEdit = true;\r\n this.showInLookup = false;\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n this.entity = entity;\r\n this.kind = EntityAttrKind.Data;\r\n }\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.description = dto.desc;\r\n this.caption = dto.cptn;\r\n this.dataType = dto.dtype;\r\n this.isPrimaryKey = dto.ipk;\r\n this.isForeignKey = dto.ifk;\r\n this.size = dto.size;\r\n this.lookupAttr = dto.lattr;\r\n this.lookupEntity = dto.lent;\r\n this.dataAttr = dto.dattr;\r\n this.lookupDataAttr = dto.ldattr;\r\n this.defaultValue = dto.defVal;\r\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\r\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\r\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\r\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\r\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\r\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\r\n this.kind = dto.kind;\r\n this.displayFormat = dto.dfmt;\r\n if (dto.udata)\r\n this.userData = dto.udata;\r\n if (dto.edtr) {\r\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\r\n }\r\n }\r\n };\r\n return MetaEntityAttr;\r\n}());\r\nexport { MetaEntityAttr };\r\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\n/**\r\n * Represents a value editor.\r\n */\r\nvar ValueEditor = /** @class */ (function () {\r\n /** The default constructor. */\r\n function ValueEditor() {\r\n this.id = \"\";\r\n this.tag = EditorTag.Unknown;\r\n this.resType = DataType.Unknown;\r\n this.defValue = \"\";\r\n }\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n ValueEditor.prototype.loadFromData = function (data) {\r\n if (data) {\r\n this.id = data.id;\r\n this.tag = data.tag;\r\n this.defValue = data.defval;\r\n this.resType = data.rtype;\r\n this.accept = data.accept;\r\n this.multiline = data.multiline;\r\n if (data.subType) {\r\n this.resType = data.subType;\r\n }\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n if (data.values) {\r\n this.values = data.values;\r\n }\r\n }\r\n };\r\n ValueEditor.prototype.getValueText = function (value) {\r\n var result = \"\";\r\n if (!this.values)\r\n return result;\r\n if (Array.isArray(value)) {\r\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (value.indexOf(item.id) >= 0) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n else {\r\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n if (item.id === value) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n if (result) {\r\n result = result.substring(0, result.length - 1);\r\n }\r\n return result;\r\n };\r\n return ValueEditor;\r\n}());\r\nexport { ValueEditor };\r\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\r\nimport { utils } from '../utils/utils';\r\nimport { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\r\nimport { ValueEditor } from './value_editor';\r\n/**\r\n * Represents a data model\r\n */\r\nvar MetaData = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaData() {\r\n this.mainEntity = null;\r\n this.id = '__none';\r\n this.name = 'Empty model';\r\n this.rootEntity = this.createEntity();\r\n this.displayFormats = new Map();\r\n }\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n MetaData.prototype.getMainEntity = function () {\r\n return this.mainEntity;\r\n };\r\n MetaData.prototype.createEntity = function (parent) {\r\n return new MetaEntity(parent);\r\n };\r\n MetaData.prototype.createEntityAttr = function (parent) {\r\n return new MetaEntityAttr(parent);\r\n };\r\n MetaData.prototype.createValueEditor = function () {\r\n return new ValueEditor();\r\n };\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n MetaData.prototype.loadFromJSON = function (stringJson) {\r\n var model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n };\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n MetaData.prototype.loadFromData = function (data) {\r\n this.id = data.id;\r\n this.name = data.name;\r\n this.version = data.vers;\r\n //Editors\r\n this.editors = new Array();\r\n if (data.editors) {\r\n for (var i = 0; i < data.editors.length; i++) {\r\n var newEditor = this.createValueEditor();\r\n newEditor.loadFromData(data.editors[i]);\r\n this.editors.push(newEditor);\r\n }\r\n }\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n //DataFormats\r\n this.displayFormats = new Map();\r\n if (data.displayFormats) {\r\n for (var dtypeStr in data.displayFormats) {\r\n var dtype = DataType[dtypeStr];\r\n var formats = data.displayFormats[dtypeStr] || new Array();\r\n this.displayFormats.set(dtype, formats);\r\n }\r\n }\r\n };\r\n /**\r\n * Gets the display formats.\r\n * @returns The display formats.\r\n */\r\n MetaData.prototype.getDisplayFormats = function () {\r\n return this.displayFormats;\r\n };\r\n /**\r\n * Gets the display formats for type\r\n * @param type The type\r\n * @returns An array of display formats\r\n */\r\n MetaData.prototype.getDisplayFormatsForType = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type);\r\n }\r\n return [];\r\n };\r\n /**\r\n * Gets the default display format for the provided type\r\n * @param type The type\r\n * @returns The default type format or null\r\n */\r\n MetaData.prototype.getDefaultFormat = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n MetaData.prototype.setData = function (model) {\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n };\r\n /**\r\n * Checks wether the data model is empty.\r\n * @returns `true` if the data model is empty, otherwise `false`.\r\n */\r\n MetaData.prototype.isEmpty = function () {\r\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\r\n };\r\n /**\r\n * Gets ID of the data model.\r\n * @returns The ID.\r\n */\r\n MetaData.prototype.getId = function () {\r\n return this.id;\r\n };\r\n /**\r\n * Gets name of the data model.\r\n * @returns The name.\r\n */\r\n MetaData.prototype.getName = function () {\r\n return this.name;\r\n };\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n MetaData.prototype.getRootEntity = function () {\r\n return this.rootEntity;\r\n };\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n MetaData.prototype.getEditorById = function (editorId) {\r\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\r\n var editor = _a[_i];\r\n if (editor.id === editorId) {\r\n return editor;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getAttributeById = function (attrId) {\r\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n };\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\r\n var attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity\r\n * @param attrId\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\r\n var idx;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (idx = 0; idx < attrCount; idx++) {\r\n if (entity.attributes[idx].id == attrId) {\r\n return entity.attributes[idx];\r\n }\r\n }\r\n }\r\n var res;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (idx = 0; idx < subEntityCount; idx++) {\r\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\r\n if (res)\r\n return res;\r\n }\r\n }\r\n return null;\r\n };\r\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\r\n var result = new Array();\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\r\n opts = opts || {};\r\n var resultEntities = [];\r\n var resultAttributes = [];\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n var newEnt = utils.assign(this.createEntity(), {\r\n id: ent.name,\r\n text: caption,\r\n items: [],\r\n isEntity: true,\r\n description: ent.description\r\n });\r\n var newOpts = utils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\r\n id: attr.id, text: caption,\r\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\r\n description: attr.description\r\n }));\r\n }\r\n }\r\n }\r\n var sortCheck = function (a, b) {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\r\n return 0;\r\n }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n };\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n var result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n };\r\n /**\r\n * Clears data model.\r\n */\r\n MetaData.prototype.clear = function () {\r\n this.rootEntity = this.createEntity();\r\n this.editors = [];\r\n this.version = '';\r\n };\r\n /**\r\n * Add default value editors.\r\n */\r\n MetaData.prototype.addDefaultValueEditors = function () {\r\n var ve;\r\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\r\n ve.defValue = '';\r\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\r\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\r\n };\r\n /**\r\n * Add or update a value editor.\r\n * @param id The id.\r\n * @param tag The tag.\r\n * @param resType The result type.\r\n * @returns The value editor.\r\n */\r\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\r\n var ve = utils.findItemById(this.editors, id);\r\n if (!ve) {\r\n ve = this.createValueEditor();\r\n ve.id = id;\r\n this.editors.push(ve);\r\n }\r\n ve.tag = tag;\r\n ve.resType = resType;\r\n return ve;\r\n };\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\r\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\r\n };\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\r\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n };\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n };\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\r\n if (!entity)\r\n return '';\r\n sep = sep || ' ';\r\n var entityCaption = '';\r\n if (entity.caption && !root) {\r\n var entityText = i18n.getText('Entities', entity.caption);\r\n entityCaption = entityText ? entityText : entity.caption;\r\n }\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].id == attrId) {\r\n return entityCaption;\r\n }\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; i < subEntityCount; i++) {\r\n var ent = entity.subEntities[i];\r\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\r\n if (res !== '') {\r\n if (entityCaption !== '')\r\n res = entityCaption + sep + res;\r\n return res;\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n MetaData.prototype.getAttributeText = function (attr, format) {\r\n var attrText = i18n.getText('Attributes', attr.id);\r\n if (!attrText) {\r\n attrText = attr.caption;\r\n }\r\n if (!format) {\r\n return attrText;\r\n }\r\n var result = '';\r\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\r\n if (entityPath) {\r\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\r\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\r\n }\r\n else {\r\n result = attrText;\r\n }\r\n return result.trim();\r\n };\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n };\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\r\n var res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n };\r\n return MetaData;\r\n}());\r\nexport { MetaData };\r\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Defines aggregations settings for the current context.\r\n * Group, aggregate columns, grand totals, etc.\r\n */\r\nvar AggregationSettings = /** @class */ (function () {\r\n function AggregationSettings(colStore) {\r\n this.colStore = colStore;\r\n this.aggregates = [];\r\n this.groups = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this._caseSensitiveGroups = false;\r\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\r\n }\r\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\r\n get: function () {\r\n return this._caseSensitiveGroups;\r\n },\r\n set: function (value) {\r\n this._caseSensitiveGroups = value;\r\n this.updateCompareProc();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AggregationSettings.prototype.updateCompareProc = function () {\r\n this.compareValues = this._caseSensitiveGroups\r\n ? this.strictCompare\r\n : this.caseInsensitiveCompare;\r\n };\r\n AggregationSettings.prototype.addGroup = function (settings) {\r\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\r\n if (!this.colStore.validateColumns(cols))\r\n throw \"Invalid columns: \" + cols;\r\n if (this.hasColumnsInUse(cols))\r\n throw \"Can't add same columns to different groups/aggregates\";\r\n this.groups.push(__assign({ columns: cols }, settings));\r\n return this;\r\n };\r\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\r\n var colId = typeof colIndexOrId == 'string'\r\n ? colIndexOrId\r\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\r\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\r\n throw 'Invalid aggregation function for the column: ' + colId;\r\n this.aggregates.push({ colId: colId, funcId: funcId });\r\n return this;\r\n };\r\n AggregationSettings.prototype.addGrandTotals = function () {\r\n this.useGrandTotals = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.addCounts = function () {\r\n this.useRecordCount = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.getGroups = function () {\r\n var _this = this;\r\n var cols = [];\r\n var mappedGrops = this.groups.map(function (grp) {\r\n cols = cols.concat(grp.columns);\r\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\r\n });\r\n return mappedGrops;\r\n };\r\n AggregationSettings.prototype.getInternalGroups = function () {\r\n return this.groups;\r\n };\r\n AggregationSettings.prototype.lastGroup = function () {\r\n var groups = this.getGroups();\r\n return groups[groups.length - 1];\r\n };\r\n AggregationSettings.prototype.getAggregates = function () {\r\n return this.aggregates;\r\n };\r\n AggregationSettings.prototype.hasAggregates = function () {\r\n return this.aggregates.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGroups = function () {\r\n return this.groups.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGrandTotals = function () {\r\n return this.useGrandTotals;\r\n };\r\n AggregationSettings.prototype.hasRecordCount = function () {\r\n return this.useRecordCount;\r\n };\r\n AggregationSettings.prototype.isEmpty = function () {\r\n return !(this.hasAggregates() || this.hasGroups() ||\r\n this.hasAggregates() || this.hasRecordCount());\r\n };\r\n AggregationSettings.prototype.drop = function () {\r\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\r\n this.clear();\r\n };\r\n AggregationSettings.prototype.clear = function () {\r\n this.groups = [];\r\n this.aggregates = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this.caseSensitiveGroups = false;\r\n return this;\r\n };\r\n /**\r\n * Checks if all columns from the list passed in the parameter are \"unused\".\r\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\r\n * @param cols - the array of column IDs\r\n * @returns true if all columns in the list are not used anywhere, othervise - fals\r\n */\r\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var interCols = group.columns\r\n .filter(function (c) { return cols.indexOf(c) >= 0; });\r\n if (interCols.length > 0)\r\n return true;\r\n }\r\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\r\n var aggr = _c[_b];\r\n if (cols.indexOf(aggr.colId) >= 0)\r\n return true;\r\n }\r\n return false;\r\n };\r\n AggregationSettings.prototype.needAggrCalculation = function () {\r\n return (this.hasAggregates() || this.hasRecordCount())\r\n && (this.hasGrandTotals() || this.hasGroups());\r\n };\r\n AggregationSettings.prototype.saveToData = function () {\r\n return {\r\n groups: Array.from(this.groups),\r\n ugt: this.useGrandTotals,\r\n urc: this.useRecordCount,\r\n csg: this.caseSensitiveGroups,\r\n aggregates: Array.from(this.aggregates)\r\n };\r\n };\r\n AggregationSettings.prototype.loadFromData = function (data) {\r\n if (data) {\r\n if (typeof data.ugt !== 'undefined')\r\n this.useGrandTotals = data.ugt;\r\n if (typeof data.urc !== 'undefined')\r\n this.useRecordCount = data.urc;\r\n if (typeof data.csg !== 'undefined')\r\n this.caseSensitiveGroups = data.csg;\r\n if (data.groups) {\r\n this.groups = Array.from(data.groups);\r\n }\r\n if (data.aggregates) {\r\n this.aggregates = Array.from(data.aggregates);\r\n }\r\n }\r\n };\r\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\r\n var caseInsensitive = !this.caseSensitiveGroups;\r\n var result = {};\r\n if (group) {\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var colId = _a[_i];\r\n var keyVal = row.getValue(colId);\r\n if (caseInsensitive && typeof (keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n }\r\n return result;\r\n };\r\n //returns true if value1 == value2\r\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\r\n return value1 === value2;\r\n };\r\n //makes a case insensative comparision of two values and return true if there are equal\r\n AggregationSettings.prototype.caseInsensitiveCompare = function (value1, value2) {\r\n var val1 = (typeof value1 === 'string') ? value1.toLowerCase() : value1;\r\n var val2 = (typeof value2 === 'string') ? value2.toLowerCase() : value2;\r\n return val1 === val2;\r\n };\r\n return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_settings.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nexport var ColumnAlignment;\r\n(function (ColumnAlignment) {\r\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\r\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\r\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\r\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\r\n})(ColumnAlignment || (ColumnAlignment = {}));\r\nvar DataColumn = /** @class */ (function () {\r\n function DataColumn(desc) {\r\n if (!desc)\r\n throw Error(\"Options are required\");\r\n if (!desc.id)\r\n throw Error(\"Field Id is required\");\r\n if (!desc.label)\r\n throw Error(\"Label is required\");\r\n this.id = desc.id;\r\n this.type = utils.getIfDefined(desc.type, DataType.String);\r\n this.label = desc.label;\r\n this.originAttrId = desc.originAttrId;\r\n this.isAggr = desc.isAggr || false;\r\n this.displayFormat = desc.dfmt;\r\n this.groupFooterColumnTemplate = desc.gfct;\r\n this.style = desc.style || {};\r\n this.description = desc.description;\r\n this.calculatedWidth = 0;\r\n }\r\n return DataColumn;\r\n}());\r\nexport { DataColumn };\r\nvar DataColumnList = /** @class */ (function () {\r\n function DataColumnList() {\r\n this.items = [];\r\n this.mapper = {};\r\n this._dateColumnIdx = [];\r\n }\r\n Object.defineProperty(DataColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DataColumnList.prototype.add = function (colOrDesc) {\r\n var col;\r\n if (colOrDesc instanceof DataColumn) {\r\n col = colOrDesc;\r\n }\r\n else {\r\n col = new DataColumn(colOrDesc);\r\n }\r\n var index = this.items.length;\r\n this.items.push(col);\r\n this.mapper[col.id] = index;\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\r\n this._dateColumnIdx.push(index);\r\n }\r\n return index;\r\n };\r\n DataColumnList.prototype.updateDateColumnIdx = function () {\r\n this._dateColumnIdx = this.getItems()\r\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\r\n .map(function (col, index) { return index; });\r\n };\r\n DataColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.count) {\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex) {\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.count) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n DataColumnList.prototype.getIndex = function (id) {\r\n return this.mapper[id];\r\n };\r\n DataColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n DataColumnList.prototype.getDateColumnIndexes = function () {\r\n return this._dateColumnIdx;\r\n };\r\n DataColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n var removeDate = this._dateColumnIdx.indexOf(index);\r\n if (removeDate >= 0) {\r\n this._dateColumnIdx.splice(removeDate, 1);\r\n }\r\n delete this.mapper[col.id];\r\n };\r\n DataColumnList.prototype.clear = function () {\r\n this.items = [];\r\n this._dateColumnIdx = [];\r\n this.mapper = {};\r\n };\r\n return DataColumnList;\r\n}());\r\nexport { DataColumnList };\r\n//# sourceMappingURL=data_column.js.map","var DataRow = /** @class */ (function () {\r\n function DataRow(columns, values) {\r\n this.columns = columns;\r\n this.values = values;\r\n }\r\n DataRow.prototype.toArray = function () {\r\n return Array.from(this.values);\r\n };\r\n DataRow.prototype.size = function () {\r\n return this.values.length;\r\n };\r\n DataRow.prototype.getValue = function (colIdOrIndex) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n return this.values[index];\r\n };\r\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n this.values[index] = value;\r\n };\r\n return DataRow;\r\n}());\r\nexport { DataRow };\r\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\r\nimport { DataRow } from './data_row';\r\nimport { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nvar EasyDataTable = /** @class */ (function () {\r\n function EasyDataTable(options) {\r\n this._chunkSize = 1000;\r\n this._elasticChunks = false;\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\r\n this.isInMemory = false;\r\n options = options || {};\r\n this._chunkSize = options.chunkSize || this._chunkSize;\r\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\r\n this.loader = options.loader;\r\n if (typeof options.inMemory !== 'undefined') {\r\n this.isInMemory = options.inMemory;\r\n }\r\n if (this.isInMemory) {\r\n this.needTotal = false;\r\n }\r\n this._columns = new DataColumnList();\r\n this.onUpdate = options.onUpdate;\r\n if (options.columns) {\r\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\r\n var colDesc = _a[_i];\r\n this._columns.add(colDesc);\r\n }\r\n }\r\n if (options.rows) {\r\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\r\n var rowData = _c[_b];\r\n var row = this.createRow(rowData);\r\n this.addRow(row);\r\n }\r\n }\r\n this.needTotal = !this._elasticChunks;\r\n }\r\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\r\n get: function () {\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\r\n get: function () {\r\n return this._chunkSize;\r\n },\r\n set: function (value) {\r\n this._chunkSize = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\r\n get: function () {\r\n return this._elasticChunks;\r\n },\r\n set: function (value) {\r\n this._elasticChunks = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyDataTable.prototype.getRows = function (params) {\r\n var _this = this;\r\n var fromIndex = 0, count = this._chunkSize;\r\n if (params) {\r\n if ('page' in params) {\r\n fromIndex = params.pageSize * (params.page - 1);\r\n count = params.pageSize;\r\n }\r\n else {\r\n fromIndex = params.offset;\r\n count = params.limit;\r\n }\r\n }\r\n var endIndex = fromIndex + count; //the first index of the next page\r\n //if we don't calculate total on this request\r\n if (!this.needTotal && !this.elasticChunks) {\r\n if (fromIndex >= this.total) {\r\n return Promise.resolve([]);\r\n }\r\n if (endIndex > this.total) {\r\n endIndex = this.total;\r\n }\r\n }\r\n if (this.isInMemory && endIndex > this.cachedRows.length) {\r\n endIndex = this.cachedRows.length;\r\n }\r\n var allChunksCached = endIndex <= this.cachedRows.length;\r\n if (allChunksCached) {\r\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\r\n }\r\n //if loader is not defined\r\n if (!this.loader) {\r\n throw \"Loader is not defined. Can't get the rows from \" + fromIndex + \" to \" + endIndex;\r\n }\r\n // we need total only for the first request\r\n var needTotal = this.needTotal;\r\n if (this.needTotal) {\r\n this.needTotal = false;\r\n }\r\n var offset = this.cachedRows.length;\r\n var limit = endIndex - offset;\r\n if (limit < this._chunkSize) {\r\n limit = this._chunkSize;\r\n }\r\n var resultPromise = this.loader.loadChunk({\r\n offset: offset,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n if (needTotal) {\r\n _this.total = result.total;\r\n }\r\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\r\n if (endIndex > _this.cachedRows.length) {\r\n endIndex = _this.cachedRows.length;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 < limit) {\r\n _this.total = _this.cachedRows.length;\r\n }\r\n }\r\n _this.fireUpdated();\r\n return _this.cachedRows.slice(fromIndex, endIndex);\r\n });\r\n return resultPromise;\r\n };\r\n EasyDataTable.prototype.getRow = function (index) {\r\n return this.getRows({ offset: index, limit: 1 })\r\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\r\n };\r\n EasyDataTable.prototype.getTotal = function () {\r\n return this.total;\r\n };\r\n EasyDataTable.prototype.setTotal = function (total) {\r\n this.total = total;\r\n this.needTotal = false;\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.cachedRows.length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\r\n this.fireUpdated();\r\n };\r\n EasyDataTable.prototype.createRow = function (dataOrRow) {\r\n var _this = this;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n var values = new Array(this._columns.count);\r\n var getValue = dataOrRow instanceof DataRow\r\n ? function (colId) { return dataOrRow.getValue(colId); }\r\n : function (colId) { return dataOrRow[colId]; };\r\n if (dataOrRow) {\r\n this.columns.getItems().forEach(function (column) {\r\n var value = getValue(column.id);\r\n var index = _this.columns.getIndex(column.id);\r\n values[index] = (dateIdx.indexOf(index) >= 0)\r\n ? _this.mapDate(value, column.type)\r\n : value;\r\n });\r\n }\r\n return new DataRow(this._columns, values);\r\n };\r\n EasyDataTable.prototype.mapDate = function (value, dtype) {\r\n if (value) {\r\n var result = new Date(value);\r\n if (isNaN(result.getTime())\r\n && dtype == DataType.Time) {\r\n result = utils.strToTime(value);\r\n }\r\n return result;\r\n }\r\n return null;\r\n };\r\n EasyDataTable.prototype.addRow = function (rowOrValues) {\r\n var newRow;\r\n if (Array.isArray(rowOrValues)) {\r\n var values = rowOrValues;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n if (dateIdx.length > 0) {\r\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\r\n var idx = dateIdx_1[_i];\r\n if (values[idx]) {\r\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, values);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValues);\r\n }\r\n this.cachedRows.push(newRow);\r\n var cachedTotal = this.getCachedCount();\r\n if (cachedTotal > this.total) {\r\n this.total = cachedTotal;\r\n }\r\n return newRow;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.cachedRows;\r\n };\r\n EasyDataTable.prototype.totalIsKnown = function () {\r\n if (this.elasticChunks) {\r\n var count = this.getCachedCount();\r\n return count === this.total;\r\n }\r\n return !this.needTotal;\r\n };\r\n EasyDataTable.prototype.fireUpdated = function () {\r\n if (this.onUpdate) {\r\n this.onUpdate(this);\r\n }\r\n };\r\n return EasyDataTable;\r\n}());\r\nexport { EasyDataTable };\r\n//# sourceMappingURL=easy_data_table.js.map","/**\r\n * EasyData representation of GUID.\r\n */\r\nvar EasyGuid = /** @class */ (function () {\r\n function EasyGuid() {\r\n }\r\n /**\r\n * Generates new GUID.\r\n * @returns The string representation of GUID.\r\n */\r\n EasyGuid.newGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return EasyGuid;\r\n}());\r\nexport { EasyGuid };\r\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\r\n/**\r\n * The representation of event emitter.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n /**\r\n * The default constructor.\r\n * @param source The source.\r\n */\r\n function EventEmitter(source) {\r\n this.silentMode = 0;\r\n this.events = new Array();\r\n this.source = source;\r\n }\r\n /**\r\n * Subscries to the event.\r\n * @param eventType The event type.\r\n * @param callback The callback.\r\n * @returns The subscribtion ID.\r\n */\r\n EventEmitter.prototype.subscribe = function (eventType, callback) {\r\n var event = this.getEventRecByType(eventType);\r\n var eventCallback = {\r\n id: EasyGuid.newGuid(),\r\n callback: callback\r\n };\r\n if (event) {\r\n event.eventCallbacks.push(eventCallback);\r\n }\r\n else {\r\n event = {\r\n type: eventType,\r\n eventCallbacks: new Array(eventCallback)\r\n };\r\n this.events.push(event);\r\n }\r\n return eventCallback.id;\r\n };\r\n /**\r\n * Unsubsribes from the event.\r\n * @param eventType The event type.\r\n * @param callbackId The subscribtion ID.\r\n */\r\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\r\n var event = this.getEventRecByType(eventType);\r\n if (event) {\r\n var index = -1;\r\n for (index = 0; index < event.eventCallbacks.length; index++) {\r\n if (event.eventCallbacks[index].id === callbackId) {\r\n break;\r\n }\r\n }\r\n if (index >= 0) {\r\n event.eventCallbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Fires the event.\r\n * @param eventType The event type.\r\n * @param data The event data.\r\n * @param postpone The postpone.\r\n * @param force To fire force. If value is `true`, ignores silent mode.\r\n */\r\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\r\n if (postpone === void 0) { postpone = 0; }\r\n if (force === void 0) { force = false; }\r\n if (this.silentMode && !force) {\r\n return;\r\n }\r\n var eventRec = this.getEventRecByType(eventType);\r\n if (eventRec) {\r\n var eqevent_1 = {\r\n type: eventType,\r\n source: this.source,\r\n data: data\r\n };\r\n var emitAllFunc = function () {\r\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\r\n var callback = _a[_i];\r\n callback.callback(eqevent_1);\r\n }\r\n };\r\n if (postpone > 0) {\r\n setTimeout(emitAllFunc, postpone);\r\n }\r\n else {\r\n emitAllFunc();\r\n }\r\n }\r\n };\r\n /**\r\n * Enters to silent mode.\r\n */\r\n EventEmitter.prototype.enterSilentMode = function () {\r\n this.silentMode++;\r\n };\r\n /**\r\n * Exits from silent mode.\r\n */\r\n EventEmitter.prototype.exitSilentMode = function () {\r\n if (this.silentMode) {\r\n this.silentMode--;\r\n }\r\n };\r\n /**\r\n * Checks if emitter is in silent mode.\r\n * @return `true`, if silent mode is enable.\r\n */\r\n EventEmitter.prototype.isSilent = function () {\r\n return this.silentMode > 0;\r\n };\r\n EventEmitter.prototype.getEventRecByType = function (eventType) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var event_1 = _a[_i];\r\n if (event_1.type == eventType) {\r\n return event_1;\r\n }\r\n }\r\n return null;\r\n };\r\n return EventEmitter;\r\n}());\r\nexport { EventEmitter };\r\n//# sourceMappingURL=event_emitter.js.map","export var liquid;\r\n(function (liquid) {\r\n function renderLiquidTemplate(template, vars) {\r\n var result = template;\r\n if (vars) {\r\n for (var v in vars) {\r\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\r\n result = result.replace(liquidVarRegexp, vars[v]);\r\n }\r\n }\r\n return result;\r\n }\r\n liquid.renderLiquidTemplate = renderLiquidTemplate;\r\n})(liquid || (liquid = {}));\r\n//# sourceMappingURL=liquid.js.map","import { i18n } from './i18n';\r\ni18n.resetLocales();\r\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\r\nexport * from './types/data_type';\r\nexport * from './types/entity_attr_kind';\r\nexport * from './types/editor_tag';\r\n//http\r\nexport * from './http/http_method';\r\nexport * from './http/http_request';\r\nexport * from './http/http_client';\r\n//meta data\r\nexport * from './meta/meta_data';\r\nexport * from './meta/meta_entity';\r\nexport * from './meta/value_editor';\r\nexport * from './data/aggr_settings';\r\nexport * from './data/data_column';\r\nexport * from './data/data_row';\r\nexport * from './data/easy_data_table';\r\n//event\r\nexport * from './event/event_emitter';\r\n//i18n\r\nexport * from './i18n/i18n';\r\n//utils\r\nexport * from './utils/easy_guid';\r\nexport * from './utils/string_utils';\r\nexport * from './utils/utils';\r\nexport * from './utils/liquid';\r\nimport './i18n/load_default_locale_settings';\r\nif (typeof Object.values !== 'function') {\r\n Object.values = function (obj) {\r\n return Object.keys(obj).map(function (key) { return obj[key]; });\r\n };\r\n}\r\nif (typeof Math.trunc !== 'function') {\r\n Math.trunc = function (x) {\r\n if (isNaN(x)) {\r\n return NaN;\r\n }\r\n if (x > 0) {\r\n return Math.floor(x);\r\n }\r\n return Math.ceil(x);\r\n };\r\n}\r\n//# sourceMappingURL=public_api.js.map","import { DataType, EasyDataTable } from \"@easydata/core\";\r\n\r\n/**\r\n * Represents Google data table class\r\n */\r\nexport class GoogleDataConverter {\r\n\r\n private tableObj: any;\r\n\r\n /**\r\n * The default constructor. \r\n * @param data The table instance or its JSON representation. \r\n */\r\n constructor(data?) {\r\n if (!data) {\r\n data = {\r\n cols: [],\r\n rows: []\r\n }\r\n }\r\n\r\n if (typeof data === \"string\") {\r\n this.loadFromJSON(data);\r\n }\r\n else {\r\n this.tableObj = data;\r\n }\r\n }\r\n\r\n /**\r\n * Loads data table from JSON.\r\n * @param json The JSON representation.\r\n */\r\n public loadFromJSON(json : string) {\r\n this.tableObj = JSON.parse(json);\r\n }\r\n\r\n /**\r\n * Saves data table to JSON.\r\n * @returns The JSON representation.\r\n */\r\n public toJSON() {\r\n return JSON.stringify(this.tableObj);\r\n }\r\n\r\n /**\r\n * Gets the google data table object.\r\n * @returns The data table.\r\n */\r\n public getObject() {\r\n return this.tableObj;\r\n }\r\n\r\n /**\r\n * Cheсks wether the table is empty\r\n * @returns `true` if the table is empty, `false` if it is not.\r\n */\r\n public isEmpty() : boolean {\r\n return this.getNumberOfColumns() == 0 || this.getNumberOfRows() == 0;\r\n }\r\n\r\n /**\r\n * Gets the number of columns\r\n * @returns The number.\r\n */\r\n public getNumberOfColumns(): number {\r\n return this.tableObj.cols.length;\r\n }\r\n\r\n /**\r\n * Gets the column object.\r\n * @param colIndex The column index.\r\n * @returns The column object.\r\n */\r\n public getColumnObject(colIndex: number) {\r\n return colIndex < this.tableObj.cols.length ? this.tableObj.cols[colIndex] : null;\r\n }\r\n\r\n /**\r\n * Gets the column ID.\r\n * @param colIndex The column index.\r\n * @returns The column ID.\r\n */\r\n public getColumnId(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.id : null;\r\n }\r\n\r\n /**\r\n * Gets the column LABEL.\r\n * @param colIndex The column index.\r\n * @returns The column ID.\r\n */\r\n public getColumnLabel(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.label : null;\r\n }\r\n\r\n /**\r\n * Gets the column type.\r\n * @param colIndex The column index.\r\n * @returns The column type.\r\n */\r\n public getColumnType(colIndex: number): string {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.type : null;\r\n }\r\n\r\n /**\r\n * Gets the column properties.\r\n * @param colIndex The column index.\r\n * @returns The column properties.\r\n */\r\n public getColumnProperties(colIndex: number) {\r\n var col = this.getColumnObject(colIndex);\r\n return col ? col.p : null;\r\n }\r\n\r\n /**\r\n * Gets the number of rows.\r\n * @returns The number.\r\n */\r\n public getNumberOfRows(): number {\r\n return this.tableObj.rows.length;\r\n }\r\n\r\n\r\n private convertValue(value: any, colIndex: number) {\r\n const colType: DataType = this.googleDataTypeToDataType(this.getColumnType(colIndex));\r\n\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].includes(colType)) {\r\n return eval(`new ${value}`)\r\n }\r\n\r\n return value;\r\n }\r\n\r\n /**\r\n * Gets the value.\r\n * @param rowIndex \r\n * @param colIndex \r\n */\r\n public getValue(rowIndex: number, colIndex: number) {\r\n const row = rowIndex < this.tableObj.rows.length ? this.tableObj.rows[rowIndex] : null;\r\n if (row) {\r\n const cell = colIndex < this.tableObj.cols.length ? row.c[colIndex] : null;\r\n if (cell) {\r\n return this.convertValue(cell.v, colIndex);\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getRow(rowIndex: number): any[] {\r\n const googleRow = rowIndex < this.tableObj.rows.length ? this.tableObj.rows[rowIndex] : null;\r\n const googleCells = googleRow.c as any[];\r\n\r\n const row = googleCells.map((obj, idx) => this.convertValue(obj.v, idx), this);\r\n return row;\r\n }\r\n\r\n public convertTo(dataTable : EasyDataTable) {\r\n const colCount = this.getNumberOfColumns();\r\n for (let i = 0; i < colCount; i++) {\r\n dataTable.columns.add({\r\n id: this.getColumnId(i),\r\n label: this.getColumnLabel(i),\r\n type: this.googleDataTypeToDataType(this.getColumnType(i))\r\n })\r\n }\r\n\r\n const rowCount = this.getNumberOfRows();\r\n for (let i = 0; i < rowCount; i++) {\r\n dataTable.addRow(this.getRow(i));\r\n }\r\n }\r\n\r\n private googleDataTypeToDataType(googleDataType: string) : DataType {\r\n switch (googleDataType) {\r\n case 'string':\r\n return DataType.String;\r\n case 'number':\r\n return DataType.Float;\r\n case 'boolean':\r\n return DataType.Bool; \r\n case 'date':\r\n return DataType.Date;\r\n case 'datetime':\r\n return DataType.DateTime; \r\n case 'timeofday':\r\n return DataType.Time; \r\n default:\r\n return DataType.String;\r\n }\r\n }\r\n}","/**\r\n * Defines the structure of the token returned by `FormatParser`\r\n */\r\nexport interface FormatToken {\r\n type : string; //!!!!!!!!!!!!!!! TODO: replace with enum\r\n text?: string;\r\n index? : number;\r\n}\r\n\r\n/**\r\n * Represents a parser for format expressions in operators \r\n */\r\nexport class FormatParser {\r\n private formatStr: string;\r\n private pos: number;\r\n private exprNum: number;\r\n \r\n private tokenText: string;\r\n private token: string;\r\n\r\n constructor(format: string) {\r\n this.start(format);\r\n }\r\n\r\n /**\r\n * Starts parsing of the format string passed in the parameter\r\n * @param format \r\n */\r\n public start(format: string) {\r\n this.formatStr = format;\r\n this.pos = 0;\r\n this.exprNum = 0;\r\n this.tokenText = '';\r\n }\r\n\r\n /**\r\n * Skips all spcaes till the beginning of next token\r\n */\r\n public skipSpaces() {\r\n while (this.pos < this.formatStr.length && this.formatStr.charAt(this.pos) === ' ') this.pos++;\r\n }\r\n\r\n /**\r\n * Scans the source and gets the next token\r\n */\r\n public next() {\r\n this.skipSpaces();\r\n if (this.pos >= this.formatStr.length) return false;\r\n\r\n var npos = 0;\r\n if (this.formatStr.charAt(this.pos) === '{') {\r\n npos = this.formatStr.indexOf('}', this.pos);\r\n if (npos < 0) return false;\r\n this.tokenText = this.formatStr.substring(this.pos, npos+1);\r\n if (this.tokenText.indexOf('{expr') === 0) {\r\n this.token = 'expression';\r\n this.exprNum = parseInt(this.tokenText.substring(5, this.tokenText.length));\r\n }\r\n this.pos = npos + 1;\r\n }\r\n else if (this.formatStr.charAt(this.pos) === '[' && this.pos < this.formatStr.length-1 && this.formatStr.charAt(this.pos+1) === '[') {\r\n this.pos += 2;\r\n npos = this.formatStr.indexOf(']]', this.pos);\r\n this.token = 'operator';\r\n this.tokenText = this.formatStr.substring(this.pos, npos);\r\n this.pos = npos + 2;\r\n }\r\n else {\r\n this.token = 'text';\r\n var npos1 = this.formatStr.indexOf('{', this.pos);\r\n if (npos1 < 0) npos1 = this.formatStr.length;\r\n var npos2 = this.formatStr.indexOf('[[', this.pos);\r\n if (npos2 < 0) npos2 = this.formatStr.length;\r\n npos = Math.min(npos1, npos2);\r\n this.tokenText = this.formatStr.substring(this.pos, npos).trim();\r\n this.pos = npos;\r\n }\r\n return true;\r\n } \r\n \r\n /**\r\n * Returns current token\r\n */\r\n public getToken() : FormatToken {\r\n return {\r\n type: this.token,\r\n text: this.tokenText,\r\n index: this.exprNum - 1\r\n };\r\n }\r\n\r\n /**\r\n * Parses all source string passed in constructor and returns the list of tokens\r\n */\r\n public parse() : FormatToken[] {\r\n let result:FormatToken[] = [];\r\n while (this.next()) {\r\n result.push(this.getToken());\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","/** Represents type of linking of conditions in group (predicate).*/\r\nexport enum LinkType {\r\n /**\r\n * None of the conditions must be truth (all must be false).\r\n * In SQL it will look like: `NOT (Condition1 OR Condition2 OR ...)`.\r\n */\r\n None = 0,\r\n\r\n /** At least one condition must be truth. In SQL they are connected by `OR` operator.*/\r\n Any = 1,\r\n \r\n /** \r\n * Not all conditions must be truth (at least one must false). \r\n * In SQL it will look like: `NOT(Condition1 AND Condition2 AND ...)`.\r\n */\r\n NotAll = 2,\r\n\r\n /** All conditions must be truth, in result SQL they are connected by `AND` operator;*/ \r\n All = 3\r\n}","import { DataType } from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\n\r\nimport { FormatParser, FormatToken} from \"./format_parser\";\r\nimport { LinkType } from '../types/link_type';\r\n\r\nexport namespace equtils {\r\n /**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1 \r\n * @param path2 \r\n */\r\n export function combinePath (path1: string, path2: string): string {\r\n let result = path1;\r\n if (result != null && result.length > 0) {\r\n\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Converts a string to a `LinkType` value\r\n * @param str \r\n */\r\n export function strToLinkType(str: string): LinkType {\r\n if (str == \"All\") {\r\n return LinkType.All;\r\n }\r\n else if (str == \"NotAll\") {\r\n return LinkType.NotAll;\r\n }\r\n else if (str == \"Any\") {\r\n return LinkType.Any;\r\n }\r\n else {\r\n return LinkType.None;\r\n }\r\n }\r\n \r\n /**\r\n * Converts a `LinkType` value to a string\r\n * @param type \r\n */\r\n export function linkTypeToStr(type: LinkType): string {\r\n if (type === LinkType.All) {\r\n return \"All\";\r\n }\r\n else if (type === LinkType.NotAll) {\r\n return \"NotAll\";\r\n }\r\n else if (type == LinkType.Any) {\r\n return \"Any\";\r\n }\r\n else {\r\n return \"None\";\r\n }\r\n }\r\n\r\n /**\r\n * Parses the operator's format string and returns a list of tokens \r\n * @param operator \r\n */\r\n export function parseOperatorFormat(operator) : FormatToken[] {\r\n let format = i18n.getText('Operators', operator.id, 'format');\r\n if (!format) {\r\n format = i18n.getText('Operators', operator.id, 'displayFormat');\r\n }\r\n if (!format) {\r\n format = operator.displayFormat;\r\n }\r\n\r\n const parser = new FormatParser(format);\r\n return parser.parse();\r\n }\r\n\r\n //----------- value converstion utils --------------\r\n\r\n /**\r\n * Converts a value from one DataType to another \r\n * @param value \r\n * @param fromDataType - the original data type\r\n * @param toDataType - the data type we want to get\r\n */\r\n export function convertValue(value : string, fromDataType : DataType, toDataType: DataType) : string {\r\n switch (toDataType) {\r\n case DataType.String:\r\n return value;\r\n case DataType.Autoinc, DataType.Byte, DataType.Int32, DataType.Int64, DataType.Word:\r\n let resInt = parseInt(value);\r\n return isNaN(resInt) ? '' : resInt.toString();\r\n case DataType.Currency, DataType.Float:\r\n let resFloat = parseFloat(value);\r\n return isNaN(resFloat) ? '' : resFloat.toString();\r\n default:\r\n return ''; \r\n }\r\n }\r\n}","export namespace eqconsts {\r\n \r\n /**\r\n * Represents a constant with some default value\r\n */\r\n export interface ConstValue {\r\n id: string;\r\n key: string;\r\n isDefault?: boolean;\r\n }\r\n\r\n /**\r\n * Defines some commonly used constants\r\n */\r\n class ConstLists {\r\n /**\r\n * Contains macros for the special dates (like Today, First day of the month, etc)\r\n */\r\n public SpecDateValues: Array<ConstValue> = [\r\n { id: '${Today}', key: 'Today', isDefault: true },\r\n { id: '${Yesterday}', key: 'Yesterday' },\r\n { id: '${Tomorrow}', key: 'Tomorrow' },\r\n { id: '${FirstDayOfMonth}', key: 'FirstDayOfMonth' },\r\n { id: '${FirstDayOfYear}', key: 'FirstDayOfYear' }\r\n ];\r\n\r\n /**\r\n * Contains macros for the special times (like Now, Noon, etc)\r\n */\r\n public SpecTimeValues: Array<ConstValue> = [\r\n { id: '${Now}', key: 'Now', isDefault: true },\r\n { id: '${HourStart}', key: 'HourStart' },\r\n { id: '${Midnight}', key: 'Midnight' },\r\n { id: '${Noon}', key: 'Noon' }\r\n ];\r\n\r\n /**\r\n * Boolean values macros (true and false)\r\n */\r\n public BooleanValues: Array<ConstValue> =[\r\n { id: '${false}', key: 'False' },\r\n { id: '${true}', key: 'True', isDefault: true }\r\n ];\r\n } \r\n\r\n /**\r\n * Contains some constants (macros) with special date/time and boolean values.\r\n */\r\n export let constLists = new ConstLists();\r\n\r\n\r\n /**\r\n * Constants representing various types of relationships between conditions\r\n */\r\n export let predicateLinkTypeList: Array<ConstValue> = [\r\n { id: 'All', key: 'LinkTypeAll' },\r\n { id: 'Any', key: 'LinkTypeAny' },\r\n { id: 'None', key: 'LinkTypeNone' },\r\n { id: 'NotAll', key: 'LinkTypeNotAll' }\r\n ]\r\n}","import { DataType, utils } from '@easydata/core';\r\nimport { AggrFuncData } from './dto/af_data'\r\n\r\n/**\r\n * Represents an aggregate function\r\n */\r\nexport class AggrFunction {\r\n\r\n /** \r\n * The function id. \r\n * (e.g. `SUM` or `COUNT`)\r\n */\r\n public id: string;\r\n\r\n /** The caption of the aggregate function. */\r\n public caption: string;\r\n\r\n /** The SQL expression */\r\n public sqlExpr: string;\r\n\r\n /** The display format of aggregate function. */\r\n public displayFormat: string;\r\n\r\n public appliedTypes: DataType[];\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.id = \"\";\r\n this.caption = \"\";\r\n this.sqlExpr = \"\";\r\n this.displayFormat = \"\";\r\n this.appliedTypes = [];\r\n }\r\n\r\n /**\r\n * Loads an aggregate function from its JSON representation object\r\n * @param aggrFunction The JSON representation object\r\n */\r\n public loadFromData(aggrFunction: AggrFuncData) {\r\n if (aggrFunction){\r\n this.id = aggrFunction.id;\r\n this.caption = aggrFunction.cptn;\r\n this.displayFormat = aggrFunction.fmt;\r\n this.sqlExpr = aggrFunction.expr;\r\n this.appliedTypes = aggrFunction.dtypes || this.appliedTypes;\r\n } \r\n }\r\n\r\n public getAppliedTypesOrDefault(): DataType[] {\r\n if (this.appliedTypes.length > 0)\r\n return this.appliedTypes;\r\n\r\n if (this.id === 'SUM' || this.id === 'AVG') {\r\n return [DataType.Autoinc, DataType.Byte, DataType.Currency, DataType.Float, DataType.Int32,\r\n DataType.Int64, DataType.Word];\r\n }\r\n else if (this.id === 'MIN' || this.id === 'MAX') {\r\n return [DataType.Autoinc, DataType.BCD, DataType.Byte, DataType.Currency, DataType.Date, DataType.DateTime, DataType.Time,\r\n DataType.Float, DataType.Int32, DataType.Int64, DataType.Word];\r\n }\r\n\r\n return utils.getAllDataTypes();\r\n }\r\n}\r\n","import { DataType, ValueEditor } from '@easydata/core';\r\n\r\nimport { EqEditorTag } from '../types/eq_editor_tag';\r\nimport { ValueEditorData } from './dto/ve_data';\r\n\r\n/**\r\n * Represents a value editor.\r\n */\r\nexport class EqValueEditor extends ValueEditor {\r\n public tag: EqEditorTag;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n super();\r\n }\r\n\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(data: ValueEditorData) {\r\n super.loadFromData(data);\r\n \r\n if (data) {\r\n if (data.sql) {\r\n this.statement = data.sql;\r\n }\r\n if (data.extraParams) {\r\n this.extraParams = data.extraParams;\r\n }\r\n }\r\n }\r\n}\r\n","/** Represents expression kinds.*/\r\nexport enum DataKind {\r\n\t/** Represents one value of some type: one constant or one attribute (field).*/\r\n Scalar = 0, \r\n /** The same as Scalar but represents only one constant value of some type.*/\r\n Const = 1, \r\n /** The same as Scalar but represents only one attribute.*/\r\n Attribute = 2,\r\n /** Represents a list of scalar values. */\r\n List = 4, \r\n /** Special expression kind which represents a sub query.*/\r\n Query = 5,\r\n /** Special expression kind which represents a binding to parent column.*/\r\n ParentColumn = 6\r\n}\r\n","import { DataType, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { EqValueEditor } from './value_editor';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { DataKind } from '../types/data_kind';\r\nimport { OperatorData, OperandData } from './dto/operator_data';\r\n\r\n/**\r\n * Represents a logical expression or predicate, like comparisions or `LIKE` predicate.\r\n */\r\nexport class Operator {\r\n\r\n /** The operator ID. */\r\n public id: string;\r\n\r\n /** The operator caption. */\r\n public caption: string;\r\n\r\n /** The display format of operator. */\r\n public displayFormat: string;\r\n\r\n /** \r\n * The value indicating whether this operator requires range values so first value must be less than the second one. \r\n */\r\n public isRange: boolean;\r\n\r\n /**\r\n * The value indicating whether the operator is case insensative.\r\n */\r\n public caseIns: boolean;\r\n\r\n /**\r\n * The number of parameters which are taken by the operator.\r\n */\r\n public paramCount: number;\r\n\r\n /*The defaults settings of operator operands.*/\r\n public defaultOperand: Operand;\r\n\r\n /** The operands for this operator. */\r\n public operands: Operand[];\r\n\r\n public expr: string;\r\n\r\n public constValueFormat: string;\r\n\r\n public appliedTypes: DataType[];\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.id = \"\";\r\n this.expr = \"\";\r\n this.constValueFormat = \"{const}\"\r\n this.caption = \"{Unrecognized operator}\";\r\n this.displayFormat = \"{expr1} [[{unrecognized operator}]] {expr2}\";\r\n this.isRange = false;\r\n this.caseIns = false;\r\n this.paramCount = 2;\r\n this.defaultOperand = new Operand();\r\n this.appliedTypes = [];\r\n this.operands = new Array<Operand>();\r\n }\r\n\r\n /**\r\n * Loads operator from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: OperatorData) {\r\n\r\n if (data) {\r\n this.id = data.id;\r\n this.caption = data.cptn;\r\n this.caseIns = data.caseIns;\r\n this.isRange = data.isRange;\r\n\r\n this.displayFormat = data.fmt;\r\n this.paramCount = data.pcnt;\r\n\r\n this.expr = data.expr;\r\n\r\n this.appliedTypes = data.dtypes || this.appliedTypes;\r\n\r\n if (data.defOperand) {\r\n this.defaultOperand.loadFromData(model, data.defOperand);\r\n }\r\n\r\n if (data.editor) {\r\n this.defaultOperand.editor = model.getEditorById(data.editor) || new EqValueEditor();\r\n }\r\n\r\n if (data.operands) {\r\n for (let i = 0; i < data.operands.length; i++) {\r\n let newOperand = new Operand();\r\n newOperand.loadFromData(model, data.operands[i])\r\n\r\n if (data.editor) {\r\n newOperand.editor = model.getEditorById(data.editor) || new EqValueEditor();\r\n }\r\n\r\n this.operands.push(newOperand);\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Represents one operand in some operator's expression\r\n */\r\nexport class Operand {\r\n\r\n /**\r\n * The kind of operand (`scalar`, `list`, etc)\r\n */\r\n public kind: DataKind;\r\n\r\n /**\r\n * The type of the data.\r\n */\r\n public dataType: DataType;\r\n\r\n /**\r\n * The value editor associated with this operand.\r\n */\r\n public editor: EqValueEditor;\r\n\r\n /**\r\n * The default value for this operand.\r\n */\r\n public defValue: string;\r\n\r\n /**\r\n * The text for default operand value.\r\n */\r\n public defText: string;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n this.kind = DataKind.Scalar;\r\n this.dataType = DataType.Unknown;\r\n this.editor = new EqValueEditor();\r\n this.defValue = \"\";\r\n }\r\n\r\n /**\r\n * Loads operand from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, operand: OperandData) {\r\n\r\n this.kind = operand.kind;\r\n this.dataType = operand.dtype;\r\n this.defValue = operand.val;\r\n this.defText = operand.txt;;\r\n\r\n if (operand.editor) {\r\n this.editor = model.getEditorById(operand.editor) || new EqValueEditor();\r\n }\r\n }\r\n\r\n /** \r\n * Copies operand from other operand. \r\n * @param scr The operand.\r\n */\r\n public copyFrom(src : Operand) : void {\r\n dataUtils.assign(this, src);\r\n }\r\n}","import { MetaEntity, MetaEntityAttr } from '@easydata/core';\r\n\r\nimport { QueryParam } from '../common/query_param';\r\nimport { DataModel } from '../dm/data_model';\r\n\r\nimport { EntityData, EntityAttrData } from './dto/entity_data';\r\n\r\n/**\r\n * Represents one entity.\r\n */\r\nexport class Entity extends MetaEntity {\r\n\r\n /** The endpoint of entity. It is used for odata or graphql brokers */\r\n public endpoint?: string;\r\n \r\n /** The value indicating whether the attribute can be used in query conditions. */\r\n public useInConditions: boolean;\r\n\r\n /** \r\n * The value indicating whether the attribute can be used in result columns (`SELECT` clause). \r\n */\r\n public useInResult: boolean;\r\n\r\n /**\r\n * The value indicating whether the attribute can be used in sorting.\r\n */\r\n public useInSorting: boolean;\r\n\r\n\r\n public subEntities: Array<Entity>;\r\n\r\n public attributes: Array<EntityAttr>;\r\n\r\n /** The default constructor. */\r\n constructor(parent?: Entity) {\r\n super(parent);\r\n this.useInConditions = false;\r\n this.useInResult = false;\r\n this.useInSorting = false;\r\n }\r\n\r\n\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: EntityData) {\r\n\r\n super.loadFromData(model, data)\r\n if (data) {\r\n this.useInConditions = data.uic;\r\n this.useInResult = data.uir;\r\n this.useInSorting = data.uis;\r\n } \r\n }\r\n\r\n \r\n public scan(processAttribute?: (attr: EntityAttr, opts: any) => void , \r\n processEntity?: (entity: Entity, opts: any) => void): void {\r\n super.scan(\r\n (attr, opts) => processAttribute && processAttribute(attr as EntityAttr, opts), \r\n (entity, opts) => processEntity && processEntity(entity as Entity, opts)\r\n );\r\n }\r\n \r\n}\r\n\r\n/**\r\n * Represents entity attribute.\r\n */\r\nexport class EntityAttr extends MetaEntityAttr {\r\n\r\n /** The value indicating whether the attribute can be used in query conditions. */\r\n public useInConditions: boolean;\r\n\r\n /** \r\n * The value indicating whether the attribute can be used in result columns (`SELECT` clause). \r\n */\r\n public useInResult: boolean;\r\n\r\n /**\r\n * The value indicating whether the attribute can be used in sorting.\r\n */\r\n public useInSorting: boolean;\r\n\r\n /**\r\n * The default operator.\r\n */\r\n public defaultOperator: string;\r\n\r\n /**\r\n * The list of operators which can be applied for this attribute.\r\n */\r\n public operators: string[];\r\n\r\n /**\r\n * The parameters associated with this entity attribute\r\n */\r\n public params: QueryParam[] = [];\r\n\r\n /**\r\n * The parent\r\n */\r\n public entity: Entity;\r\n\r\n /** The default constructor. */\r\n constructor(entity: Entity) {\r\n super(entity);\r\n this.useInConditions = true;\r\n this.useInResult = true;\r\n this.useInSorting = true;\r\n this.defaultOperator = \"\";\r\n this.operators = new Array<string>();\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n }\r\n\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: EntityAttrData) {\r\n\r\n super.loadFromData(model, data);\r\n\r\n if (data) {\r\n \r\n this.useInConditions = data.uic;\r\n this.useInResult = data.uir;\r\n this.useInSorting = data.uis;\r\n this.expr = data.sql;\r\n this.defaultOperator = data.defOperator;\r\n this.operators = data.ops;\r\n\r\n if (data.udata)\r\n this.userData = data.udata;\r\n \r\n }\r\n }\r\n}\r\n","import { EditorTag } from \"@easydata/core\";\r\n\r\n/** Represents editor tags*/\r\nexport const EqEditorTag = {\r\n\r\n ...EditorTag,\r\n\r\n /** SqlList tag value */\r\n SqlList: \"SQLLIST\",\r\n\r\n /** SubQuery tag value */\r\n SubQuery: \"SUBQUERY\",\r\n\r\n /** Bind to parent column tag value */\r\n BindToParentColumn: \"BINDTOPARENTCOLUMN\"\r\n}\r\n\r\nexport type EqEditorTag = (typeof EqEditorTag)[keyof typeof EqEditorTag];\r\n","/** Contains several constant definitions for expressions tag */\r\nexport enum ExprTag { \r\n /** Unknown expression */\r\n Unknown = 0,\r\n\r\n /** Constant expression */\r\n Constant = 1,\r\n\r\n /** Entity attributre expression */\r\n EntityAttribute = 2,\r\n\r\n /** Parent entity attribute expression */\r\n ParentEntityAttribute = 3,\r\n\r\n /** Agrregate function expression */\r\n AggregateFunction = 4,\r\n\r\n /** Parent column expression */\r\n ParentColumn = 5,\r\n\r\n /** Query expression */\r\n Query = 11,\r\n\r\n /** Custom sql expression */\r\n CustomSql = 21\r\n}","export class Tree<T> {\r\n\r\n public childs: Tree<T>[] = [];\r\n\r\n public value: T = null;\r\n\r\n public parent: Tree<T> = null;\r\n\r\n constructor(value: T | T[] | Tree<T> = null) {\r\n\r\n if (value) {\r\n\r\n if (Array.isArray(value)) {\r\n this.value = value[0];\r\n if (value.length > 1) {\r\n this.addChild(new Tree(value.slice(1)));\r\n }\r\n\r\n } else if (value instanceof Tree) {\r\n this.value = value.value;\r\n this.childs = value.childs;\r\n } else {\r\n this.value = value;\r\n }\r\n }\r\n }\r\n\r\n public contains(value: T): boolean {\r\n if (this.value === value)\r\n return true;\r\n\r\n for(let child of this.childs) {\r\n if (child.contains(value))\r\n return true;\r\n }\r\n \r\n return false;\r\n }\r\n\r\n public findNode(value: T): Tree<T> | null {\r\n if (this.value === value)\r\n return this;\r\n\r\n for(let child of this.childs) {\r\n let result = child.findNode(value);\r\n if (result)\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public addChild(child: Tree<T>) {\r\n child.parent = this;\r\n this.childs.push(child);\r\n }\r\n\r\n public setParents() {\r\n for(let child of this.childs) {\r\n child.parent = this;\r\n child.setParents();\r\n }\r\n }\r\n}","import { DataType, MetaData, utils as dataUtils, ValueEditor } from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\nimport { AggrFunction } from './aggr_function'\r\nimport { Operator, Operand } from './operator'\r\nimport { Entity, EntityAttr } from './entity'\r\nimport { EqValueEditor } from './value_editor'\r\nimport { Link } from './link'\r\nimport { DataKind } from '../types/data_kind'\r\nimport { EqEditorTag } from '../types/eq_editor_tag'\r\nimport { Query } from '../query/query'\r\nimport { ModelPlainData } from './dto/dm_data' \r\nimport { Condition } from '../query/condition'\r\nimport { Expression } from '../query/expression'\r\nimport { ExprTag } from '../types/expr_tag'\r\nimport { Tree } from '../common/tree'\r\n\r\n/**\r\n * Operator descriptor.\r\n */\r\nexport interface OperatorDescriptor {\r\n id: string,\r\n expr?: string,\r\n format: string,\r\n caption: string,\r\n paramCount?: number,\r\n kind?: DataKind,\r\n appliedTypes?: DataType[]\r\n}\r\n\r\n/**\r\n * Represents a data model\r\n */\r\nexport class DataModel extends MetaData {\r\n \r\n\r\n /**The list of operators. */\r\n public operators: Operator[];\r\n\r\n /** The root entity. */\r\n public rootEntity: Entity;\r\n\r\n /** The list of aggregate functions. */\r\n public aggrFunctions: AggrFunction[];\r\n\r\n /** The list of value editors. */\r\n public editors: EqValueEditor[];\r\n\r\n /** The list of links. It is used in odata broker. */\r\n public links: Link[];\r\n\r\n private dateMacros: string[];\r\n private timeMacros: string[];\r\n\r\n protected mainEntity: Entity | null = null;\r\n\r\n public readonly nullAttribute: EntityAttr;\r\n public readonly nullOperator: Operator;\r\n\r\n /** The default constructor. */\r\n constructor() {\r\n super();\r\n\r\n this.nullAttribute = new EntityAttr(null);\r\n this.nullOperator = new Operator();\r\n\r\n this.operators = new Array<Operator>();\r\n this.rootEntity = new Entity();\r\n this.aggrFunctions = new Array<AggrFunction>();\r\n \r\n this.dateMacros = ['Today', 'Yesterday',\r\n 'Tomorrow', 'FirstDayOfMonth', 'LastDayOfMonth',\r\n 'FirstDayOfWeek', 'FirstDayOfYear', 'FirstDayOfNextWeek', 'FirstDayOfPrevMonth',\r\n 'FirstDayOfNextMonth', 'FirstDayOfNextYear', 'FirstDayOfPrevYear', 'FirstDayOfPrevWeek'];\r\n\r\n this.timeMacros = ['Now', 'HourStart', 'Midnight', 'Noon'];\r\n\r\n this.links = [];\r\n }\r\n\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n public getMainEntity(): Entity {\r\n return this.mainEntity;\r\n }\r\n\r\n\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n public loadFromJSON(stringJson: string) {\r\n let model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n }\r\n\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(data: ModelPlainData) {\r\n super.loadFromData(data);\r\n\r\n //Operators\r\n this.operators = new Array<Operator>();\r\n if (data.operators) { \r\n for (let i = 0; i < data.operators.length; i++) {\r\n let newOperator = new Operator();\r\n newOperator.loadFromData(this, data.operators[i]);\r\n this.operators.push(newOperator);\r\n }\r\n }\r\n\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n\r\n //Aggr Functions\r\n this.aggrFunctions = new Array<AggrFunction>();\r\n if (data.aggrfuncs) {\r\n for (let i = 0; i < data.aggrfuncs.length; i++) {\r\n let newAggrFunc = new AggrFunction();\r\n newAggrFunc.loadFromData(data.aggrfuncs[i]);\r\n this.aggrFunctions.push(newAggrFunc);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the data model object.\r\n * @returns Tha data model.\r\n */\r\n public getObject(): DataModel {\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n public setData(model: ModelPlainData | string) {\r\n\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Creates entity.\r\n * @param parent The parent entity.\r\n * @returns The Entity.\r\n */\r\n public createEntity(parent?: Entity): Entity {\r\n return new Entity(parent);\r\n }\r\n\r\n /**\r\n * Creates entity attribute.\r\n * @param parent The parent entity.\r\n * @returns The entity attribute.\r\n */\r\n public createEntityAttr(parent?: Entity): EntityAttr {\r\n return new EntityAttr(parent);\r\n }\r\n \r\n /**\r\n * Creates new EqValueEditor\r\n * @returns An instance of EqValueEditor class\r\n */\r\n public createValueEditor() : ValueEditor {\r\n return new EqValueEditor();\r\n }\r\n\r\n /**\r\n * Creates query.\r\n * @returns The Query.\r\n */\r\n public createQuery(): Query {\r\n return new Query(this);\r\n }\r\n\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n public getRootEntity(): Entity {\r\n return this.rootEntity;\r\n }\r\n\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n public getEditorById(editorId: string): EqValueEditor | null {\r\n return super.getEditorById(editorId);\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n public getAttributeById(attrId: string): EntityAttr | null {\r\n let attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `nullAttribute`.\r\n */\r\n public getAttributeByIdSafe(attrId): EntityAttr {\r\n const attr = this.getAttributeById(attrId);\r\n if (!attr)\r\n return this.nullAttribute;\r\n return attr;\r\n }\r\n\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n public checkAttrProperty(attrId: string, propName: string) : boolean {\r\n let attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n\r\n }\r\n\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity \r\n * @param attrId \r\n * @returns The attribute or `null`.\r\n */\r\n public getEntityAttrById(entity: Entity, attrId: string): EntityAttr | null {\r\n return super.getEntityAttrById(entity, attrId) as EntityAttr;\r\n }\r\n\r\n private _listByEntityWithFilter(entity: Entity, filterFunc: (ent: Entity, attr: EntityAttr) => boolean): Entity[] {\r\n let result = new Array<Entity>();\r\n\r\n let caption;\r\n\r\n let ent = null;\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n let newEnt = dataUtils.assign(new Entity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this._listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n\r\n let attr = null;\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n\r\n let newEnt = dataUtils.assign(new Entity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _listByEntity(entity: Entity, opts, filterFunc: (ent: Entity, attr: EntityAttr) => boolean) {\r\n opts = opts || {};\r\n let resultEntities = [];\r\n let resultAttributes = [];\r\n\r\n let caption: string;\r\n\r\n let ent: Entity = null;\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n if (opts.addUIC !== false && ent.useInConditions !== false ||\r\n opts.addUIR !== false && ent.useInResult !== false ||\r\n opts.addUIS !== false && ent.useInSorting !== false) {\r\n \r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n let newEnt = dataUtils.assign(new Entity(), { \r\n id: ent.name, \r\n text: caption, \r\n items: [], \r\n isEntity: true, \r\n description: ent.description \r\n });\r\n let newOpts = dataUtils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this._listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n } \r\n }\r\n }\r\n }\r\n\r\n let attr:EntityAttr = null;\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n if (opts.addUIC !== false && attr.useInConditions!== false ||\r\n opts.addUIR !== false && attr.useInResult !== false ||\r\n opts.addUIS !== false && attr.useInSorting !== false) {\r\n \r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(dataUtils.assign(new EntityAttr(entity), { id: attr.id, text: caption, dataType: attr.dataType, lookupAttr: attr.lookupAttr, description: attr.description }));\r\n } \r\n }\r\n }\r\n }\r\n\r\n let sortCheck = (a, b): number => {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) { return 0; }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n }\r\n\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n\r\n let result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Clears data model.\r\n */\r\n public clear() {\r\n super.clear();\r\n this.operators = [];\r\n this.aggrFunctions = [];\r\n }\r\n\r\n /**\r\n * Add or update an operator.\r\n * @param desc The operator descriptor.\r\n * @returns The operator.\r\n */\r\n public addOrUpdateOperator(desc: OperatorDescriptor): Operator {\r\n let op = dataUtils.findItemById(this.operators, desc.id);\r\n if (!op) {\r\n op = new Operator();\r\n op.id = desc.id; \r\n this.operators.push(op);\r\n }\r\n\r\n op.caption = desc.caption;\r\n op.expr = desc.expr || '';\r\n op.displayFormat = desc.format;\r\n\r\n op.defaultOperand = new Operand();\r\n op.defaultOperand.kind = desc.kind || DataKind.Scalar;\r\n\r\n if (desc.appliedTypes)\r\n op.appliedTypes = desc.appliedTypes;\r\n\r\n if (desc.paramCount > 0) {\r\n op.paramCount = desc.paramCount;\r\n }\r\n\r\n this.runThroughEntities((attr, opts) => {\r\n if (attr.operators.indexOf(op.id) < 0 && op.appliedTypes.indexOf(attr.dataType) >= 0) {\r\n attr.operators.push(op.id);\r\n }\r\n });\r\n\r\n return op;\r\n }\r\n\r\n /**\r\n * Removes an operator.\r\n * @param id The id.\r\n * @param soft If `false` - removes operators from model and attributes. Otherwise only\r\n * from attributes.\r\n */\r\n public removeOperator(id: string, soft = false) {\r\n let op = dataUtils.findItemById(this.operators, id);\r\n if (op) {\r\n if (!soft)\r\n dataUtils.removeArrayItem(this.operators, op);\r\n\r\n this.runThroughEntities((attr, opts) => {\r\n dataUtils.removeArrayItem(attr.operators, op.id);\r\n });\r\n }\r\n } \r\n\r\n /**\r\n * Get operators for data type.\r\n * @param type The data type\r\n * @return The array of operator ids.\r\n */\r\n public getOperatorIdsByDataType(type: DataType): string[] {\r\n switch (type) {\r\n case DataType.String:\r\n case DataType.Memo:\r\n return 'StartsWith,EndsWith,Contains,Equal,InList,NotStartsWith,NotEndsWith,NotContains,NotEqual,NotInList,IsNull,IsNotNull'.split(',');\r\n case DataType.Guid:\r\n return 'Equal,NotEqual'.split(',')\r\n case DataType.Date:\r\n case DataType.DateTime:\r\n return 'DateWithinToday,DateWithinThisWeek,DateWithinPrevWeek,DateWithinThisMonth,DateWithinPrevMonth,DateWithinThisYear,DateWithinPrevYear,DateBeforePrecise,DateAfterPrecise,DatePeriodPrecise,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Time:\r\n return 'TimeBeforePrecise,TimeAfterPrecise,TimePeriodPrecise,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Byte:\r\n case DataType.Word:\r\n case DataType.Int32:\r\n case DataType.Int64:\r\n case DataType.Float:\r\n case DataType.Currency:\r\n case DataType.BCD:\r\n case DataType.Autoinc:\r\n case DataType.Unknown:\r\n return 'Equal,Between,LessThan,LessOrEqual,GreaterThan,GreaterOrEqual,InList,NotEqual,NotBetween,NotInList,IsNull,IsNotNull'.split(',');\r\n\r\n case DataType.Bool:\r\n return 'IsTrue,NotTrue'.split(',');\r\n\r\n default:\r\n const result: string[] = [];\r\n for (let op of this.operators)\r\n if (op.appliedTypes.indexOf(type) >= 0)\r\n result.push(op.id);\r\n\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Builds entities tree used in query.\r\n * @param query The query.\r\n */\r\n public buildQueryPath(query: Query): Tree<Entity> {\r\n let entity = this.mainEntity || this.rootEntity;\r\n\r\n const tree = this.createTreeNodeFromEntity(entity);\r\n tree.setParents();\r\n\r\n return tree;\r\n }\r\n\r\n private createTreeNodeFromEntity(entity: Entity): Tree<Entity> {\r\n let tree = new Tree<Entity>(entity);\r\n for(let subEnentity of entity.subEntities) {\r\n tree.addChild(this.createTreeNodeFromEntity(subEnentity));\r\n }\r\n return tree;\r\n }\r\n\r\n /**\r\n * Get Entities used in query.\r\n * @param query The query.\r\n */\r\n public getEntitiesInQuery(query: Query): Entity[] {\r\n\r\n if (query.model.id !== this.id)\r\n throw Error('Model mithmatch');\r\n \r\n const entities: Entity[] = [];\r\n \r\n const columns = query.getColumns();\r\n for(let column of columns) { \r\n if (!column.enabled)\r\n continue;\r\n this.addEntityByExpression(entities, column.expr);\r\n }\r\n\r\n const rootCond = query.getRootCondition();\r\n this.fillEntitiesByCondtionGroup(entities, rootCond);\r\n \r\n return entities;\r\n }\r\n\r\n public findAggrFunctionById(funcId: string): AggrFunction | null{\r\n for(const func of this.aggrFunctions) {\r\n if (func.id === funcId)\r\n return func;\r\n }\r\n\r\n return null\r\n }\r\n\r\n private fillEntitiesByCondtionGroup(entities: Entity[], root: Condition) {\r\n for(let condition of root.getConditions()) {\r\n if (!condition.isGroup()) {\r\n for(let expr of condition.expressions) {\r\n this.addEntityByExpression(entities, expr);\r\n if (expr.args) {\r\n for(let arg of expr.args) {\r\n this.addEntityByExpression(entities, arg);\r\n }\r\n }\r\n }\r\n } else {\r\n this.fillEntitiesByCondtionGroup(entities, condition);\r\n }\r\n }\r\n }\r\n\r\n private addEntityByExpression(entities: Entity[], expr: Expression) {\r\n\r\n if (expr.tag !== ExprTag.EntityAttribute)\r\n return;\r\n\r\n const attrId = expr.baseAttrId || expr.value;\r\n if (attrId) {\r\n const attr = this.getAttributeById(attrId);\r\n if (attr) {\r\n if (attr.entity && dataUtils.indexOfArrayItem(entities, attr.entity) < 0) {\r\n entities.push(attr.entity);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Finds link between two entities.\r\n * @param entityFrom The entity `from`.\r\n * @param entityTo The entity `to`.\r\n * @return The link.\r\n */\r\n public findLink(entityFrom: Entity, entityTo: Entity): Link | null {\r\n for(let link of this.links) {\r\n if (link.entityFrom == entityFrom \r\n && link.entityTo == entityTo)\r\n return link;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n /**\r\n * Get links with the entity.\r\n * @param entity The entity.\r\n * @return The link.\r\n */\r\n public getLinksByEntity(entity: Entity): Link[] {\r\n const result: Link[] = [];\r\n for(let link of this.links) {\r\n if (link.entityFrom == entity || link.entityTo == entity) {\r\n result.push(link);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function. \r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n public getEntitiesTree(opts, filterFunc?: (ent: Entity, attr: EntityAttr) => boolean) {\r\n return this._listByEntity(this.getRootEntity(), opts, filterFunc);\r\n }\r\n\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function. \r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n public getEntitiesTreeWithFilter(filterFunc) {\r\n return this._listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n }\r\n\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n public getFullEntityPathByAttr(attrId: string, sep: string) : string {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n }\r\n\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n public getEntityPathByAttr(entity: Entity, attrId: string, sep: string, root: boolean): string {\r\n return super.getEntityPathByAttr(entity, attrId, sep, root);\r\n }\r\n\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n public getAttributeText(attr: EntityAttr, format: string): string {\r\n return super.getAttributeText(attr, format);\r\n }\r\n\r\n public getFirstUICAttr(): EntityAttr {\r\n return this.getFirstUICAttrInEntity(this.getRootEntity());\r\n }\r\n\r\n /**\r\n * Gets first `UIC` attribute in specified entity\r\n * (`UIC` stands for `use in conditions` - so such attribute can be used in conditions) \r\n * @param entity Entity object to search our attribute in.\r\n * @returns The entity attribute or `null`\r\n */\r\n private getFirstUICAttrInEntity(entity: Entity): EntityAttr | null {\r\n if (entity.useInConditions !== false) {\r\n if (entity.attributes) {\r\n let attrCount = entity.attributes.length;\r\n for (let i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].useInConditions) {\r\n return entity.attributes[i];\r\n }\r\n }\r\n }\r\n\r\n if (entity.subEntities) {\r\n let subEntityCount = entity.subEntities.length;\r\n for (let i = 0; i < subEntityCount; i++) {\r\n let result = this.getFirstUICAttrInEntity(entity.subEntities[i]);\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n public runThroughEntities(processAttribute?: (attr: EntityAttr, opts: any) => void , processEntity?: (entity: Entity, opts: any) => void) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n }\r\n\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n public getFirstAttributeByFilter(filterFunc: (attr: EntityAttr) => boolean): EntityAttr {\r\n let res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n }\r\n\r\n /**\r\n * Finds operator in model by its ID.\r\n * This function runs through all operators inside specified model and returns the one with specified ID.\r\n * @param operatorId An operator ID.\r\n * @returns The operator or `null`.\r\n */\r\n public findOperatorById(operatorId: string): Operator | null {\r\n if(this.operators.length > 0) {\r\n let opCount = this.operators.length;\r\n for (let idx = 0; idx < opCount; idx++) {\r\n if (this.operators[idx].id == operatorId) {\r\n return this.operators[idx];\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Finds operator in model by its ID.\r\n * his function runs through all operators inside specified model and returns the one with specified ID.\r\n * @param operatorId Operator ID.\r\n * @returns The operator or special `NullOperator` object if operator is not found.\r\n */\r\n public getOperatorById(operatorId: string): Operator {\r\n let op = this.findOperatorById(operatorId);\r\n if (!op) return this.nullOperator;\r\n return op;\r\n }\r\n\r\n public getDefaultOperatorIdForAttr(attr: EntityAttr): string {\r\n if(attr.defaultOperator) {\r\n return attr.defaultOperator;\r\n }\r\n else if(attr.operators.length > 0) {\r\n return attr.operators[0];\r\n }\r\n else {\r\n return this.nullOperator.id;\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Gets caption of the aggregate function.\r\n * @param funcId The function id.\r\n * @returns The caption.\r\n */\r\n public getAggrFunctionCaption (funcId: string): string {\r\n let funcTexts = i18n.getText('AggregateFunctions', funcId) as any;\r\n\r\n let funcCaption = funcTexts ? funcTexts.caption : i18n.getText('Aggr' + funcId.replace(' ', '') + '_Caption');\r\n if (funcCaption) {\r\n return funcCaption;\r\n }\r\n\r\n let func = dataUtils.findItemById(this.aggrFunctions, funcId);\r\n if (!func || !func.caption) return funcId;\r\n\r\n return func.caption;\r\n }\r\n\r\n /**\r\n * Gets format of the aggregate function.\r\n * @param funcId The function id.\r\n * @returns The caption.\r\n */\r\n public getAggrFunctionFormat(funcId: string): string {\r\n let funcTexts = i18n.getText('AggregateFunctions', funcId) as any;\r\n\r\n let funcFormat = funcTexts ? funcTexts.displayFormat : i18n.getText('Aggr' + funcId.replace(' ', '') + '_Format');\r\n if (funcFormat) {\r\n return funcFormat;\r\n }\r\n\r\n let func = dataUtils.findItemById(this.aggrFunctions, funcId);\r\n if (!func || !func.displayFormat) return '';\r\n\r\n return func.displayFormat;\r\n }\r\n\r\n /**\r\n * Gets default operator for an attribute.\r\n * @param attr The attribute.\r\n * @returns The operator.\r\n */\r\n public getDefaultOperatorForAttr(attr: EntityAttr): Operator {\r\n let operatorId = this.getDefaultOperatorIdForAttr(attr);\r\n return this.getOperatorById(operatorId);\r\n }\r\n\r\n /**\r\n * Gets operand.\r\n * @param attr The attribute.\r\n * @param operator The operator.\r\n * @param index The index.\r\n * @returns The operand.\r\n */\r\n public getOperand (attr: EntityAttr, operator: Operator, index: number): Operand {\r\n\r\n let defOperand = new Operand();\r\n if (operator && operator.defaultOperand) {\r\n defOperand.copyFrom(operator.defaultOperand);\r\n if (!defOperand.defValue) {\r\n defOperand.defValue = '';\r\n }\r\n if (!defOperand.defText) {\r\n defOperand.defText = '';\r\n }\r\n }\r\n else {\r\n defOperand.kind = DataKind.Scalar;\r\n defOperand.dataType = attr.dataType;\r\n defOperand.defValue = '';\r\n defOperand.defText = '';\r\n defOperand.editor = null;\r\n }\r\n\r\n let result = defOperand;\t\t\t\r\n \r\n\r\n if (result.dataType === DataType.Unknown && attr) {\r\n result.dataType = attr.dataType;\r\n }\r\n\r\n if (operator && (index >= 0)) {\r\n if (operator.operands && operator.operands[index - 1]) {\r\n result = dataUtils.assign(result, operator.operands[index - 1]);\r\n }\r\n };\r\n\r\n if (!result.editor) {\r\n if (defOperand.editor) {\r\n result.editor = defOperand.editor;\r\n }\r\n else if (defOperand.kind === DataKind.Query) {\r\n result.editor.tag = EqEditorTag.SubQuery;\r\n }\r\n else if (attr && attr.defaultEditor) {\r\n result.editor = attr.defaultEditor\r\n }\r\n else if (result.dataType === DataType.Date || result.dataType === DataType.DateTime \r\n || result.dataType === DataType.Time) {\r\n result.editor.tag = EqEditorTag.DateTime;\r\n }\r\n else {\r\n result.editor.tag = EqEditorTag.Edit;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets the list of aggegate functions.\r\n * @returns AN array of aggregate functions.\r\n */\r\n public getAggrFunctions(): AggrFunction[] {\r\n return this.aggrFunctions;\r\n }\r\n\r\n\r\n\r\n /**\r\n * Checks wether macro value is date.\r\n * @param macroExpr The macro value.\r\n * @retruns `true` if the macro value is date, otherwise `false`.\r\n */\r\n public isDateMacro(macroExpr: string, macroProcessor?: (macroId) => void): boolean {\r\n const match = macroExpr.match(/\\${{?(.*?)}?}/);\r\n if (match != null) {\r\n const macroId = match[1];\r\n if (dataUtils.indexOfArrayItem(this.dateMacros, macroId) >= 0) {\r\n if (macroProcessor) {\r\n macroProcessor(macroId);\r\n } \r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n \r\n /**\r\n * Checks whether the expression passed in the parameter is an time macro.\r\n * @param macroExpr The macro expression\r\n * @retruns `true` if the expression is a time macro (like Now), otherwise `false`.\r\n */\r\n public isTimeMacro(macroExpr: string, macroProcessor?: (macroId) => void): boolean {\r\n const match = macroExpr.match(/\\${{?(.*?)}?}/);\r\n if (match != null) {\r\n const macroId = match[1];\r\n if (dataUtils.indexOfArrayItem(this.timeMacros, macroId) >= 0) {\r\n if (macroProcessor) {\r\n macroProcessor(macroId);\r\n } \r\n return true;\r\n }\r\n }\r\n return false;\r\n } \r\n\r\n /**\r\n * Gets date by its macro value.\r\n * @param macroExpr The macro value.\r\n * @returns The date or `null`\r\n */\r\n public getDateMacroValue(macroExpr: string): Date | null {\r\n let d = new Date();\r\n const res = this.isDateMacro(macroExpr, macroId => {\r\n switch (macroId) {\r\n case 'Today':\r\n break;\r\n case 'Yesterday':\r\n d.setDate(d.getDate() - 1);\r\n break;\r\n case 'Tomorrow':\r\n d.setDate(d.getDate() + 1);\r\n break;\r\n case 'FirstDayOfMonth':\r\n d.setDate(1);\r\n break;\r\n case 'LastDayOfMonth':\r\n d.setMonth(d.getMonth() + 1, 0);\r\n break;\r\n case 'FirstDayOfPrevWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() - day);\r\n break;\r\n case 'FirstDayOfWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 6 : day - 1; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() - day);\r\n break;\r\n case 'FirstDayOfYear':\r\n d.setMonth(0, 1);\r\n break;\r\n case 'FirstDayOfNextWeek':\r\n var day = d.getDay();\r\n day = (day == 0) ? 1 : 8 - day; //We start week from Monday, but js - from Sunday\r\n d.setDate(d.getDate() + day);\r\n break;\r\n case 'FirstDayOfNextMonth':\r\n d.setMonth(d.getMonth() + 1, 1);\r\n break;\r\n case 'FirstDayOfPrevMonth':\r\n d.setMonth(d.getMonth() - 1, 1);\r\n break;\r\n case 'FirstDayOfPrevYear':\r\n d.setFullYear(d.getFullYear() - 1, 0, 1);\r\n break;\r\n case 'FirstDayOfNextYear':\r\n d.setFullYear(d.getFullYear() + 1, 0, 1);\r\n break;\r\n };\r\n });\r\n\r\n return res ? d : null;\r\n }\r\n \r\n\r\n /**\r\n * Gets the date value by a macro expression of the expression itself.\r\n * @param macroExpr The macro value.\r\n * @returns The date or macro valu.\r\n */\r\n public getDateOrMacroValue(macroExpr: string): string | Date {\r\n let d = this.getDateMacroValue(macroExpr);\r\n return d ? d : macroExpr;\r\n } \r\n\r\n /**\r\n * Gets time by its macro value.\r\n * @param macroExpr The macro value.\r\n * @returns The date or `null`.\r\n */\r\n public getTimeMacroValue(macroExpr: string): Date | null {\r\n let d = new Date();\r\n const res = this.isDateMacro(macroExpr, macroId => {\r\n switch (macroId) {\r\n case 'Now':\r\n break;\r\n case 'HourStart':\r\n d.setMinutes(0, 0, 0);\r\n break;\r\n case 'Midnight':\r\n d.setHours(0, 0, 0, 0);\r\n break;\r\n case 'Noon':\r\n d.setHours(12, 0, 0, 0);\r\n break;\r\n };\r\n });\r\n\r\n return res ? d : null;\r\n }\r\n\r\n /**\r\n * Gets time or macro by macro value.\r\n * @param macroValue The macro value.\r\n * @returns The time or macro valu.\r\n */\r\n public getTimeOrMacroValue(time: string): string | Date {\r\n var t = this.getTimeMacroValue(time);\r\n return t ? t : time;\r\n }\r\n \r\n // /**\r\n // * Gets all date marcos.\r\n // * @returns The array of marcos\r\n // */\r\n public getAllDateMacros() {\r\n return this.dateMacros;\r\n }\r\n\r\n /**\r\n * Gets all time marcos.\r\n * @returns The array of marcos\r\n */\r\n public getAllTimeMacros() {\r\n return this.timeMacros;\r\n }\r\n}","import { DataType } from '@easydata/core';\r\n\r\nimport { equtils } from '../utils/utils';\r\nimport { DataKind } from '../types/data_kind'\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { ConditionPart } from '../types/cond_part';\r\n\r\nimport { DataModel } from '../dm/data_model'; \r\nimport { Query } from './query'; \r\nimport { ExpressionData } from './dto/expression_data';\r\n\r\n/**\r\n * Represents expression object.\r\n */\r\nexport class Expression {\r\n /** The tag. */\r\n public tag: ExprTag = ExprTag.Constant;\r\n\r\n /** The data kind. */\r\n public kind: DataKind = DataKind.Scalar;\r\n\r\n /** The data type. */\r\n public dataType: DataType = DataType.Unknown;\r\n\r\n /** The value. */\r\n private _value: string | any = ''; //DO NOT forget remove any\r\n\r\n /** The text. */\r\n private text: string | undefined;\r\n\r\n /** \r\n * The distinct option. (e.g `SELECT DISTINCT`) \r\n */\r\n public distinct: boolean = false;\r\n\r\n /** The query. */\r\n public subQuery?: Query;\r\n\r\n /** The function. */\r\n public func?: string;\r\n\r\n /** The list of arguments. */\r\n public args?: Expression[];\r\n\r\n /** The base attribute id. */\r\n public baseAttrId?: string;\r\n\r\n /** The sql expression.*/\r\n public sql?: string;\r\n\r\n public _isDefaultValue = false;\r\n\r\n\r\n /** The default constructor. */\r\n constructor(private parent : ExpressionParent) {\r\n this.args = new Array<Expression>();\r\n }\r\n\r\n public getParent() : ExpressionParent {\r\n return this.parent;\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.parent.getQuery().getModel();\r\n }\r\n\r\n /**\r\n * Loads expression from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: ExpressionData) {\r\n if (data) {\r\n this.tag = data.tag;\r\n\r\n if (data.val) {\r\n this._value = data.val;\r\n this.text = data.txt; \r\n }\r\n else if (data.id) {\r\n this.kind = DataKind.Attribute;\r\n this._value = data.id;\r\n this.text = data.txt; \r\n }\r\n\r\n if (typeof data.dtype !== 'undefined') {\r\n this.dataType = data.dtype;\r\n }\r\n\r\n if (this.tag == ExprTag.EntityAttribute \r\n || this.tag == ExprTag.ParentEntityAttribute) {\r\n\r\n this.kind = DataKind.Attribute;\r\n \r\n //We don't load other info for EntityAttr\r\n }\r\n else {\r\n if (typeof data.kind !== 'undefined') {\r\n this.kind = data.kind;\r\n }\r\n \r\n if (data.query) {\r\n this.subQuery = this.parent.getQuery().createSubQuery();\r\n this.subQuery.loadFromDataOrJson(data.query);\r\n }\r\n \r\n if (typeof data.distinct !== 'undefined') {\r\n this.distinct = data.distinct;\r\n } \r\n \r\n if (data.func) {\r\n this.func = data.func;\r\n if (data.args) {\r\n for (let i = 0; i < data.args.length; i++) {\r\n const arg = new Expression(this.parent);\r\n arg.loadFromData(model, data.args[i]);\r\n this.args.push(arg);\r\n }\r\n } \r\n }\r\n \r\n if (data.sql) {\r\n this.sql = data.sql;\r\n this.baseAttrId = data.baseAttrId;\r\n } \r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Saves expression from JSON representation object.\r\n * @returns The JSON representation object.\r\n */\r\n public saveToData(): ExpressionData {\r\n let obj: ExpressionData = {\r\n tag: this.tag\r\n };\r\n\r\n obj.dtype = this.dataType; \r\n\r\n //Do not save other info for EntityAttr\r\n if (this.tag == ExprTag.EntityAttribute || this.tag == ExprTag.ParentEntityAttribute) {\r\n if (this._value) {\r\n obj.id = this._value;\r\n obj.val = this._value;\r\n }\r\n \r\n if (this.text) {\r\n obj.txt = this.text; \r\n }\r\n //Do not save other info for EntityAttr\r\n }\r\n else {\r\n if (this.subQuery) {\r\n obj.query = this.subQuery.toJSONData();\r\n }\r\n \r\n if (typeof this.kind !== \"undefined\") {\r\n obj.kind = this.kind; \r\n }\r\n \r\n if (this._value) {\r\n obj.val = this._value; \r\n }\r\n \r\n if (this.text) {\r\n obj.txt = this.text; \r\n }\r\n \r\n if (this.distinct) {\r\n obj.distinct = this.distinct;\r\n }\r\n \r\n if (this.func) {\r\n obj.func = this.func;\r\n obj.args = [];\r\n for(let i = 0; i < this.args.length; i++) {\r\n obj.args.push(this.args[i].saveToData());\r\n }\r\n }\r\n \r\n if (this.sql) {\r\n obj.sql = this.sql;\r\n obj.baseAttrId = this.baseAttrId;\r\n } \r\n }\r\n\r\n\r\n return obj;\r\n }\r\n\r\n public getIndex() : number {\r\n return this.parent.getExpressionIndex(this);\r\n }\r\n\r\n public get value() : string {\r\n return this._value;\r\n }\r\n\r\n public setValue(val : string, silent = false) : void {\r\n this.setContent(val, undefined, silent);\r\n }\r\n\r\n public getText = () => this.text || this._value; \r\n\r\n public setContent(val: string, txt?: string, silent = false) { \r\n let oldValue = this.value;\r\n\r\n if (this.kind == DataKind.Attribute && val) {\r\n const attr = this.getModel().getAttributeById(val);\r\n if (!attr) {\r\n throw \"No such entity attribute:\" + val;\r\n }\r\n this.dataType = attr.dataType;\r\n } \r\n \r\n this._value = val;\r\n if (typeof txt !== 'undefined') {\r\n this.text = txt;\r\n }\r\n else if (typeof this.text !== 'undefined') {\r\n this.text = val;\r\n }\r\n\r\n this._isDefaultValue = false;\r\n \r\n if (!silent) {\r\n this.parent.expressionChanged(this, oldValue);\r\n }\r\n }\r\n\r\n public isEmpty() {\r\n return !(this.text || this._value);\r\n }\r\n\r\n public hasText() {\r\n return this.text && this.text.length > 0;\r\n }\r\n\r\n public tryCopyValueFrom(expr: Expression) {\r\n if (this.kind == expr.kind) {\r\n if (this.dataType == expr.dataType) {\r\n this.setContent(\r\n expr.value.length ? expr.value : this._value, \r\n (expr.text && expr.text.length) ? expr.text: this.text,\r\n true);\r\n }\r\n else {\r\n const val = equtils.convertValue(expr.value, expr.dataType, this.dataType);\r\n this.setContent(\r\n val.length ? val : this._value, \r\n (expr.text && expr.text.length) ? expr.text: this.text, \r\n true);\r\n }\r\n this.subQuery = expr.subQuery;\r\n this.sql = expr.sql;\r\n this.baseAttrId = expr.baseAttrId;\r\n }\r\n else if (!this._isDefaultValue) {\r\n this.setContent('', '', true);\r\n this.subQuery = null;\r\n this.sql = null;\r\n this.baseAttrId = null;\r\n }\r\n }\r\n}\r\n\r\nexport interface ExpressionParent {\r\n getQuery() : Query; \r\n enabled: boolean;\r\n isReadOnly(): boolean;\r\n fireChangedEvent(condPart?: ConditionPart) : void;\r\n getExpressionIndex(expr : Expression) : number;\r\n expressionChanged(expr : Expression, oldValue : string) : void;\r\n}\r\n","import { Condition} from './condition';\r\nimport { QueryColumn } from './query_column';\r\n\r\nexport interface QueryChangeEventData {\r\n part: QueryChangePart;\r\n action?: QueryChangeAction;\r\n changee?: QueryColumn | QueryColumn[] | Condition | Condition[];\r\n [x: string]: any;\r\n}\r\n\r\n\r\nexport interface QueryChangeEventParams extends QueryChangeEventData {\r\n postpone?: number,\r\n wasModified?: boolean;\r\n}\r\n\r\nexport enum QueryChangePart {\r\n Conditions = 1,\r\n Columns = 1 << 1,\r\n SortingColumns = 1 << 2,\r\n Properties = 1 << 5,\r\n ExtraData = 1 << 6,\r\n Facets = 1 << 7,\r\n Aggregation = 1 << 8,\r\n All = (1 << 9) - 1\r\n}\r\n\r\nexport enum QueryChangeAction {\r\n Add = 1,\r\n Modify = 2,\r\n Delete = 4,\r\n Activate = 8,\r\n All = 127\r\n}","\r\nimport { DataType, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { Query } from './query';\r\nimport { Expression, ExpressionParent } from './expression';\r\nimport { QueryParam } from '../common/query_param';\r\n\r\nimport { DataModel } from '../dm/data_model';\r\nimport { EntityAttr } from '../dm/entity';\r\n\r\nimport { QueryColumnData } from './dto/query_column_data';\r\nimport { QueryChangePart, QueryChangeAction } from './query_events';\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { type } from 'os';\r\n\r\n/** Represents sorting direction. */\r\nexport enum SortDirection {\r\n /** No sorting. */\r\n None = 0,\r\n /** Ascending order. */\r\n Ascending = 1, \r\n /** Descending order. */\r\n Descending = 2\r\n}\r\n\r\n/**\r\n * Represents some column which will be queried\r\n */\r\nexport class QueryColumn implements ExpressionParent {\r\n private _id: string;\r\n public get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** Column is enabled */\r\n public enabled: boolean = true;\r\n\r\n /** The caption. */\r\n public caption: string;\r\n\r\n /** Column sorting direction */\r\n public sorting: SortDirection;\r\n\r\n /** The index of the column in the sorting list. */\r\n public sortIndex: number;\r\n\r\n /** The column expression. */\r\n public expr: Expression;\r\n\r\n /** The parameters associated with this column */\r\n public params: QueryParam[] = [];\r\n\r\n /** The block ID. */\r\n public blockId: string;\r\n\r\n /** The display format */\r\n public displayFormat?: string;\r\n\r\n /** The group footer template */\r\n public groupFooterColumnTemlate?: string;\r\n\r\n /** the default constructor. */\r\n constructor(private query: Query, private justsorted = false) {\r\n this._id = dataUtils.generateId('col');\r\n this.caption = '';\r\n this.sorting = SortDirection.None;\r\n this.sortIndex = -1;\r\n this.expr = new Expression(this);\r\n this.blockId = '';\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.query.getModel();\r\n }\r\n\r\n public getQuery() : Query {\r\n return this.query;\r\n }\r\n\r\n /** Indicates whether this column is read-only */\r\n public isReadOnly() : boolean {\r\n return false;\r\n }\r\n\r\n /** Indicates whether this column is just-sorted */\r\n public isJustSorted(): boolean {\r\n return this.justsorted;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n //do nothing. Read-only columns are not supported here\r\n }\r\n\r\n private _isHidden: boolean = false;\r\n /** Indicates whether this column is invisible */\r\n public isHidden() : boolean {\r\n return this._isHidden;\r\n }\r\n\r\n public setHidden(value: boolean) {\r\n this._isHidden = value;\r\n }\r\n\r\n public getDataType(): DataType {\r\n if (this.expr.dataType === DataType.Unknown) {\r\n let attrId = null;\r\n if (this.expr.func) {\r\n if (this.expr.func == \"COUNT\" || this.expr.func == \"CNTDST\")\r\n return DataType.Int64;\r\n \r\n attrId = this.expr.args[0].value;\r\n }\r\n else {\r\n attrId = this.expr.value;\r\n }\r\n \r\n const attr = this.query.getModel()\r\n .getAttributeById(attrId);\r\n \r\n if (attr) return attr.dataType; \r\n }\r\n return this.expr.dataType;\r\n }\r\n\r\n /**\r\n * Loads column from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param colData The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, colData: QueryColumnData) {\r\n if (colData) {\r\n if (colData.id) {\r\n this._id = colData.id;\r\n }\r\n this.caption = colData.cptn as string;\r\n\r\n if (typeof colData.srt !== 'undefined') {\r\n this.sorting = colData.srt as SortDirection;\r\n this.sortIndex = (typeof colData.srtidx !== 'undefined')\r\n ? colData.srtidx as number\r\n : -1; \r\n }\r\n\r\n if (colData.enabled === false) {\r\n this.enabled = colData.enabled;\r\n }\r\n\r\n this.expr.loadFromData(model, colData.expr);\r\n this.blockId = colData.blockId as string;\r\n\r\n this.displayFormat = colData.dfmt;\r\n this.groupFooterColumnTemlate = colData.gfct;\r\n\r\n if (colData.hidden) {\r\n this.setHidden(true);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Saves the column to a data transfer object (ready for sending to the server-side) .\r\n * @returns An plain object that represents the column.\r\n */\r\n public saveToData(): QueryColumnData {\r\n let obj: any = {};\r\n \r\n obj.id = this._id;\r\n\r\n if (typeof this.caption !== 'undefined') {\r\n obj.cptn = this.caption;\r\n }\r\n \r\n if (typeof this.sorting !== 'undefined' && this.sorting != SortDirection.None) {\r\n obj.srt = this.sorting;\r\n obj.srtidx = this.sortIndex;\r\n }\r\n\r\n obj.expr = this.expr.saveToData();\r\n if (this.blockId) {\r\n obj.blockId = this.blockId;\r\n }\r\n\r\n if (this.enabled === false) {\r\n obj.enabled = this.enabled;\r\n }\r\n\r\n obj.dfmt = this.displayFormat;\r\n obj.gfct = this.groupFooterColumnTemlate;\r\n\r\n if (this.isHidden()) {\r\n obj.hidden = true;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n public fireChangedEvent () : void {\r\n this.query.fireChangedEvent({\r\n part: (this.justsorted) \r\n ? QueryChangePart.SortingColumns \r\n : QueryChangePart.Columns,\r\n action: QueryChangeAction.Modify,\r\n changee: this\r\n });\r\n }\r\n\r\n public getExpressionIndex(expr: Expression) : number {\r\n return 0;\r\n }\r\n\r\n public expressionChanged(expr : Expression, oldValue : string) : void { \r\n }\r\n}\r\n","/**\r\n * Represents a type of condition. \r\n * Current we have 2 possible types: a simple condition or a predicate - a group of conditions\r\n*/\r\nexport enum CondTag {\r\n /** An unknown type of condition (just in case).*/\r\n Unknown = 0,\r\n /** A simple condition (e.g. SomeField > SomeValue).*/\r\n Simple = 1,\r\n /** A predicate (a group of conditions).*/\r\n Group = 51\r\n}","export enum ConditionPart {\r\n EntityAttr = 1 << 1,\r\n Operator = 1 << 2,\r\n Value = 1 << 3,\r\n All = EntityAttr | Operator | Value\r\n}","import { DataType, EditorTag, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { Expression, ExpressionParent } from './expression'\r\nimport { DataKind } from '../types/data_kind'\r\nimport { LinkType } from '../types/link_type'\r\nimport { CondTag } from '../types/cond_tag'\r\nimport { ExprTag } from '../types/expr_tag'\r\n\r\nimport { DataModel } from '../dm/data_model'\r\nimport { Operator, Operand } from '../dm/operator'\r\n\r\nimport { EntityAttr } from '../dm/entity'\r\n\r\nimport { Query } from './query'\r\nimport { ConditionData } from './dto/condition_data'\r\nimport { QueryChangePart, QueryChangeAction } from './query_events'\r\nimport { EqValueEditor } from '../dm/value_editor'\r\nimport { EqEditorTag } from '../types/eq_editor_tag'\r\nimport { ConditionPart } from '../types/cond_part'\r\n\r\n/**\r\n * Represents some condition.\r\n */\r\nexport class Condition implements ExpressionParent {\r\n\r\n protected _id: string;\r\n public get id(): string {\r\n return this._id;\r\n }\r\n\r\n /** The condition tag. */\r\n public tag: CondTag;\r\n\r\n /** The value indicating whether this Condition is enabled. */\r\n protected _enabled: boolean;\r\n\r\n public get enabled(): boolean {\r\n return this._enabled && (!this.getParent() || this.getParent().enabled);\r\n }\r\n\r\n public set enabled(value: boolean) {\r\n this._enabled = value && (!this.getParent() || this.getParent().enabled);\r\n this.conditions && this.conditions.forEach((cond: Condition) => {\r\n cond.enabled = value;\r\n })\r\n }\r\n\r\n\r\n /** Condition enabled option. */\r\n public justAdded: boolean;\r\n \r\n\r\n /**\r\n * The linking type.\r\n */\r\n public linkType: LinkType = LinkType.All; //only for predicates\r\n\r\n /**\r\n * The list of expression.\r\n */\r\n public expressions: Expression[];\r\n\r\n /**\r\n * The list of conditions.\r\n */\r\n protected conditions: Condition[];\r\n\r\n /**\r\n * The operator id.\r\n */\r\n private operatorId: string;\r\n\r\n /** \r\n * The block id.\r\n */\r\n public blockId: string;\r\n\r\n /**\r\n * The default constructor.\r\n * @param tag The condition tag\r\n */\r\n constructor(protected query: Query, tag? : CondTag) {\r\n this._id = dataUtils.generateId('cond');\r\n this.justAdded = false;\r\n this.tag = tag || CondTag.Unknown;\r\n this.enabled = true;\r\n this.operatorId = '';\r\n this.blockId = '';\r\n this.expressions = new Array<Expression>();\r\n this.conditions = new Array<Condition>();\r\n }\r\n\r\n public getQuery() : Query {\r\n return this.query;\r\n }\r\n\r\n public getModel() : DataModel {\r\n return this.query.getModel();\r\n }\r\n\r\n protected parent : Condition = null;\r\n\r\n public getParent() : Condition {\r\n return this.parent;\r\n }\r\n\r\n public setParent(parent : Condition): void {\r\n this.parent = parent;\r\n }\r\n\r\n public getConditions() : Condition[] {\r\n return this.conditions;\r\n }\r\n\r\n public isEmpty() : boolean {\r\n return this.conditions.length === 0;\r\n }\r\n\r\n public isGroup() : boolean {\r\n return (this.tag == CondTag.Group) || (this.parent == null);\r\n }\r\n\r\n\r\n public getLevel() : number {\r\n const parent = this.getParent();\r\n\r\n return parent ? parent.getLevel() + 1 : 0;\r\n }\r\n\r\n /** \r\n * Indicates whether this condition is read-only.\r\n */\r\n public isReadOnly(): boolean {\r\n return false;\r\n }\r\n\r\n public setReadOnly(value: boolean) {\r\n }\r\n\r\n /** \r\n * The value indicating whether this condition is parameterized.\r\n */\r\n public isParameterized(): boolean {\r\n return false;\r\n }\r\n\r\n public setParameterized(value : boolean) {\r\n }\r\n\r\n /** \r\n * Indicates whether this condition must be placed into `JOIN` clause in result `SQL`.\r\n */\r\n public isInJoin(): boolean {\r\n return false;\r\n }\r\n\r\n public setInJoin(value : boolean) { \r\n }\r\n\r\n public clearConditions() :void {\r\n this.conditions = [];\r\n }\r\n\r\n public addCondition(cond : Condition): number {\r\n cond.setParent(this);\r\n return this.conditions.push(cond);\r\n }\r\n\r\n public removeConditionAt(index: number) : void {\r\n this.conditions.splice(index, 1);\r\n }\r\n\r\n\r\n /**\r\n * Loads condtion from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param data The JSON representation object.\r\n */\r\n public loadFromData(model: DataModel, data: ConditionData) {\r\n if (data) {\r\n this.tag = data.tag;\r\n \r\n if (!this.tag) { \r\n this.tag = (!this.parent || this.conditions.length > 0) ? CondTag.Group : CondTag.Simple;\r\n }\r\n\r\n if (typeof data.enabled !== 'undefined') {\r\n this.enabled = data.enabled;\r\n }\r\n\r\n if (typeof data.disabled !== 'undefined') {\r\n this.enabled = !data.disabled;\r\n }\r\n\r\n if (this.tag == CondTag.Simple) {\r\n this.operatorId = data.op;\r\n \r\n if (data.exprs) {\r\n for (let i = 0; i < data.exprs.length; i++) {\r\n let newExpr = new Expression(this);\r\n newExpr.loadFromData(model, data.exprs[i]);\r\n this.expressions.push(newExpr);\r\n }\r\n }\r\n }\r\n\r\n this.linkType = data.linking;\r\n }\r\n }\r\n\r\n /**\r\n * Saves condition to JSON representation object.\r\n * @returns The JSON representation object.\r\n */\r\n public saveToData(): ConditionData {\r\n let obj: any = {};\r\n obj.tag = this.tag;\r\n\r\n if (!this.enabled) {\r\n obj.enabled = this.enabled;\r\n }\r\n\r\n if (this.tag == CondTag.Simple) { \r\n obj.op = this.operatorId;\r\n \r\n obj.exprs = [];\r\n for (let i = 0; i < this.expressions.length; i++) {\r\n obj.exprs.push(this.expressions[i].saveToData());\r\n } \r\n }\r\n\r\n if (this.tag == CondTag.Group){\r\n //if condition group\r\n obj.linking = this.linkType;\r\n }\r\n \r\n return obj;\r\n }\r\n\r\n public fireChangedEvent(condPart = ConditionPart.All) : void {\r\n this.query.fireChangedEvent({\r\n part: QueryChangePart.Conditions,\r\n action: QueryChangeAction.Modify,\r\n changee: this,\r\n condPart: condPart\r\n });\r\n }\r\n\r\n public getExpressionIndex(expr: Expression) : number {\r\n return this.expressions.indexOf(expr, 0);\r\n }\r\n\r\n public expressionChanged(expr : Expression, oldValue : string) : void {\r\n if (expr.getIndex() == 0 && expr.tag == ExprTag.EntityAttribute) {\r\n //this is a base entity attribute, we need to re-pack the whole condition\r\n this.tuneOperatorForAttr(expr.value);\r\n }\r\n }\r\n\r\n public getOperatorId() : string {\r\n return this.operatorId;\r\n }\r\n\r\n public setOperatorId(newOperatorId : string, silent: boolean = false) : void {\r\n const oldOperatorId = this.operatorId;\r\n this.operatorId = newOperatorId;\r\n\r\n if (!silent) {\r\n const model = this.getModel();\r\n\r\n const operator = model.getOperatorById(newOperatorId);\r\n const attrId = this.expressions[0].value;\r\n const attr = model.getAttributeById(attrId);\r\n \r\n this.tuneValueExpressions(attr, operator, attr.id, oldOperatorId); \r\n }\r\n }\r\n\r\n private tuneOperatorForAttr(oldAttrId : string) : void {\r\n const model = this.getModel();\r\n const attrId = this.expressions[0].value;\r\n const attr = model.getAttributeById(attrId);\r\n if (attr != null) {\r\n let newOperator = this.getModel().getDefaultOperatorForAttr(attr);\r\n let oldOperatorId = this.operatorId;\r\n this.operatorId = newOperator.id;\r\n this.tuneValueExpressions(attr, newOperator, oldAttrId, oldOperatorId); \r\n }\r\n }\r\n\r\n private tuneValueExpressions(attr: EntityAttr, operator : Operator, oldAttrId : string, oldOperatorId : string) : void {\r\n const model = this.getModel();\r\n\r\n if (!operator) return;\r\n\r\n let exprCount = this.expressions.length;\r\n\r\n let oldAttr = oldAttrId ? model.getAttributeById(oldAttrId) : null;\r\n\r\n let oldOperator: Operator = null;\r\n if (oldOperatorId) {\r\n oldOperator = model.getOperatorById(oldOperatorId);\r\n }\r\n \r\n if (oldOperator && oldOperator.paramCount == operator.paramCount) {\r\n //add necessary expressions\r\n let i = 1;\r\n while (i < operator.paramCount) {\r\n let oldOperand = model.getOperand(attr, oldOperator, i);\r\n let operand = model.getOperand(attr, operator, i);\r\n if (operand.dataType == DataType.Unknown) {\r\n operand.dataType = attr.dataType;\r\n }\r\n\r\n const editor = operand.editor && operand.editor.tag !== EditorTag.Unknown\r\n ? operand.editor\r\n : (attr.defaultEditor && attr.defaultEditor.tag !== EditorTag.Unknown\r\n ? attr.defaultEditor\r\n : new EqValueEditor());\r\n\r\n if (i >= exprCount) {\r\n var valExpr = this.createValueExpr(operand);\r\n this.expressions.push(valExpr); \r\n }\r\n else {\r\n var oldExpr = this.expressions[i];\r\n\r\n //create new value expression according to the corresponding operand\r\n var newExpr = this.createValueExpr(operand); \r\n if (this.areCompitableEditors(oldOperand.editor, editor)) {\r\n newExpr.tryCopyValueFrom(oldExpr);\r\n }\r\n\r\n this.expressions[i] = newExpr;\r\n }\r\n\r\n i++;\r\n }\r\n\r\n if (exprCount > i) {\r\n //remove all redundant expressions\r\n this.expressions.splice(i, exprCount - i);\r\n }\r\n } \r\n else {\r\n this.expressions.splice(1, this.expressions.length - 1);\r\n\r\n for(let i = 1; i < operator.paramCount; i++) {\r\n let operand = model.getOperand(attr, operator, i);\r\n if (operand.dataType == DataType.Unknown) {\r\n operand.dataType = attr.dataType;\r\n }\r\n var valExpr = this.createValueExpr(operand);\r\n this.expressions.push(valExpr); \r\n }\r\n }\r\n }\r\n\r\n private areCompitableEditors(oldEditor: EqValueEditor, newEditor: EqValueEditor): boolean {\r\n if (newEditor.tag == EqEditorTag.CustomList || newEditor.tag == EqEditorTag.List \r\n || newEditor.tag == EqEditorTag.SqlList || newEditor.tag == EditorTag.Unknown) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public addExpressionByOperand(operand : Operand, val: string = null) : Expression {\r\n let expr = this.createValueExpr(operand, val);\r\n this.expressions.push(expr);\r\n return expr;\r\n }\r\n\r\n private createValueExpr(operand : Operand, val: string = null): Expression {\r\n let valueNotDefined = val === null || typeof val === 'undefined';\r\n\r\n let value = val ? val : operand.defValue;\r\n let text = val ? val : operand.defText;\r\n\r\n let result = new Expression(this);\r\n if (operand.kind === DataKind.Query) {\r\n result.tag = ExprTag.Query;\r\n result.dataType = operand.dataType;\r\n result.kind = operand.kind;\r\n result.setContent(value, text, true);\r\n } \r\n else if (operand.kind === DataKind.Attribute) {\r\n if (!valueNotDefined) {\r\n let defAttr = this.getModel().getFirstAttributeByFilter((attr) => {\r\n return attr.useInConditions == true && (!operand.dataType || attr.dataType == operand.dataType);\r\n });\r\n\r\n value = defAttr ? defAttr.id : null;\r\n }\r\n\r\n result.tag = ExprTag.EntityAttribute;\r\n result.kind = operand.kind;\r\n result.dataType = operand.dataType;\r\n result.setContent(value, text, true);\r\n } \r\n else {\r\n if (valueNotDefined) {\r\n if (operand.defValue && operand.defValue != \"\") {\r\n value = operand.defValue;\r\n }\r\n else {\r\n if (operand.editor && operand.editor.defValue) {\r\n value = operand.editor.defValue;\r\n }\r\n else {\r\n value = '';\r\n }\r\n }\r\n \r\n if (operand.editor) {\r\n text = operand.editor.getValueText(value);\r\n }\r\n }\r\n\r\n result.tag = ExprTag.Constant;\r\n result.dataType = operand.dataType;\r\n result.kind = operand.kind;\r\n result.setContent(value, text, true);\r\n result._isDefaultValue = valueNotDefined;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n","import { \r\n EventEmitter, EqEvent, \r\n utils as dataUtils, AggregationColumnStore, AggregationSettings, DataType \r\n} from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\nimport { equtils } from '../utils/utils';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { Expression } from './expression';\r\nimport { Operator } from '../dm/operator';\r\nimport { EntityAttr } from '../dm/entity';\r\n\r\nimport { QueryColumn, SortDirection } from './query_column';\r\nimport { Condition } from './condition';\r\n\r\nimport { DataKind } from '../types/data_kind';\r\nimport { LinkType } from '../types/link_type';\r\nimport { ExprTag } from '../types/expr_tag';\r\nimport { CondTag } from '../types/cond_tag';\r\nimport { QueryData } from './dto/query_data';\r\nimport { ModelPlainData } from '../dm/dto/dm_data';\r\n\r\nimport { \r\n ColumnDescriptor, \r\n SimpleConditionDescriptor, ConditionGroupDescriptor \r\n} from './descriptors';\r\n\r\nimport { QueryChangeEventParams, QueryChangePart, QueryChangeAction } from './query_events'; \r\n\r\n/**\r\n * The error that appears when the query is not valid\r\n */\r\nexport class InvalidQueryError extends Error {\r\n /**\r\n * Creates an instance of error type.\r\n * @param message The error message\r\n */\r\n constructor(message: string) {\r\n super(message);\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, InvalidQueryError);\r\n }\r\n\r\n this.name = 'InvalidQueryError';\r\n }\r\n}\r\n\r\n/**\r\n * Represents query options.\r\n */\r\nexport interface QueryOptions {\r\n parent?: Query,\r\n attrTag?: ExprTag;\r\n clientListRequestHandler?: any;\r\n serverListRequestHandler?: any;\r\n}\r\n\r\nexport interface ValidateQueryOptions {\r\n checkExpressions?: boolean;\r\n}\r\n\r\nexport type LoadQueryFromDataOptions = {\r\n changeStatus?: boolean;\r\n validate?: boolean;\r\n}\r\n\r\n/**\r\n * Represents Query.\r\n */\r\nexport class Query implements AggregationColumnStore {\r\n private id: string;\r\n private name: string;\r\n private description: string;\r\n private root: Condition;\r\n private columns: QueryColumn[];\r\n private justsorted: QueryColumn[];\r\n\r\n protected extraConditions: Condition;\r\n \r\n /**\r\n * Current timezone offset (it's sent to the server for proper date/time values processing).\r\n */ \r\n public timezoneOffset: number;\r\n\r\n /**\r\n * Contains user-defined extra data for current query.\r\n */\r\n public extraData: any = {};\r\n\r\n public innerData: any = {};\r\n\r\n /** \r\n * The Data Model associated with this query.\r\n */\r\n public model: DataModel;\r\n\r\n private eventEmitter: EventEmitter;\r\n\r\n /**\r\n * The attributec class name (Tag).\r\n */\r\n public attributeExprTag: ExprTag;\r\n\r\n public clientListRequestHandler: any;\r\n\r\n public serverListRequestHandler: any;\r\n\r\n public isNewbie: boolean = true;\r\n\r\n private _isModified : boolean = false;\r\n\r\n private _enableAggregation: boolean = false;\r\n \r\n private parentQuery: Query = null;\r\n\r\n private drillDowns : Array<Query> = [];\r\n\r\n private aggrSettings: AggregationSettings;\r\n\r\n isModified() : boolean {\r\n return this._isModified;\r\n }\r\n\r\n resetModified() : void {\r\n this._isModified = false;\r\n }\r\n\r\n public get enableAggregation(): boolean {\r\n return this._enableAggregation;\r\n }\r\n\r\n public set enableAggregation(value: boolean) {\r\n const oldValue = this._enableAggregation;\r\n this._enableAggregation = value;\r\n if (!oldValue && value) {\r\n this.processQueryForAggregation();\r\n \r\n const aggrCols = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.AggregateFunction);\r\n }\r\n\r\n if (!this._enableAggregation) {\r\n this.aggrSettings.clear();\r\n }\r\n }\r\n\r\n /**\r\n * The default constructor.\r\n * @param model The data model.\r\n * @param data JSON representation object.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n constructor(model?: DataModel, data?: QueryData, options?: QueryOptions) {\r\n this.eventEmitter = new EventEmitter(this);\r\n\r\n this.root = new Condition(this, CondTag.Group);\r\n this.extraConditions = new Condition(this, CondTag.Group);\r\n\r\n this.columns = new Array<QueryColumn>();\r\n this.justsorted = new Array<QueryColumn>();\r\n if (!this.id){\r\n this.regenerateId();\r\n }\r\n this.setDefaultName();\r\n\r\n this.description = \"\";\r\n \r\n this.model = (model) ? model : new DataModel();\r\n if (data) {\r\n this.loadFromData(data);\r\n }\r\n\r\n this.attributeExprTag = (options) ? options.attrTag || ExprTag.EntityAttribute : ExprTag.EntityAttribute;\r\n this.clientListRequestHandler = (options) ? options.clientListRequestHandler : new Array<(...params: any[]) => void>();\r\n this.serverListRequestHandler = (options) ? options.serverListRequestHandler : new Array<(...params: any[]) => void>();\r\n\r\n this.timezoneOffset = (new Date()).getTimezoneOffset();\r\n\r\n this.aggrSettings = new AggregationSettings(this);\r\n\r\n if (options) {\r\n this.parentQuery = options.parent;\r\n }\r\n\r\n this.addChangedCallback(ev => {\r\n if (ev.data \r\n && ((ev.data.part & QueryChangePart.Columns) > 0)\r\n && !ev.data.aggregation) \r\n {\r\n if (this._enableAggregation && this.updateAggregationSettings()) {\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Aggregation\r\n });\r\n }\r\n }\r\n })\r\n }\r\n\r\n protected updateAggregationSettings() : boolean {\r\n let hasChanged = false;\r\n const aggrSettings = this.getAggregationSettings();\r\n for (let i = aggrSettings.groups.length -1; i >=0; i--) {\r\n const group = aggrSettings.groups[i];\r\n for (let j = group.columns.length - 1; j >= 0; j--) {\r\n const colId = group.columns[j];\r\n if (!this.columns.find(col => col.id === colId)) {\r\n group.columns.splice(j, 1);\r\n hasChanged = true;\r\n }\r\n }\r\n if (group.columns.length == 0) {\r\n aggrSettings.groups.slice(i, 1);\r\n }\r\n }\r\n\r\n const aggregates = aggrSettings.getAggregates();\r\n for (let i = aggregates.length - 1; i >= 0; i--) {\r\n const aggr = aggregates[i];\r\n if (!this.columns.find(col => col.id === aggr.colId)) {\r\n aggregates.splice(i, 1);\r\n hasChanged = true;\r\n }\r\n }\r\n return hasChanged;\r\n }\r\n\r\n public createSubQuery() : Query {\r\n return new Query(this.model);\r\n }\r\n\r\n public useAggregation(settingsTuner: (settings: AggregationSettings) => void, silent = false) {\r\n this.aggrSettings.clear();\r\n\r\n settingsTuner(this.aggrSettings);\r\n\r\n if (this.enableAggregation) {\r\n this.processQueryForAggregation(silent);\r\n }\r\n else if (!silent) {\r\n console.warn('Aggregation is turned off. Turn it on with query.enableAggregation = true');\r\n return;\r\n }\r\n }\r\n\r\n public useDefaultAggregation() {\r\n this._enableAggregation = true;\r\n this.useAggregation((settings) => {\r\n const aggrCols = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.AggregateFunction);\r\n\r\n if (aggrCols.length) {\r\n // query contains aggregate columns\r\n\r\n const colsToGroup = this.columns.filter(c => c.enabled\r\n && c.expr.tag == ExprTag.EntityAttribute);\r\n\r\n const aggrsToAdd = [];\r\n for (const col of aggrCols) {\r\n aggrsToAdd.push({ id: col.id, func: col.expr.func });\r\n this.changeColumnType(col, ExprTag.EntityAttribute);\r\n }\r\n\r\n for(const aggr of aggrsToAdd) {\r\n settings.addAggregateColumn(aggr.id, aggr.func);\r\n }\r\n\r\n for(const col of colsToGroup) {\r\n settings.addGroup({ columns: [col.id], name: col.caption });\r\n }\r\n\r\n settings.addGrandTotals();\r\n\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Columns,\r\n wasModified: false\r\n });\r\n }\r\n else {\r\n // query does not has any aggr columns\r\n const colToAggr = this.getColumns()\r\n .filter(c => c.enabled && c.expr.tag == ExprTag.EntityAttribute\r\n && this.model.getAttributeById(c.expr.value).dataType === DataType.Currency)[0];\r\n\r\n const colToGroup = this.getColumns()\r\n .filter(c => c.enabled && c.expr.tag == ExprTag.EntityAttribute\r\n && this.model.getAttributeById(c.expr.value).dataType === DataType.String)[0];\r\n\r\n if ((!colToAggr && !settings.hasAggregates()) || !colToGroup)\r\n return;\r\n\r\n settings.addGrandTotals()\r\n .addAggregateColumn(colToAggr.id, 'SUM')\r\n .addGroup({ columns: [colToGroup.id], name: 'Default' });\r\n\r\n }\r\n });\r\n }\r\n\r\n private processQueryForAggregation(silent = false) {\r\n const aggrSettings = this.getAggregationSettings();\r\n const groups = aggrSettings.getGroups();\r\n if (groups.length > 0) {\r\n const groupColIds = groups[groups.length - 1].columns;\r\n //take the list of grouped columns from the latest group\r\n let groupedCols = [];\r\n let sortedCols = [];\r\n for (const col of this.getColumns()) {\r\n if (groupColIds.indexOf(col.id) >= 0) {\r\n groupedCols.push(col);\r\n }\r\n else if (col.sorting != SortDirection.None) {\r\n sortedCols.push(col);\r\n }\r\n }\r\n\r\n let sortIndex = 0;\r\n groupedCols.forEach(col => {\r\n if (col.sorting == SortDirection.None) {\r\n col.sorting = SortDirection.Ascending;\r\n }\r\n col.sortIndex = sortIndex++;\r\n }); \r\n \r\n sortedCols.forEach(col => {\r\n col.sortIndex = sortIndex++;\r\n }); \r\n\r\n if (!silent) {\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Columns,\r\n aggregation: true,\r\n wasModified: false\r\n });\r\n }\r\n }\r\n }\r\n\r\n public getAggregationSettings(): AggregationSettings {\r\n return this.aggrSettings;\r\n }\r\n\r\n getColumnIds(from: number, to?: number): string[] {\r\n to = to || from;\r\n return this.columns.slice(from, to - from + 1)\r\n .map(c => c.id);\r\n }\r\n\r\n /**\r\n * Checks if the columns with IDs passed in function's parameter exist and are valid\r\n */\r\n validateColumns(colIds: string[]): boolean {\r\n const enabledColIds = this.columns.filter(c => c.enabled).map(c => c.id);\r\n\r\n let prevIndex = -1;\r\n for (const col of colIds) {\r\n const index = enabledColIds.indexOf(col);\r\n if (index < 0)\r\n return false;\r\n\r\n if (prevIndex > index)\r\n return false;\r\n\r\n prevIndex = index;\r\n }\r\n \r\n return true;\r\n }\r\n\r\n validateAggregate(colId: string, funcId: string): boolean {\r\n const col = this.columns.filter(c => c.enabled && c.id === colId)[0];\r\n const func = this.model.findAggrFunctionById(funcId);\r\n if (!func || !col || func.appliedTypes.indexOf(col.expr.dataType) < 0)\r\n return false;\r\n\r\n return true;\r\n }\r\n \r\n public isEx() : boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Resets the query: clears all its conditions and columns, regenerate the ID and sets the default name.\r\n * @param silent Indicates whether we need to avoid firing the QueryChanged event.\r\n */\r\n public reset(clearQuery: boolean = true) {\r\n if (clearQuery) {\r\n this.clear();\r\n } \r\n this.regenerateId();\r\n this.setDefaultName();\r\n\r\n this._isModified = false;\r\n this.isNewbie = true;\r\n }\r\n\r\n public hasEnabledAggrColumns(): boolean {\r\n return this.columns.filter(col => col.enabled \r\n && col.expr.tag === ExprTag.AggregateFunction).length > 0;\r\n }\r\n\r\n public setDefaultName() : string {\r\n this.setName(i18n.getText('NewQueryName'));\r\n return this.getName();\r\n }\r\n\r\n /**\r\n * Validates wether the query corresponds to the model.\r\n * @param options Validate options.\r\n * @throws {InvalidQueryError} If query is not valid.\r\n */\r\n public validate(options?: ValidateQueryOptions) {\r\n\r\n options = options || {};\r\n\r\n const entityAttrNotExistError = \"EntityAttribute isn't declared in the model: \";\r\n const wrongExprTag = \"The expression has wrond tag: \";\r\n\r\n if (!this.model) {\r\n throw new InvalidQueryError(\"Model is not declared\");\r\n }\r\n\r\n if (this.columns) {\r\n for(let column of this.columns) {\r\n if (column.expr.tag == ExprTag.EntityAttribute\r\n || column.expr.tag === ExprTag.ParentEntityAttribute) {\r\n const attr = this.model.getAttributeById(column.expr.value);\r\n if (!attr) {\r\n throw new InvalidQueryError(entityAttrNotExistError + column.expr.value);\r\n }\r\n } \r\n else if (column.expr.tag === ExprTag.AggregateFunction) {\r\n const attr = this.model.getAttributeById(column.expr.args[0].value);\r\n if (!attr) {\r\n throw new InvalidQueryError(entityAttrNotExistError + column.expr.args[0].value);\r\n }\r\n } \r\n else if (column.expr.tag !== ExprTag.CustomSql) {\r\n throw new InvalidQueryError(wrongExprTag + column.expr.tag);\r\n }\r\n }\r\n }\r\n\r\n if (this.root && this.root.getConditions()) {\r\n this.validateConditionGroup(this.root, options);\r\n }\r\n }\r\n\r\n public getAggregatedColumns(): QueryColumn[] {\r\n return this.getColumns().filter(col => col.enabled \r\n && col.expr.tag === ExprTag.AggregateFunction);\r\n }\r\n\r\n /**\r\n * Validates wether the query corresponds to the model.\r\n * @param options Validate options. \r\n * @returns `true` if it is valid, otherwise `false`\r\n */\r\n public tryValidate(options?: ValidateQueryOptions): boolean {\r\n try {\r\n this.validate(options);\r\n return true;\r\n }\r\n catch(e) {\r\n if (e instanceof InvalidQueryError) {\r\n return false;\r\n } else {\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n private validateConditionGroup(curCond: Condition, options: ValidateQueryOptions) {\r\n if (curCond.isGroup()) {\r\n for (let condition of curCond.getConditions()) {\r\n \r\n if (!condition.enabled)\r\n continue;\r\n\r\n this.validateConditionGroup(condition, options);\r\n }\r\n } \r\n else if (curCond.expressions[0].tag === ExprTag.EntityAttribute) {\r\n const attrId = curCond.expressions[0].value;\r\n const attr = this.model.getAttributeById(attrId); \r\n if (!attr) {\r\n throw new InvalidQueryError(\"EntityAttribute isn't declared in the model: \" + attrId);\r\n }\r\n\r\n if (!options.checkExpressions) \r\n return\r\n\r\n for(let i = 1; i < curCond.expressions.length; i++) {\r\n const expr = curCond.expressions[i];\r\n if (expr.tag !== ExprTag.Constant)\r\n continue;\r\n\r\n //validate number exprs\r\n if (dataUtils.isNumericType(expr.dataType)) {\r\n\r\n if (!expr.value)\r\n continue;\r\n\r\n let values = [];\r\n if (expr.kind === DataKind.List) {\r\n values = expr.value.split(/\\s*,\\s*/);\r\n } else {\r\n values = [expr.value];\r\n }\r\n\r\n for (let value of values) {\r\n const parsedVal = +value;\r\n\r\n if (isNaN(parsedVal)) {\r\n throw new InvalidQueryError(\"Expression constant is NaN in condition:\" + curCond.id);\r\n }\r\n if (dataUtils.isIntType(expr.dataType) && parsedVal != parseInt(value, 10)) {\r\n throw new InvalidQueryError(\"Expression constant is wrong interger in condition: \" + curCond.id);\r\n }\r\n }\r\n \r\n }\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * Sets data to the query.\r\n * @param data JSON representation object or JSON string\r\n * @param changeStatus Indicate whether we should change the \"isModified\" status (by default == `true`)\r\n */\r\n public loadFromDataOrJson(data: QueryData | string, options?: LoadQueryFromDataOptions) { \r\n if (data) {\r\n if (typeof data === \"string\") {\r\n this.loadFromJson(data, options);\r\n } \r\n else {\r\n this.loadFromData(data, options);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Loads query from JSON.\r\n * @param json The JSON string.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n public loadFromJson(json: string, options?: LoadQueryFromDataOptions) {\r\n let data = JSON.parse(json);\r\n this.loadFromData(data, options);\r\n }\r\n\r\n /**\r\n * Loads query from data representation.\r\n * @param data The query DTO.\r\n * @param options The options.\r\n * @throws {InvalidQueryError} The error throws when query is not valid.\r\n */\r\n public loadFromData(data: QueryData, options?: LoadQueryFromDataOptions) {\r\n options = dataUtils.assign({\r\n changeStatus: true,\r\n validate: true\r\n }, options || {});\r\n\r\n let noErrors = false;\r\n\r\n this.clear();\r\n this.clearDrillDowns();\r\n \r\n if (data) {\r\n this.id = data.id as string;\r\n this.root.loadFromData(this.model, data.root);\r\n\r\n if (data.root && data.root.conds) {\r\n for(let i = 0; i < data.root.conds.length; i++) {\r\n const condData = data.root.conds[i];\r\n if (condData.conds && !this.isEx()) {\r\n console.error(\"Community version doesn't support working with groups.\");\r\n continue;\r\n }\r\n\r\n const cond = this.createCondition();\r\n cond.loadFromData(this.model, condData);\r\n this.root.addCondition(cond);\r\n }\r\n }\r\n\r\n this.name = data.name as string;\r\n this.description = data.desc as string;\r\n this.justsorted = [];\r\n \r\n if (data.justsortcols) {\r\n for (let i = 0; i < data.justsortcols.length; i++) {\r\n let newCol = this.createColumn(true);\r\n newCol.loadFromData(this.model, data.justsortcols[i]);\r\n this.justsorted.push(newCol);\r\n }\r\n }\r\n\r\n if (data.cols) {\r\n for (let i = 0; i < data.cols.length; i++) {\r\n let newCol = this.createColumn();\r\n newCol.loadFromData(this.model, data.cols[i]);\r\n this.columns.push(newCol);\r\n }\r\n }\r\n\r\n if (data.extraData) {\r\n this.extraData = data.extraData;\r\n }\r\n\r\n this.innerData = data.innerData || this.innerData;\r\n if (this.innerData && this.innerData.aggr) {\r\n this._enableAggregation = this.innerData.aggr.enabled || false;\r\n this.useAggregation(settings => {\r\n settings.loadFromData(this.innerData.aggr);\r\n }, true); \r\n }\r\n\r\n if (data.dds && data.dds.length) {\r\n for(let dd of data.dds) {\r\n const query = this.addDrillDown();\r\n query.loadFromData(dd);\r\n }\r\n }\r\n }\r\n noErrors = true;\r\n\r\n if (noErrors) {\r\n if (options.changeStatus) {\r\n this.isNewbie = false;\r\n this._isModified = false;\r\n } \r\n }\r\n\r\n if (options.validate) {\r\n this.validate();\r\n }\r\n }\r\n\r\n /**\r\n * \r\n */\r\n public addDrillDown(): Query {\r\n const query = this.model.createQuery();\r\n query.parentQuery = this;\r\n this.drillDowns.push(query);\r\n return query;\r\n }\r\n\r\n public getDrillDowns(): Array<Query> {\r\n return this.drillDowns;\r\n }\r\n\r\n public getParentQuery(): Query | null {\r\n return this.parentQuery;\r\n }\r\n\r\n /**\r\n * \r\n */\r\n public findColumnById(colId: string) : QueryColumn | null {\r\n for(let col of this.columns) {\r\n if (col.id === colId)\r\n return col;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets DataModel object associated with this query.\r\n * @retruns The data model.\r\n */\r\n public getModel(): DataModel {\r\n return this.model;\r\n }\r\n\r\n /**\r\n * Sets DataModel object associated with this query.\r\n * @param model The data model.\r\n */\r\n public setModel(model : DataModel) {\r\n this.model = model;\r\n }\r\n\r\n /**\r\n * Loads data model.\r\n * @param model JSON representation object or JSON string.\r\n */\r\n public loadModelData(model: ModelPlainData | string) {\r\n this.model.setData(model);\r\n }\r\n\r\n /**\r\n * Returns JSON representation of this query.\r\n * @retruns JSON string.\r\n */\r\n public toJSON(): string {\r\n return JSON.stringify(this.toJSONData());\r\n }\r\n\r\n /**\r\n * Returns JSON representation of this query.\r\n * @retruns JSON representation object.\r\n */\r\n public toJSONData(): QueryData {\r\n let obj: any = {\r\n modelId: this.model ? this.model.getId() : null,\r\n modelName: this.model ? this.model.getName() : null\r\n };\r\n\r\n obj.id = this.id;\r\n obj.name = this.name;\r\n if (this.description) {\r\n obj.desc = this.description;\r\n }\r\n obj.cols = [];\r\n for (let i = 0; i < this.columns.length; i++) {\r\n obj.cols.push(this.columns[i].saveToData());\r\n }\r\n\r\n obj.justsortcols = [];\r\n for (let i = 0; i < this.justsorted.length; i++) {\r\n obj.justsortcols.push(this.justsorted[i].saveToData());\r\n }\r\n\r\n if (this.extraData) {\r\n obj.extraData = this.extraData;\r\n }\r\n\r\n if (this.innerData) {\r\n obj.innerData = this.innerData;\r\n obj.innerData.aggr = this.aggrSettings.saveToData();\r\n obj.innerData.aggr.enabled = this._enableAggregation;\r\n }\r\n\r\n const rootCondToData = (condGroup: Condition) => {\r\n const result = condGroup.saveToData();\r\n result.conds = [];\r\n\r\n const conditions = condGroup.getConditions();\r\n for(let i = 0; i < conditions.length; i++) {\r\n if (conditions[i].isGroup() && !this.isEx()) {\r\n console.error(\"Community version doesn't support working with groups.\");\r\n continue;\r\n }\r\n \r\n result.conds.push(conditions[i].saveToData());\r\n }\r\n\r\n return result;\r\n };\r\n\r\n obj.root = rootCondToData(this.root);\r\n obj.extraConds = rootCondToData(this.extraConditions);\r\n\r\n if (this.drillDowns.length > 0) {\r\n obj.dds = [];\r\n for(let dd of this.drillDowns) {\r\n obj.dds.push(dd.toJSONData());\r\n }\r\n }\r\n\r\n obj.timezoneOffset = this.timezoneOffset;\r\n obj.locale = i18n.getCurrentLocale();\r\n \r\n return obj;\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any condtion.\r\n * @retruns `true` if query does not contain any condition, otherwise `false`.\r\n */\r\n public isEmptyConditions(): boolean {\r\n return this.root.isEmpty();\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any column.\r\n * @retruns `true` if query does not contain any column, otherwise `false`.\r\n */\r\n public isEmptyColumns(): boolean {\r\n return !this.columns || this.columns.length === 0;\r\n }\r\n\r\n /**\r\n * Checks wether query does not contains any column and any condition.\r\n * @retruns `true` if query does not contain any column and any condition, otherwise `false`.\r\n */\r\n public isEmpty(): boolean {\r\n return this.isEmptyColumns() && this.isEmptyConditions();\r\n }\r\n\r\n /**\r\n * Clears the query (all conditions, columns, extraData, etc).\r\n */\r\n public clear() {\r\n this._enableAggregation = false;\r\n this.aggrSettings.clear();\r\n\r\n this.clearColumns();\r\n this.clearConditions();\r\n this.clearExtraConditions();\r\n this.innerData = {};\r\n this.extraData = {};\r\n }\r\n\r\n /**\r\n * Clears all columns in query\r\n */\r\n public clearColumns() {\r\n this.columns = [];\r\n this.justsorted = []; \r\n }\r\n\r\n /**\r\n * Clears all conditions in query.\r\n */\r\n public clearConditions() {\r\n this.root.clearConditions();\r\n this.root.linkType = LinkType.All;\r\n this.root.enabled = true; \r\n }\r\n\r\n /**\r\n * Clears all extra conditions in query\r\n */\r\n public clearExtraConditions() {\r\n this.extraConditions.clearConditions();\r\n }\r\n\r\n /**\r\n * Clears all drill downs\r\n */\r\n public clearDrillDowns() {\r\n this.drillDowns = [];\r\n }\r\n\r\n /**\r\n * Gets query ID.\r\n * @returns The ID>\r\n */\r\n public getId(): string {\r\n return this.id;\r\n }\r\n\r\n /**\r\n * Sets query ID.\r\n * @param id New Query ID.\r\n */\r\n public setId(id : string) {\r\n this.id = id;\r\n }\r\n\r\n /**\r\n * Regenerates current query ID.\r\n * @param id New Query ID.\r\n */\r\n public regenerateId() {\r\n this.id = dataUtils.generateId(\"quer\");\r\n }\r\n\r\n /**\r\n * Gets name of the query.\r\n * @retruns The name.\r\n */\r\n public getName(): string {\r\n return this.name;\r\n }\r\n\r\n /**\r\n * Sets name of the query\r\n * @param name New name.\r\n */\r\n public setName(name: string) {\r\n this.name = name;\r\n }\r\n\r\n /**\r\n * Gets description of the query.\r\n * @retruns The description.\r\n */\r\n public getDescription(): string {\r\n return this.description;\r\n }\r\n\r\n /**\r\n * Sets description of the query\r\n * @param description New description.\r\n */\r\n public setDescription(description: string) {\r\n this.description = description;\r\n }\r\n\r\n /**\r\n * Get array of columns.\r\n * @retruns Columns.\r\n */\r\n public getColumns(): QueryColumn[] {\r\n return this.columns;\r\n }\r\n\r\n /**\r\n * Gets array of columns that are used as keys \r\n * for totals.\r\n */\r\n public getUsedInTotalsColumns() {\r\n const aggrs = this.getAggregatedColumns();\r\n if (aggrs.length === 0)\r\n return [];\r\n\r\n const cols = this.getColumns()\r\n .filter(col => col.enabled && col.expr.tag === ExprTag.EntityAttribute);\r\n if(cols.length)\r\n cols.pop();\r\n\r\n return cols;\r\n }\r\n\r\n /**\r\n * Get array of columns used only in sorting.\r\n * @retruns Columns.\r\n */\r\n public getJustSortedColumns(): QueryColumn[] {\r\n return this.justsorted;\r\n }\r\n\r\n /**\r\n * Gets array of columns used in sorting\r\n * @retruns Columns\r\n */\r\n public getSortedColumns(): QueryColumn[] {\r\n let sortedCols = new Array<QueryColumn>();\r\n\r\n let cols = this.getColumns()\r\n .concat(this.getJustSortedColumns());\r\n \r\n for(let i = 0; i <cols.length; i++) {\r\n let col = cols[i];\r\n if (col.sortIndex >= 0) {\r\n sortedCols.push(col);\r\n }\r\n }\r\n\r\n sortedCols.sort((col1: QueryColumn, col2 : QueryColumn): number => {\r\n return col1.sortIndex - col2.sortIndex;\r\n });\r\n\r\n return sortedCols;\r\n }\r\n\r\n /**\r\n * Gets Colummn sorting index.\r\n * @param col The column.\r\n * @retruns The index.\r\n */\r\n public getColumnSortIndex(col: QueryColumn): number{\r\n if(col.sorting != SortDirection.None) {\r\n if (col.sortIndex < 0) {\r\n var cols = this.getColumns()\r\n .concat(this.getJustSortedColumns());\r\n return dataUtils.indexOfArrayItem(cols, col);\r\n }\r\n else {\r\n return col.sortIndex;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n public createColumn(justsorted = false) : QueryColumn {\r\n return new QueryColumn(this, justsorted);\r\n }\r\n\r\n public getColumnById(id: string): QueryColumn {\r\n return dataUtils.findItemById(this.columns, id);\r\n }\r\n\r\n /**\r\n * Adds a new column with specified parameters\r\n * @param desriptor The descriptor of the new column. Can contain different parameters like: \r\n * `attribute` - a reference to a EntityAttr object, \r\n * `attributeId` - an ID of the entity attribute we need (if we don't indicate `attribute`),\r\n * `index`, sorting`, 'sortIndex` and other \r\n * \r\n * @param author The author of this operation. This parameter is used in EasyQuery widgets only to indicate which of the initiates the change.\r\n * @retruns The column.\r\n * @example \r\n * query.addColumn({\r\n * attributeId: 'Customers.CompanyName',\r\n * sortIndex: SortDirection.Ascending \r\n * }});\r\n */\r\n public addColumn(descriptor: ColumnDescriptor, author?: string): QueryColumn { \r\n let columns = (descriptor.justsorted) \r\n ? this.justsorted \r\n : this.columns;\r\n\r\n let newColumn: QueryColumn;\r\n\r\n if (descriptor.column) {\r\n newColumn = descriptor.column;\r\n }\r\n else {\r\n newColumn = this.createColumn(descriptor.justsorted);\r\n\r\n let attr: EntityAttr;\r\n\r\n if (descriptor.attribute) {\r\n attr = descriptor.attribute\r\n }\r\n else if (descriptor.attributeId) {\r\n attr = this.model.getAttributeById(descriptor.attributeId);\r\n if (!attr) {\r\n throw new Error(`Incorrect attribute id (${descriptor.attributeId}): addColumn`);\r\n }\r\n }\r\n else {\r\n throw new Error(\"Not enought data: addColumn\");\r\n }\r\n if (descriptor.aggrFuncId && descriptor.cusomtSql) {\r\n console.warn(\"Column cannot be created using aggrFuncId and customSql at the same time. \"+\r\n \"cusomSql will be used.\");\r\n }\r\n\r\n if (descriptor.cusomtSql) {\r\n newColumn.caption = 'Custom SQL Column';\r\n newColumn.expr.tag = ExprTag.CustomSql;\r\n newColumn.expr.baseAttrId = attr.id;\r\n newColumn.expr.sql = descriptor.cusomtSql;\r\n newColumn.expr.kind = DataKind.Query;\r\n newColumn.expr.dataType = DataType.Unknown;\r\n }\r\n else if (descriptor.aggrFuncId) {\r\n const funcId = descriptor.aggrFuncId;\r\n newColumn.caption = attr.caption + ' ' \r\n + this.model.getAggrFunctionCaption(descriptor.aggrFuncId);\r\n newColumn.expr.tag = ExprTag.AggregateFunction;\r\n newColumn.expr.func = descriptor.aggrFuncId;\r\n newColumn.expr.kind = DataKind.Scalar;\r\n newColumn.expr.dataType = funcId == 'COUNT' || funcId == 'CNTDST' ? 4 : attr.dataType; \r\n newColumn.expr.distinct = false;\r\n\r\n const arg = new Expression(newColumn);\r\n arg.setValue(attr.id, true);\r\n arg.tag = ExprTag.EntityAttribute;\r\n arg.dataType = attr.dataType;\r\n newColumn.expr.args.push(arg); \r\n }\r\n else {\r\n newColumn.caption = attr.caption;\r\n newColumn.expr.setValue(attr.id, true);\r\n newColumn.expr.tag = ExprTag.EntityAttribute;\r\n newColumn.expr.dataType = attr.dataType;\r\n }\r\n \r\n newColumn.caption = descriptor.caption || newColumn.caption;\r\n newColumn.sorting = descriptor.sorting || SortDirection.None;\r\n newColumn.sortIndex = descriptor.sortIndex || -1;\r\n newColumn.enabled = dataUtils.getIfDefined(descriptor.enabled, true);\r\n newColumn.setReadOnly(dataUtils.getIfDefined(descriptor.readonly, false));\r\n }\r\n\r\n \r\n if (descriptor.index && descriptor.index >= 0 && descriptor.index < columns.length) {\r\n columns.splice(descriptor.index, 0, newColumn);\r\n } \r\n else {\r\n columns.push(newColumn);\r\n }\r\n\r\n return newColumn;\r\n }\r\n\r\n\r\n /**\r\n * Adds a new column with specified index.\r\n * @param column The column or array of columns\r\n * @param index The index of new column\r\n * @param author The author.\r\n * @example \r\n * const column = new Column();\r\n * column.caption = \"Company name\";\r\n * \r\n * query.addColumn(column, 1)\r\n */\r\n public addColumnObj(column: QueryColumn | QueryColumn[], index: any, author: any) {\r\n let columns = this.columns;\r\n\r\n if (typeof (<QueryColumn[]>column).length == \"undefined\") {\r\n if (typeof index == \"number\") {\r\n columns.splice(index, 0, column as QueryColumn);\r\n } else {\r\n columns.push(column as QueryColumn);\r\n }\r\n }\r\n else {\r\n if (typeof index == \"number\") {\r\n (columns as any).push.apply(columns, [index, 0].concat(column as any));\r\n }\r\n else {\r\n columns.push.apply(columns, [].concat(column as QueryColumn[]));\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * Changes column to Aggregate function, custom expression or simple column.\r\n * @param column The column to change.\r\n * @param tag New column expression tag.\r\n * @param args The arguments (Contains aggregate function id)\r\n */\r\n public changeColumnType(column: QueryColumn, tag: ExprTag, args?: any) {\r\n if (column.isJustSorted())\r\n return;\r\n\r\n args = args || {};\r\n column.caption = (typeof args.caption !== 'undefined') \r\n ? args.caption\r\n : '';\r\n\r\n if (tag === ExprTag.AggregateFunction) {\r\n if (!args.funcId)\r\n throw Error('\"funcId\" argument is not defined');\r\n\r\n if (column.expr.tag == ExprTag.AggregateFunction) {\r\n column.expr.func = args.funcId;\r\n return;\r\n }\r\n\r\n const expr = new Expression(column);\r\n expr.tag = ExprTag.AggregateFunction;\r\n expr.func = args.funcId;\r\n expr.distinct = false;\r\n expr.dataType = args.funcId == 'COUNT' || args.funcId == 'CNTDST' ? 4 : column.expr.dataType; \r\n\r\n const arg = new Expression(column);\r\n arg.loadFromData(this.model, column.expr.saveToData());\r\n\r\n expr.args.push(arg);\r\n\r\n column.expr = expr;\r\n }\r\n else if (tag === ExprTag.CustomSql) {\r\n const attrId = \r\n (column.expr.tag == ExprTag.AggregateFunction) \r\n ? column.expr.args[0].value\r\n : column.expr.value;\r\n\r\n let sqlText = '';\r\n if (this.model) {\r\n sqlText = this.model.getAttributeById(attrId).expr;\r\n }\r\n\r\n const customSqlExpr = new Expression(column);\r\n customSqlExpr.tag = ExprTag.CustomSql;\r\n customSqlExpr.dataType = DataType.String; //the default data type\r\n customSqlExpr.sql = sqlText;\r\n customSqlExpr.baseAttrId = attrId;\r\n column.expr = customSqlExpr; \r\n } \r\n else if (tag === ExprTag.EntityAttribute) {\r\n if (column.expr.tag === ExprTag.EntityAttribute\r\n || column.expr.tag === ExprTag.ParentEntityAttribute) {\r\n return;\r\n }\r\n\r\n const exprId = (column.expr.tag === ExprTag.CustomSql) \r\n ? column.expr.baseAttrId\r\n : column.expr.args[0].value;\r\n\r\n const attr = this.model.getAttributeById(exprId); \r\n \r\n const expr = new Expression(column);\r\n expr.tag = ExprTag.EntityAttribute;\r\n expr.dataType = attr != null ? attr.dataType : DataType.Unknown;\r\n expr.setValue(exprId, true);\r\n column.expr = expr;\r\n }\r\n }\r\n\r\n /**\r\n * Moves the column with specified index to another position.\r\n * @param index1 The index of the column that should be moved.\r\n * @param index2 The index of the position the column should be moved to\r\n * @param author The author\r\n */\r\n public moveColumn(index1: number, index2: number) {\r\n const columns = this.getColumns();\r\n dataUtils.moveArrayItem(columns, index1, index2); \r\n }\r\n\r\n /**\r\n * Removes the column.\r\n * @param column The column to be removed.\r\n * @param author The author\r\n */\r\n public removeColumn(column: QueryColumn, author: any) {\r\n \r\n const columns = (column.isJustSorted()) \r\n ? this.getJustSortedColumns()\r\n : this.getColumns();\r\n\r\n dataUtils.removeArrayItem(columns, column);\r\n }\r\n\r\n /**\r\n * Adds a condition group - a group of simple conditions (predicates) linked by AND or OR\r\n * @param descriptor The descriptor of the new condition group.\r\n * @returns The new search condition.\r\n */\r\n public addConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n console.error(\"Community version doesn't support working with groups.\");\r\n return null;\r\n }\r\n\r\n public addExtraConditionGroup(descriptor: ConditionGroupDescriptor, addChildCondition: boolean = true): Condition { \r\n console.error(\"Community version doesn't support working with groups.\");\r\n return null;\r\n }\r\n\r\n public createCondition(tag = CondTag.Simple): Condition {\r\n return new Condition(this, tag);\r\n }\r\n\r\n\r\n /**\r\n * Adds a new simple condition (a predicate)\r\n * @param descriptor The descriptor which defines different parameters of the new condition\r\n * @returns The new condition.\r\n */\r\n public addSimpleCondition (descriptor : SimpleConditionDescriptor): Condition {\r\n let parent = descriptor.parent as Condition || this.getRootCondition();\r\n\r\n let model = this.getModel();\r\n if (!model) return null;\r\n\r\n if (!descriptor.attribute && !descriptor.attributeId) {\r\n throw new Error(\"Either `attribute` or `attributeId` parameter must have a value\");\r\n }\r\n\r\n if (!descriptor.attribute) {\r\n descriptor.attribute = model.getAttributeById(descriptor.attributeId);\r\n if (!descriptor.attribute) {\r\n throw new Error(\"Could not find this attribute: \" + descriptor.attributeId);\r\n }\r\n }\r\n\r\n if (!descriptor.operator && descriptor.operatorId) {\r\n descriptor.operator = model.getOperatorById(descriptor.operatorId);\r\n }\r\n\r\n if (!descriptor.operator) {\r\n descriptor.operator = model.getDefaultOperatorForAttr(descriptor.attribute);\r\n }\r\n\r\n let cond = this.createSimpleConditionObject(descriptor.attribute, descriptor.operator, descriptor.value);\r\n parent.addCondition(cond);\r\n\r\n cond.enabled = dataUtils.getIfDefined(descriptor.enabled, true);\r\n cond.setReadOnly(dataUtils.getIfDefined(descriptor.readonly, false))\r\n \r\n return cond; \r\n }\r\n\r\n public addSimpleExtraCondition(descriptor : SimpleConditionDescriptor): Condition {\r\n descriptor.parent = descriptor.parent || this.extraConditions;\r\n return this.addSimpleCondition(descriptor);\r\n }\r\n\r\n protected createSimpleConditionObject(attr: EntityAttr, operator: Operator, inputValues: string | Array<string>): Condition {\r\n if (!attr || !attr.useInConditions) {\r\n let attrCaption = attr ? attr.caption : 'NULL';\r\n throw \"Can't add a condition with such attribute: \" + attrCaption;\r\n }\r\n\r\n let cond = this.createCondition(CondTag.Simple);\r\n cond.setOperatorId(operator.id, true);\r\n\r\n let attrExpr = new Expression(cond);\r\n\r\n attrExpr.setValue(attr.id, true);\r\n attrExpr.tag = this.attributeExprTag;\r\n attrExpr.kind = DataKind.Attribute;\r\n attrExpr.dataType = attr.dataType;\r\n\r\n cond.expressions.push(attrExpr);\r\n \r\n let model = this.getModel();\r\n\r\n const valCount = operator.paramCount;\r\n let values = dataUtils.fillArray(new Array(valCount - 1), null);\r\n\r\n if (inputValues !== null && typeof inputValues !== \"undefined\") {\r\n if (Array.isArray(inputValues)) {\r\n dataUtils.copyArrayTo(inputValues, values);\r\n }\r\n else if (valCount > 0 ) {\r\n values[0] = inputValues; \r\n }\r\n }\r\n\r\n var valLength = values.length;\r\n for (var i = 0; i < valLength; i++) {\r\n let operand = model.getOperand(attr, operator, i + 1);\r\n cond.addExpressionByOperand(operand, values[i]);\r\n }\r\n return cond;\r\n }\r\n\r\n /**\r\n * Removes several columns passed as array.\r\n * @param columnsToRemove The list of columns to be removed.\r\n * @param author The author.\r\n */\r\n public removeColumns(columnsToRemove: QueryColumn[], author: any) {\r\n\r\n let justSortedColumns = columnsToRemove.filter(c => c.isJustSorted());\r\n let columns = columnsToRemove.filter(c => !c.isJustSorted());\r\n\r\n function removeFromArray(arr, arrToRemove) {\r\n\r\n let ctrLen = arrToRemove.length;\r\n for (let i = 0; i < ctrLen; i++) {\r\n let index = arr.indexOf(arrToRemove[i]);\r\n if (index >= 0) {\r\n arr.splice(index, 1);\r\n }\r\n } \r\n\r\n }\r\n\r\n if (columns.length > 0) {\r\n removeFromArray(this.getColumns(), columns);\r\n }\r\n\r\n if (justSortedColumns.length > 0) {\r\n removeFromArray(this.getJustSortedColumns(), justSortedColumns);\r\n }\r\n\r\n } \r\n\r\n /**\r\n * Fires process event.\r\n * @param data The data.\r\n */\r\n public fireProcessEvent(data: any) {\r\n this.eventEmitter.fire('query.process', data);\r\n }\r\n\r\n /**\r\n * Fires a QueryChanged event.\r\n * @param params The event parameters.\r\n */\r\n fireChangedEvent(params?: QueryChangeEventParams) \r\n /**\r\n * \r\n * @param params \r\n * @param postpone \r\n * @param wasModified \r\n * @deprecated Method with 'postpone\\' and \\'wasModified\\' args is deprecated. Pass args in params object\r\n */\r\n fireChangedEvent(params?: QueryChangeEventParams, postpone?: number, wasModified?: boolean) \r\n public fireChangedEvent(params?: QueryChangeEventParams, postpone?: number, wasModified?: boolean) {\r\n params = params || { part: QueryChangePart.All };\r\n if (typeof(postpone) != 'undefined' || typeof(wasModified) != 'undefined') {\r\n params.postpone = postpone || 0;\r\n params.wasModified = wasModified;\r\n console.warn('Method with \\'postpone\\' and \\'wasModified\\' args is deprecated. Pass params in data object')\r\n }\r\n\r\n this._isModified = typeof (params.wasModified) != 'undefined'\r\n ? params.wasModified\r\n : true;\r\n\r\n const eventData = params || {\r\n part: QueryChangePart.All \r\n };\r\n \r\n this.eventEmitter.fire('query.change', eventData, params.postpone || 0);\r\n }\r\n\r\n public fireColumnsChangedEvent(action?: QueryChangeAction, column? : QueryColumn | QueryColumn[], justsorted = false){\r\n this.fireChangedEvent({\r\n part: (justsorted) \r\n ? QueryChangePart.SortingColumns\r\n :QueryChangePart.Columns,\r\n action: action,\r\n changee: column\r\n });\r\n }\r\n\r\n public fireConditionsChangedEvent(action?: QueryChangeAction, condition? : Condition | Condition[]){\r\n this.fireChangedEvent({\r\n part: QueryChangePart.Conditions,\r\n action: action,\r\n changee: condition\r\n });\r\n }\r\n\r\n /**\r\n * Runs through condition with this callback.\r\n * @param processCondition The function to process condition.\r\n */\r\n public runThroughConditions(processCondition: (cond: Condition) => void) {\r\n let processGroup = function (predicate: Condition) {\r\n\r\n for (let i = 0; i < predicate.getConditions().length; i++) {\r\n let cond = predicate.getConditions()[i];\r\n if (cond.isGroup()) {\r\n processGroup(cond);\r\n }\r\n else {\r\n if (processCondition)\r\n processCondition(cond);\r\n }\r\n }\r\n };\r\n\r\n processGroup(this.getRootCondition());\r\n }\r\n\r\n /**\r\n * Gets one value for the attribute\r\n * @param attrId The attribute ID.\r\n * @retruns The value.\r\n */\r\n public getOneValueForAttr(attrId: string): string {\r\n let res = null;\r\n this.runThroughConditions(function (cond) {\r\n if (cond.enabled) {\r\n const expr = cond.expressions[0];\r\n const opid = cond.getOperatorId();\r\n if (expr.value == attrId && cond.expressions[1] &&\r\n (opid == \"Equal\" || opid == \"InList\" || opid == \"StartsWith\")) \r\n {\r\n res = cond.expressions[1].value;\r\n }\r\n }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * Gets root predicate\r\n * @retruns The condition.\r\n */\r\n public getRootCondition(): Condition {\r\n return this.root;\r\n }\r\n\r\n /**\r\n * Add process callback\r\n * @param callback The callback.\r\n * @retruns The callback ID.\r\n */\r\n public addProcessCallback(callback: (event: EqEvent) => void): string {\r\n return this.eventEmitter.subscribe('query.process', callback);\r\n }\r\n\r\n /**\r\n * Remove process callback\r\n * @param callbackId The callback ID.\r\n */\r\n public removeProcessCallback(callbackId: string) {\r\n this.eventEmitter.unsubscribe('query.process', callbackId);\r\n }\r\n\r\n /**\r\n * Add changed callback\r\n * @param callback The callback ID.\r\n */\r\n public addChangedCallback(callback: (event: EqEvent) => void): string {\r\n return this.eventEmitter.subscribe('query.change', callback);\r\n }\r\n\r\n /**\r\n * Remove changed callback\r\n * @param callbackId The callback ID.\r\n */\r\n public removeChangedCallback(callbackId: string) {\r\n this.eventEmitter.unsubscribe('query.change', callbackId); \r\n }\r\n\r\n /**\r\n * Retruns conditions text\r\n */\r\n public getConditionsText() {\r\n const model = this.getModel();\r\n if (!model) return '';\r\n\r\n const getConditionGroupText = (group : Condition) => {\r\n let result = '',\r\n conjKey = \"Conj\" + equtils.linkTypeToStr(group.linkType),\r\n conjText = i18n.getText(conjKey),\r\n condText,\r\n i;\r\n\r\n for (i = 0; i < group.getConditions().length; i++) {\r\n condText = \"\";\r\n let cond = group.getConditions()[i];\r\n if (cond.enabled || typeof(cond.enabled) === \"undefined\" ) {\r\n if (cond.isGroup()) {\r\n condText = getConditionGroupText(cond);\r\n if (condText) {\r\n condText = \"(\" + condText + \")\";\r\n }\r\n }\r\n else {\r\n let opId = cond.getOperatorId();\r\n let operator = model.getOperatorById(opId);\r\n let parts = equtils.parseOperatorFormat(operator);\r\n let plen = parts.length;\r\n\r\n for (let pi = 0; pi < plen; pi++) {\r\n let part = parts[pi];\r\n let txt = part.text;\r\n if (part.type == \"expression\") {\r\n let expr = cond.expressions[part.index];\r\n if (expr.kind == DataKind.Attribute || expr.tag == ExprTag.EntityAttribute) {\r\n let attr = model.getAttributeById(expr.value);\r\n txt = model.getAttributeText(attr, \"{entity} {attr}\");\r\n }\r\n else {\r\n txt = expr.getText();\r\n if (this.model.isDateMacro(txt) || this.model.isTimeMacro(txt)) {\r\n const macroText = txt.substring(3, txt.length - 2);\r\n const res = i18n.getText(macroText);\r\n txt = res || txt;\r\n }\r\n }\r\n }\r\n if (pi > 0) condText += \" \";\r\n condText += txt;\r\n }\r\n }\r\n }\r\n\r\n if (condText) {\r\n if (i > 0 && result) {\r\n result += \" \" + conjText + \" \";\r\n }\r\n result += condText;\r\n }\r\n }\r\n\r\n if (group.linkType == LinkType.None || group.linkType == LinkType.NotAll) {\r\n result = \"not ( \" + result + \" )\";\r\n }\r\n \r\n return result;\r\n };\r\n return getConditionGroupText(this.getRootCondition());\r\n }\r\n\r\n /**\r\n * Retruns conditions text\r\n */\r\n public getConditionsTextAsHtml() {\r\n const model = this.getModel();\r\n if (!model) return '<div class=\"eqjs-query-text\"></div>';\r\n\r\n const quoteExprText = (expr : Expression): string => {\r\n if (expr.kind == DataKind.Query) {\r\n return `<${expr.getText()}>`;\r\n }\r\n else if (expr.kind == DataKind.List ) {\r\n return `[${expr.getText()}]`;\r\n }\r\n else if (expr.dataType == DataType.String \r\n || expr.dataType == DataType.Memo \r\n || expr.dataType == DataType.FixedChar) {\r\n return `"${expr.getText()}"`;\r\n }\r\n else {\r\n let txt = expr.getText();\r\n if (this.model.isDateMacro(txt) || this.model.isTimeMacro(txt)) {\r\n const macroText = txt.substring(3, txt.length - 2);\r\n const res = i18n.getText(macroText);\r\n txt = res || txt;\r\n }\r\n return txt;\r\n }\r\n\r\n }\r\n\r\n const getConditionGroupText = (group: Condition) => {\r\n let result = '',\r\n conjKey = \"Conj\" + equtils.linkTypeToStr(group.linkType),\r\n conjText = `<span class=\"eqjs-query-text-conj\">${i18n.getText(conjKey)}</span>`,\r\n condText,\r\n i;\r\n\r\n for (i = 0; i < group.getConditions().length; i++) {\r\n condText = \"\";\r\n let cond = group.getConditions()[i];\r\n if (cond.enabled || typeof (cond.enabled) === \"undefined\") {\r\n if (cond.isGroup()) {\r\n condText = getConditionGroupText(cond);\r\n if (condText) {\r\n condText = \"(\" + condText + \")\";\r\n }\r\n }\r\n else {\r\n let opId = cond.getOperatorId();\r\n let operator = model.getOperatorById(opId);\r\n let parts = equtils.parseOperatorFormat(operator);\r\n let plen = parts.length;\r\n\r\n for (let pi = 0; pi < plen; pi++) {\r\n let part = parts[pi];\r\n let txt = part.text;\r\n if (part.type == \"expression\") {\r\n let expr = cond.expressions[part.index];\r\n if (expr.kind == DataKind.Attribute || expr.tag == ExprTag.EntityAttribute) {\r\n let attr = model.getAttributeById(expr.value);\r\n txt = `<span class=\"eqjs-query-text-attr\">${model.getAttributeText(attr, \"{entity} {attr}\")}</span>`;\r\n }\r\n else {\r\n txt = `<span class=\"eqjs-query-text-expr\">${quoteExprText(expr)}</span>`;\r\n }\r\n }\r\n else if (part.type == \"operator\") {\r\n txt = `<span class=\"eqjs-query-text-op\">${txt}</span>`;\r\n }\r\n if (pi > 0) condText += \" \";\r\n condText += txt;\r\n }\r\n }\r\n }\r\n\r\n if (condText) {\r\n if (i > 0 && result) {\r\n result += \" \" + conjText + \" \";\r\n }\r\n result += condText;\r\n }\r\n }\r\n\r\n if (group.linkType == LinkType.None || group.linkType == LinkType.NotAll) {\r\n result = \"<span class=\\\"eqjs-query-text-conj\\\">not</span> ( \" + result + \" )\";\r\n }\r\n\r\n return result;\r\n };\r\n return `<div class=\"eqjs-query-text\">${getConditionGroupText(this.getRootCondition())}</div>`;\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\nimport { Query } from '../query/query';\r\nimport { QueryData } from '../query/dto/query_data';\r\n\r\nimport { EqContext } from './context';\r\n\r\nexport interface QueryListItem {\r\n id: string;\r\n name: string;\r\n text?: string;\r\n}\r\n\r\nexport interface BrowserQueryStorageOptions {\r\n keyPrefix?: string;\r\n}\r\n\r\nexport interface GetQueryListOptions {\r\n modelId?: string;\r\n}\r\n\r\nexport interface NewQueryOptions {\r\n queryId?: string;\r\n name?: string;\r\n modelId?: string;\r\n query?: Query;\r\n description?: string;\r\n data?: any;\r\n}\r\n\r\nexport interface LoadQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n}\r\n\r\nexport interface SaveQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n query?: Query;\r\n data?: any;\r\n}\r\n\r\nexport interface RemoveQueryOptions {\r\n modelId?: string;\r\n queryId?: string;\r\n data?: any;\r\n}\r\n\r\nexport interface QueryStorage {\r\n init(options?);\r\n getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]>;\r\n newQuery(options?: NewQueryOptions): Promise<QueryData>;\r\n loadQuery(options?: LoadQueryOptions): Promise<QueryData>;\r\n saveQuery(options?: SaveQueryOptions): Promise<QueryData>;\r\n removeQuery(options?: RemoveQueryOptions): Promise<void>;\r\n}\r\n\r\nexport class BrowserQueryStorage implements QueryStorage {\r\n private queryListKey;\r\n private queryKeyPrefix;\r\n\r\n constructor(protected context: EqContext) {\r\n console.warn('BrowserQueryStorage is used for managing queries');\r\n }\r\n\r\n public init(options?: BrowserQueryStorageOptions) {\r\n let keyPrefix = 'eq';\r\n\r\n if (options && options.keyPrefix) {\r\n keyPrefix = options.keyPrefix;\r\n }\r\n\r\n this.queryListKey = keyPrefix + '-querylist'\r\n this.queryKeyPrefix = keyPrefix;\r\n }\r\n\r\n public getQueryList(options?: GetQueryListOptions): Promise<QueryListItem[]> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n resolve(JSON.parse(itemsString));\r\n }\r\n\r\n resolve([]);\r\n } \r\n catch (err) {\r\n reject(err);\r\n };\r\n \r\n });\r\n }\r\n\r\n public newQuery(options?: NewQueryOptions): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const query = new Query(this.context.getModel());\r\n query.reset();\r\n query.setDefaultName();\r\n if (options) {\r\n if (options.query) {\r\n query.loadFromData(options.query.toJSONData());\r\n }\r\n\r\n if (options.queryId) {\r\n query.setId(options.queryId);\r\n }\r\n\r\n if (options.name) {\r\n query.setName(options.name);\r\n }\r\n \r\n if (options.description) {\r\n query.setDescription(options.description);\r\n } \r\n }\r\n\r\n this._saveQuery(query);\r\n resolve(query.toJSONData());\r\n });\r\n }\r\n\r\n public loadQuery(options?: LoadQueryOptions): Promise<QueryData> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const queryItem = localStorage.getItem(this.queryKeyPrefix + '-' + options.queryId);\r\n if (queryItem) {\r\n resolve(JSON.parse(queryItem));\r\n }\r\n\r\n throw new Error('Query is not found: ' + options.queryId);\r\n } \r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n public saveQuery(options?: SaveQueryOptions): Promise<QueryData> {\r\n return new Promise<QueryData>((resolve, reject) => {\r\n try {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n const query = options.query || this.context.getQuery();\r\n this._saveQuery(query);\r\n resolve(null);\r\n } \r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n\r\n private _saveQuery(query: Query) {\r\n let queryList: QueryListItem[] = []\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n queryList = JSON.parse(itemsString);\r\n }\r\n\r\n let item = dataUtils.findItemById(queryList, query.getId());\r\n if (!item) {\r\n item = { id: query.getId(), name: query.getName(), text: query.getDescription() };\r\n queryList.push(item);\r\n }\r\n item.name = query.getName();\r\n item.text = query.getDescription();\r\n\r\n localStorage.setItem(this.queryListKey, JSON.stringify(queryList));\r\n localStorage.setItem(this.queryKeyPrefix + '-' + query.getId(), query.toJSON());\r\n }\r\n\r\n public removeQuery(options?: RemoveQueryOptions): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n const queryId = options.queryId || this.context.getQuery().getId();\r\n\r\n let queryList: QueryListItem[] = []\r\n const itemsString = localStorage.getItem(this.queryListKey);\r\n if (itemsString) {\r\n queryList = JSON.parse(itemsString);\r\n }\r\n queryList = queryList.filter(item => item.id != queryId);\r\n\r\n localStorage.setItem(this.queryListKey, JSON.stringify(queryList));\r\n localStorage.removeItem(this.queryKeyPrefix + '-' + queryId);\r\n\r\n resolve();\r\n }\r\n catch (err) {\r\n reject(err);\r\n }\r\n });\r\n }\r\n \r\n}\r\n\r\n","import { ModelPlainData } from '../dm/dto/dm_data';\r\nimport { EqContext } from './context';\r\n\r\nexport interface ModelLoadOptions {\r\n modelId: string;\r\n}\r\n\r\nexport abstract class EqModelLoader {\r\n protected modelPromise: Promise<ModelPlainData> | null = null;\r\n\r\n protected modelLoadingResolveFunc: (value?: ModelPlainData | PromiseLike<ModelPlainData>) => void;\r\n\r\n protected modelLoadingRejectFunc: (reason?: any) => void;\r\n\r\n constructor(protected context: EqContext) {\r\n \r\n }\r\n\r\n public init(options : any) : void {\r\n }\r\n\r\n public getContext() : EqContext {\r\n return this.context;\r\n }\r\n\r\n protected createModelLoadingPromise() : void {\r\n this.modelPromise = new Promise<ModelPlainData>((resolve, reject) => {\r\n this.modelLoadingResolveFunc = resolve;\r\n this.modelLoadingRejectFunc = reject;\r\n });\r\n }\r\n\r\n /**\r\n * Returns the `Promise` of the model loading process \r\n */\r\n public getModelPromise(): Promise<ModelPlainData> {\r\n return this.modelPromise \r\n || Promise.reject(new Error(\"Model has been never loaded.\"));\r\n }\r\n\r\n public startModelLoading(options: ModelLoadOptions): Promise<ModelPlainData> {\r\n this.createModelLoadingPromise();\r\n this.sendLoadModelRequest(options);\r\n return this.modelPromise;\r\n }\r\n\r\n protected abstract sendLoadModelRequest(options);\r\n}","import { EqModelLoader, ModelLoadOptions as LoadModelOptions } from '../main/model_loader';\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EqServerModelLoader extends EqModelLoader {\r\n\r\n constructor(context: EqContext) {\r\n super(context);\r\n }\r\n\r\n public init() {\r\n \r\n }\r\n\r\n protected sendLoadModelRequest(options: LoadModelOptions) {\r\n const context = this.getContext();\r\n\r\n const http = context.getServices().getHttpClient();\r\n const url = context.resolveEndpoint('GetModel', { modelId : options.modelId });\r\n\r\n http.get(url)\r\n .then((responseData) => {\r\n if (!responseData.model) {\r\n this.modelLoadingRejectFunc(new Error('Wrong response format for \"GetModel\" request'));\r\n }\r\n\r\n this.modelLoadingResolveFunc(responseData.model);\r\n })\r\n .catch(error => {\r\n this.modelLoadingRejectFunc(error);\r\n });\r\n }\r\n}\r\n","import { FetchDataOptions, DataFetcher } from '../main/data_fetcher';\r\nimport { EqContext } from '../main/context';\r\nimport { Query } from '../query/query';\r\n\r\nexport class EqServerDataFetcher implements DataFetcher {\r\n constructor(private context: EqContext) {\r\n }\r\n\r\n public fetchData(fetchOptions?: FetchDataOptions): Promise<any> {\r\n const query = fetchOptions.query as Query || this.context.getQuery();\r\n const queryId = query.getId();\r\n\r\n let requestData: any = {\r\n 'options': fetchOptions.options\r\n };\r\n\r\n if (typeof(fetchOptions.queryId) !== 'undefined') {\r\n requestData.queryId = fetchOptions.queryId;\r\n }\r\n else {\r\n requestData.query = query.toJSONData();\r\n }\r\n\r\n if (fetchOptions.debug) {\r\n requestData.debug = fetchOptions.debug;\r\n }\r\n\r\n if (fetchOptions.chunk) {\r\n requestData.chunk = fetchOptions.chunk;\r\n }\r\n\r\n if (fetchOptions.data) {\r\n requestData.data = fetchOptions.data;\r\n }\r\n\r\n if (typeof(fetchOptions.aux) != 'undefined') {\r\n requestData.aux = fetchOptions.aux;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('FetchData', \r\n {modelId: query.getModel().getId(), queryId: queryId });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then(data => data);\r\n }\r\n}\r\n","import { EqContext } from '../main/context';\r\nimport { QuerySynchronizer, SyncOptions } from '../main/query_synchronizer'\r\n\r\nexport class EqServerQuerySynchronizer implements QuerySynchronizer {\r\n\r\n constructor(private context : EqContext) {\r\n \r\n }\r\n\r\n public syncQuery(options?: SyncOptions): Promise<any> {\r\n options = options || {};\r\n \r\n const query = options.query || this.context.getQuery();\r\n const ops = options.options || {};\r\n\r\n let requestData: any = {\r\n 'query': query.toJSONData(),\r\n 'options': ops,\r\n };\r\n\r\n if (options.data) {\r\n requestData.data = options.data;\r\n }\r\n\r\n const url = this.context.resolveEndpoint('SyncQuery', \r\n { modelId: query.getModel().getId(), queryId: query.getId() });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, requestData)\r\n .then(responseData => responseData);\r\n }\r\n\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { EqValueListResolver, LoadValueListOptions, ValueListItem } from '../main/value_list_resolver';\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EqServerValueListResolver implements EqValueListResolver {\r\n\r\n constructor(private context: EqContext) {\r\n }\r\n\r\n public loadValueList(options?: LoadValueListOptions): Promise<ValueListItem[]> {\r\n const modelId = options.modelId || this.context.getModel().getId();\r\n\r\n const requestData = dataUtils.assign({ modelId: modelId}, options.params);\r\n const editorId = requestData.editorId;\r\n\r\n const http = this.context.getServices().getHttpClient();\r\n const url = this.context.resolveEndpoint('GetValueList', {modelId: modelId, listId: editorId });\r\n \r\n let queryParams: any = {};\r\n if (options && options.params && options.params.queryParams) {\r\n queryParams = options.params.queryParams;\r\n }\r\n\r\n return http.get(url, { queryParams: queryParams })\r\n .then((responseData) => {\r\n if (responseData && responseData.values) {\r\n return responseData.values;\r\n }\r\n else {\r\n throw new Error('Wrong response format. No \"values\" property');\r\n } \r\n });\r\n }\r\n}","import { GetQueryFileOptions, QueryFileLoader, UploadQueryFileOptions } from '../main/query_file_loader';\r\nimport { EqContext } from '../main/context';\r\nimport { QueryData } from '../query/dto/query_data';\r\n\r\nexport class EqQueryFileLoader implements QueryFileLoader {\r\n\r\n constructor(protected context: EqContext) {}\r\n\r\n getQueryFile(options?: GetQueryFileOptions): Promise<void> {\r\n\r\n const query = options.query || this.context.getQuery();\r\n\r\n const url = this.context.resolveEndpoint('GetQueryFile', {modelId: query.getModel().getId(), \r\n format: options.format || 'xml' });\r\n\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n const actionResult = http.post(url, {\r\n query: query.toJSONData()\r\n });\r\n const request = actionResult.getRequest();\r\n\r\n return actionResult.then((responseData) => {\r\n const blob = new Blob([responseData]);\r\n let fileName = request.getXMLHttpRequest()\r\n .getResponseHeader(\"Content-Disposition\").match(/filename=\"(.*)\"/)[1];\r\n\r\n if (options.fileName) {\r\n fileName = options.fileName \r\n + fileName.substring(fileName.lastIndexOf('.'));\r\n }\r\n\r\n if (window.navigator['msSaveOrOpenBlob']) {\r\n // Internet Explorer\r\n window.navigator['msSaveOrOpenBlob'](blob, fileName);\r\n } else {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style.display = \"none\";\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = fileName;\r\n a.click();\r\n window.URL.revokeObjectURL(a.href);\r\n document.body.removeChild(a);\r\n }\r\n });\r\n }\r\n\r\n uploadQueryFile(options?: UploadQueryFileOptions): Promise<QueryData> {\r\n options = options || {};\r\n\r\n const query = options.query || this.context.getQuery();\r\n\r\n const url = this.context.resolveEndpoint('UploadQueryFile', \r\n {modelId: query.getModel().getId() });\r\n const http = this.context.getServices().getHttpClient();\r\n\r\n return http.post(url, options.data, {\r\n dataType: 'form-data'\r\n })\r\n .then(responseData => {\r\n return responseData.query;\r\n });\r\n \r\n }\r\n}","import { \r\n AggregatesContainer, \r\n AggrCalculationOptions, GroupKey, GroupTotals,\r\n AggregatesCalculator\r\n} from '@easydata/core';\r\n\r\nimport { EqContext } from '../main/context';\r\n\r\ntype LevelData = Map<string, GroupTotals>;\r\n\r\ninterface LevelDescriptor {\r\n receivedCallbacks: Array<(data: LevelData) => void>;\r\n data: LevelData;\r\n}\r\n\r\nexport class EqAggregatesContainer implements AggregatesContainer { \r\n private levels: { [key: number]: LevelDescriptor } = {};\r\n\r\n constructor(protected context: EqContext) { \r\n }\r\n \r\n getAggregateData(level: number, groupKey: GroupKey): Promise<GroupTotals> {\r\n return new Promise<GroupTotals>((resolve, reject) => {\r\n const processFunc = (data) => {\r\n // map values\r\n const keyStr = this.groupKeyToStr(groupKey);\r\n const value = data.get(keyStr);\r\n if (value) {\r\n resolve(value);\r\n }\r\n else {\r\n reject(`Can't find data for ${keyStr}`);\r\n }\r\n }\r\n\r\n const desc = this.getLevelDesc(level, false);\r\n if (desc && desc.data) {\r\n processFunc(desc.data);\r\n }\r\n else {\r\n desc.receivedCallbacks.push(processFunc);\r\n }\r\n });\r\n }\r\n\r\n public setAggregateData(level: number, data: LevelData) {\r\n const desc = this.getLevelDesc(level, true);\r\n desc.data = data;\r\n\r\n if (desc.receivedCallbacks) {\r\n for(const callback of desc.receivedCallbacks) {\r\n callback(desc.data);\r\n }\r\n }\r\n\r\n desc.receivedCallbacks = [];\r\n }\r\n\r\n public updateAggregateData(level: number, groupKey : GroupKey, values: GroupTotals) {\r\n const desc = this.getLevelDesc(level, true);\r\n\r\n const key = this.groupKeyToStr(groupKey);\r\n desc.data.set(key, values);\r\n }\r\n\r\n private groupKeyToStr(groupKey: GroupKey) : string {\r\n return JSON.stringify(groupKey);\r\n }\r\n\r\n private getLevelDesc(level: number, createIfNotExists : boolean) : LevelDescriptor {\r\n let desc = this.levels[level];\r\n if (!desc && createIfNotExists) {\r\n desc = {\r\n receivedCallbacks: [],\r\n data: new Map<string, GroupTotals>()\r\n };\r\n this.levels[level] = desc;\r\n }\r\n return desc;\r\n } \r\n\r\n public clear() {\r\n this.levels = [];\r\n }\r\n}\r\n\r\n\r\nexport class DefaultAggregatesCalculator implements AggregatesCalculator {\r\n private aggrs: AggregatesContainer = null;\r\n\r\n constructor (protected context: EqContext)\r\n { \r\n }\r\n\r\n getAggrContainer(): AggregatesContainer {\r\n return this.aggrs;\r\n }\r\n\r\n calculate(options?: AggrCalculationOptions) {\r\n console.warn(\"Grand totals and sub totals aggregation calculation can be used in Enterprise version only\");\r\n options = options || {};\r\n options.maxLevel = options.maxLevel >= 0\r\n ? options.maxLevel : 0;\r\n\r\n this.aggrs = new EqAggregatesContainer(this.context);\r\n \r\n const query = this.context.createQuery();\r\n query.loadFromData(this.context.getQuery().toJSONData());\r\n\r\n const settings = this.context.getQuery().getAggregationSettings();\r\n\r\n const aggrColId = settings.getAggregates().map(a => a.colId);\r\n const columns = query.getColumns()\r\n .filter(col => aggrColId.indexOf(col.id) < 0);\r\n\r\n for (let i = 0; i < columns.length; i++) {\r\n columns[i].enabled = false;\r\n }\r\n\r\n if (settings.hasGrandTotals()) {\r\n this.aggrs.setAggregateData(0, new Map<string, GroupKey>());\r\n if (options.resultObtained)\r\n options.resultObtained({}, 0);\r\n }\r\n\r\n const groups = settings.getGroups();\r\n for (let level = 1; level <= groups.length && level <= options.maxLevel; level++) {\r\n this.aggrs.setAggregateData(level, new Map<string, GroupTotals>());\r\n if (options.resultObtained)\r\n options.resultObtained({}, level);\r\n }\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n needRecalculation(): boolean {\r\n return true;\r\n }\r\n\r\n reset(): void { \r\n }\r\n}","import { HttpClient, AggregatesCalculator } from '@easydata/core';\r\n\r\nimport { EqContext } from '../main/context';\r\nimport { Query } from '../query/query';\r\nimport { DataModel } from '../dm/data_model';\r\nimport { EqModelLoader } from '../main/model_loader';\r\nimport { DataModelStorage, InMemoryModelStorage } from '../main/model_storage';\r\nimport { QueryStorage, BrowserQueryStorage } from '../main/query_storage';\r\nimport { QuerySynchronizer } from '../main/query_synchronizer';\r\nimport { DataFetcher } from '../main/data_fetcher';\r\nimport { EqValueListResolver } from '../main/value_list_resolver';\r\nimport { QueryFileLoader } from '../main/query_file_loader';\r\nimport { EqServerModelLoader } from '../eqs/eqs_model_loader';\r\nimport { EqServerDataFetcher } from '../eqs/eqs_data_fetcher';\r\nimport { EqServerQuerySynchronizer } from '../eqs/eqs_query_synchronizer';\r\nimport { EqServerValueListResolver } from '../eqs/eqs_value_list_resolver';\r\nimport { EqQueryFileLoader } from '../eqs/eqs_query_file_loader';\r\nimport { DefaultAggregatesCalculator } from '../data/eq_aggr_container';\r\n\r\nexport class EqServiceProvider {\r\n\r\n private httpClient: HttpClient;\r\n\r\n private queryResolver: (context: EqContext) => Query;\r\n\r\n private modelResolver: (context: EqContext) => DataModel;\r\n\r\n private modelStorage : DataModelStorage;\r\n\r\n private modelLoader: EqModelLoader = null;\r\n\r\n private queryStorage: QueryStorage = null;\r\n\r\n private querySynchronizer: QuerySynchronizer = null;\r\n\r\n private dataFetcher: DataFetcher = null;\r\n\r\n private valueListResolver: EqValueListResolver = null;\r\n\r\n private queryFileLoader: QueryFileLoader = null;\r\n\r\n private aggrCalculator: AggregatesCalculator = null;\r\n\r\n private modelStorageResolver: (context: EqContext) => DataModelStorage;\r\n\r\n private modelLoaderResolver: (context: EqContext) => EqModelLoader;\r\n\r\n private queryStorageResolver: (context: EqContext) => QueryStorage;\r\n\r\n private querySynchronizerResolver: (context: EqContext) => QuerySynchronizer;\r\n\r\n private dataFetcherResolver: (context: EqContext) => DataFetcher;\r\n\r\n private vlrResolver:(context: EqContext) => EqValueListResolver;\r\n\r\n private queryFileLoaderResolver: (context: EqContext) => QueryFileLoader;\r\n\r\n private aggrCalculatoResolver: (context: EqContext) => AggregatesCalculator;\r\n\r\n constructor(protected context: EqContext) { \r\n this.httpClient = new HttpClient();\r\n this.httpClient.defaultHeaders['x-eqjs-version'] = '7.2.0'; \r\n\r\n this.modelResolver = (_) => new DataModel();\r\n this.modelStorageResolver = null;\r\n this.queryResolver = (context) => new Query(context.getModel());\r\n this.modelLoaderResolver = (context) => new EqServerModelLoader(context);\r\n this.queryStorageResolver = (context) => new BrowserQueryStorage(context);\r\n this.querySynchronizerResolver = (context) => new EqServerQuerySynchronizer(context);\r\n this.vlrResolver = (context) => new EqServerValueListResolver(context);\r\n this.dataFetcherResolver = (context) => new EqServerDataFetcher(context);\r\n this.queryFileLoaderResolver = (context) => new EqQueryFileLoader(context);\r\n this.aggrCalculatoResolver = (context) => new DefaultAggregatesCalculator(context);\r\n }\r\n\r\n public reset() {\r\n this.modelStorage = null;\r\n this.modelLoader = null;\r\n this.queryStorage = null;\r\n this.querySynchronizer = null;\r\n }\r\n\r\n public getHttpClient(): HttpClient {\r\n return this.httpClient;\r\n }\r\n\r\n public createDataModel(): DataModel {\r\n if (!this.modelResolver) {\r\n throw 'Model resolver is not defined';\r\n }\r\n return this.modelResolver(this.context);\r\n } \r\n \r\n public createQuery(): Query {\r\n if (!this.queryResolver) {\r\n throw 'Query resolver is not defined';\r\n }\r\n return this.queryResolver(this.context);\r\n }\r\n\r\n public getModelLoader(): EqModelLoader {\r\n if (!this.modelLoader) {\r\n if (!this.modelLoaderResolver) {\r\n throw 'ModelLoaderResolver is not defined';\r\n }\r\n this.modelLoader = this.modelLoaderResolver(this.context); \r\n }\r\n return this.modelLoader;\r\n }\r\n\r\n public getModelStorage(): DataModelStorage {\r\n if (!this.modelStorage) {\r\n if (!this.modelStorageResolver) {\r\n throw 'ModelStorageResolver is not defined';\r\n }\r\n this.modelStorage = this.modelStorageResolver(this.context);\r\n }\r\n return this.modelStorage;\r\n }\r\n\r\n public getQueryStorage(): QueryStorage {\r\n if (!this.queryStorage) {\r\n if (!this.queryStorageResolver) {\r\n throw 'QueryStorageResolver is not defined';\r\n }\r\n this.queryStorage = this.queryStorageResolver(this.context); \r\n }\r\n return this.queryStorage;\r\n }\r\n\r\n public getQuerySynchronizer(): QuerySynchronizer {\r\n if (!this.querySynchronizer) {\r\n if (!this.querySynchronizerResolver) {\r\n throw 'QuerySynchronizerResolver is not defined';\r\n }\r\n this.querySynchronizer = this.querySynchronizerResolver(this.context); \r\n }\r\n return this.querySynchronizer;\r\n }\r\n\r\n\r\n public getDataFetcher(): DataFetcher {\r\n if (!this.dataFetcher) {\r\n if (!this.dataFetcherResolver) {\r\n throw 'DataFetcherResolver is not defined';\r\n }\r\n this.dataFetcher = this.dataFetcherResolver(this.context);\r\n }\r\n\r\n return this.dataFetcher;\r\n }\r\n\r\n public getValueListResolver(): EqValueListResolver {\r\n if (!this.valueListResolver) {\r\n if (!this.vlrResolver) {\r\n throw 'Resolver for ValueListResolver is not defined';\r\n }\r\n\r\n this.valueListResolver = this.vlrResolver(this.context);\r\n }\r\n\r\n return this.valueListResolver;\r\n }\r\n\r\n public getQueryFileLoader(): QueryFileLoader {\r\n if (!this.queryFileLoader) {\r\n if (!this.queryFileLoaderResolver) {\r\n throw 'Resolver for QueryFileLoader is not defined';\r\n }\r\n\r\n this.queryFileLoader = this.queryFileLoaderResolver(this.context);\r\n }\r\n\r\n return this.queryFileLoader;\r\n }\r\n\r\n public getAggregatesCalculator(): AggregatesCalculator {\r\n if (!this.aggrCalculator) {\r\n if (!this.aggrCalculatoResolver) {\r\n throw 'Resolver for AggregatesCalculator is not defined';\r\n }\r\n\r\n this.aggrCalculator = this.aggrCalculatoResolver(this.context);\r\n }\r\n\r\n return this.aggrCalculator;\r\n }\r\n \r\n public registerDataModelResolver(resolver: (context: EqContext) => DataModel): void {\r\n this.modelResolver = resolver;\r\n }\r\n\r\n public registerQueryResolver(resolver: (context: EqContext) => Query): void {\r\n this.queryResolver = resolver;\r\n }\r\n\r\n public registerModelLoaderResolver(resolver: (context: EqContext) => EqModelLoader): void {\r\n this.modelLoaderResolver = resolver;\r\n }\r\n\r\n public registerModelStorageResolver(resolver: (context: EqContext) => DataModelStorage): void {\r\n this.modelStorageResolver = resolver;\r\n }\r\n\r\n public registerQueryStorageResolver(resolver: (context: EqContext) => QueryStorage): void {\r\n this.queryStorageResolver = resolver;\r\n }\r\n\r\n public registerDataFetcherResolver(resolver: (context: EqContext) => DataFetcher): void {\r\n this.dataFetcherResolver = resolver;\r\n }\r\n\r\n public registerQuerySyncronizerResolver(resolver: (context: EqContext) => QuerySynchronizer): void {\r\n this.querySynchronizerResolver = resolver;\r\n }\r\n\r\n public registerValueListResolver(resolver: (context: EqContext) => EqValueListResolver): void {\r\n this.vlrResolver = resolver;\r\n }\r\n\r\n public registerQueryFileLoaderResolver(resolver: (context: EqContext) => QueryFileLoader): void {\r\n this.queryFileLoaderResolver = resolver;\r\n }\r\n\r\n public registerAggregatesCalculator(resolver: (context: EqContext) => AggregatesCalculator): void {\r\n this.aggrCalculatoResolver = resolver;\r\n }\r\n}","import {\r\n DataLoader,\r\n DataChunkDescriptor, DataChunk, EasyDataTable\r\n} from '@easydata/core';\r\nimport { ContextFetchDataOptions } from 'src/main/context_options';\r\n\r\nimport { EqContext } from '../main/context';\r\n\r\nexport class EasyQueryDataLoader implements DataLoader {\r\n\r\n constructor(private context: EqContext) { }\r\n\r\n private dataLoadPromise: Promise<DataChunk>;\r\n\r\n public loadChunk(chunk?: DataChunkDescriptor): Promise<DataChunk> {\r\n // We have to refactor page logic in view to make it simplier to integrate \r\n // different grids\r\n this.dataLoadPromise = new Promise<DataChunk>((resolve, reject) => {\r\n const fetchOptions : ContextFetchDataOptions = {\r\n chunk: chunk,\r\n success: (result) => {\r\n const dataTable = new EasyDataTable({\r\n loader: this.context.dataLoader, //TODO: Why not just `this`?\r\n chunkSize: this.context.resultTable.chunkSize\r\n });\r\n \r\n const resultSet = result.resultSet;\r\n\r\n for (const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n dataTable.setTotal(result.meta.totalRecords);\r\n for (const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n \r\n resolve({\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !chunk.needTotal || chunk.offset + chunk.limit < totalRecords\r\n });\r\n },\r\n error: (error) => reject(error)\r\n };\r\n \r\n if (this.context.debugMode) {\r\n fetchOptions.debug = `Data Chunk. Offset: ${chunk.offset}`;\r\n }\r\n\r\n this.context.fetchDataChunk(fetchOptions);\r\n });\r\n\r\n return this.dataLoadPromise;\r\n }\r\n}\r\n","/** Represents groups of widgets. Used to identify widgets */\r\nexport enum WidgetGroup {\r\n /** None widget group. */\r\n None = 0,\r\n\r\n /** The group of widgets responsible for the Model. */\r\n Model = 1 << 0,\r\n \r\n /** The group of widgets responsible for the Query. */\r\n Query = 1 << 1,\r\n\r\n /** The group of widgets responsible for the Result. */\r\n Result = 1 << 2,\r\n\r\n /** The group of widgets responsible for the statement. */\r\n Statement = 1 << 3,\r\n\r\n /** The group of widgets responsible for tracking Query status. */\r\n QueryStatus = 1 << 4,\r\n\r\n /** All. */\r\n All = (1 << 16) - 1\r\n}","export enum EqAction {\r\n LoadModel = 'LoadModel',\r\n\r\n LoadQuery = 'LoadQuery',\r\n\r\n LoadQueryList = 'LoadQueryList',\r\n \r\n NewQuery = 'NewQuery',\r\n \r\n SaveQuery = 'SaveQuery',\r\n\r\n RemoveQuery = 'RemoveQuery',\r\n\r\n SyncQuery = 'SyncQuery',\r\n \r\n FetchData = 'FetchData',\r\n\r\n GetValueList = 'GetValueList',\r\n \r\n ExportResult = 'ExportResult',\r\n\r\n GetQueryFile = 'GetQueryFile',\r\n\r\n UploadQueryFile = 'UploadQueryFile'\r\n}","import { utils } from '@easydata/core'\r\n\r\nexport interface DataModelStorageItem {\r\n id : string;\r\n name: string;\r\n description?: string;\r\n}\r\n\r\nexport interface DataModelStorage {\r\n getModels() : Promise<DataModelStorageItem[]>;\r\n}\r\n\r\nexport class InMemoryModelStorage implements DataModelStorage { \r\n private models: DataModelStorageItem[] = [];\r\n constructor(models? : DataModelStorageItem[]) {\r\n if (models) {\r\n utils.assign(this.models, [], models);\r\n }\r\n }\r\n\r\n getModels(): Promise<DataModelStorageItem[]> {\r\n return new Promise((resolve, reject) => {\r\n resolve(this.models)\r\n });\r\n }\r\n}","export enum EqActionResult {\r\n Error = 0,\r\n Success = 1\r\n}\r\n\r\n\r\n/**\r\n * Represents a status message object which is used in different events within the context \r\n */\r\nexport interface ActionStatus {\r\n action: string;\r\n result?: EqActionResult;\r\n text?: string;\r\n sourceError?: Error;\r\n}\r\n\r\n\r\n\r\n","import { EqExporter, ExportOptions } from '../export/exporter'\r\nimport { EqContext } from '../main/context'\r\n\r\nexport class EqServerExporter implements EqExporter {\r\n\r\n private format: string;\r\n private responseType?: XMLHttpRequestResponseType;\r\n\r\n private context: EqContext;\r\n\r\n constructor(context: EqContext) {\r\n this.context = context;\r\n }\r\n\r\n public setFormat(format: string, responseType?: XMLHttpRequestResponseType) {\r\n this.format = format;\r\n this.responseType = responseType;\r\n }\r\n\r\n public export(exportOptions?: ExportOptions): Promise<any> {\r\n exportOptions = exportOptions || {};\r\n const http = this.context.getServices().getHttpClient();\r\n const format = this.format || \"csv\";\r\n\r\n const query = exportOptions.query || this.context.getQuery();\r\n const modelId = query.getModel().getId();\r\n\r\n let requestData: any = {\r\n 'settings': exportOptions.settings,\r\n }\r\n\r\n if (typeof(exportOptions.queryId) !== 'undefined') {\r\n requestData.queryId = exportOptions.queryId;\r\n }\r\n else {\r\n requestData.query = query.toJSONData();\r\n }\r\n\r\n const url = this.context.resolveEndpoint('ExportResult',\r\n {modelId: modelId, format: format });\r\n const actionResult = http.post(url, requestData, { responseType: this.responseType });\r\n\r\n const request = actionResult.getRequest();\r\n\r\n return actionResult.then((responseData) => {\r\n const blob = new Blob([responseData]);\r\n const filename = request.getXMLHttpRequest()\r\n .getResponseHeader(\"Content-Disposition\").match(/filename=\"(.*)\"/)[1];\r\n\r\n if (window.navigator['msSaveOrOpenBlob']) {\r\n // Internet Explorer\r\n window.navigator['msSaveOrOpenBlob'](blob, filename);\r\n } \r\n else {\r\n var a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n a.style .display= \"none\";\r\n a.href = window.URL.createObjectURL(blob);\r\n a.download = filename;\r\n a.click();\r\n window.URL.revokeObjectURL(a.href);\r\n document.body.removeChild(a);\r\n }\r\n });\r\n }\r\n}","import { \r\n EasyDataTable, EventEmitter, \r\n utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { i18n } from '@easydata/core';\r\n\r\nimport { EqServiceProvider } from '../common/eq_services';\r\n\r\nimport { DataModel } from '../dm/data_model';\r\nimport { Query } from '../query/query';\r\nimport { QueryChangePart } from '../query/query_events';\r\n\r\nimport { Widget } from './widget';\r\nimport { \r\n ContextExportResultOptions, ContextFetchDataOptions, \r\n ContextGetQueryFileOptions, ContextLoadModelOptions, \r\n ContextLoadQueryListOptions, ContextLoadQueryOptions, \r\n ContextLoadValueListOptions, ContextNewQueryOptions, \r\n ContextRemoveQueryOptions, ContextSaveQueryOptions, \r\n ContextSyncQueryOptions, ContextUploadQueryFileOptions, \r\n EqContextOptions\r\n} from './context_options';\r\nimport { ExternalListCache } from './list_cache';\r\nimport { ActionStatus, EqActionResult } from './action';\r\n\r\nimport { QueryData } from '../query/dto/query_data';\r\nimport { ModelPlainData } from '../dm/dto/dm_data';\r\n\r\nimport { WidgetGroup } from '../types/widget_group';\r\nimport { equtils } from '../utils/utils';\r\nimport { EqAction } from './eq_actions';\r\nimport { EqExporter} from '../export/exporter';\r\n\r\nimport { EqServerExporter } from '../eqs/eqs_exporter';\r\nimport { EasyQueryDataLoader } from '../data/eq_data_loader';\r\nimport { LoadValueListParams, ValueListItem } from './value_list_resolver';\r\n\r\ntype EqExporterResolver = (context: EqContext) => EqExporter;\r\n\r\n/**\r\n * Encapsulates all information about EasyQuery components on some webpage\r\n * and provides some basic operation over those components\r\n * Each context includes the following main components:\r\n * - one data model, \r\n * - one query, \r\n * - one result set \r\n * - several UI widgets. \r\n */\r\nexport class EqContext {\r\n private servicesInitialized = false;\r\n\r\n private eqServices : EqServiceProvider;\r\n\r\n private internalListCache: any = {};\r\n private externalListCache?: ExternalListCache;\r\n\r\n private dataModel: DataModel;\r\n \r\n public defaultModelId?: string;\r\n\r\n private query: Query;\r\n\r\n public defaultQueryId?: string;\r\n\r\n public initialQuery?: QueryData;\r\n\r\n public resultTable: EasyDataTable;\r\n\r\n public dataLoader: EasyQueryDataLoader;\r\n\r\n public resultContent?: string;\r\n\r\n public resultStatement?: string;\r\n\r\n private widgets: Array<Widget>;\r\n\r\n private eventEmitter: EventEmitter;\r\n\r\n private errorHandlerId : string;\r\n\r\n public clientListRequestHandler: (data: any, callback: (list: any) => void ) => boolean;\r\n\r\n public loadModelOnStart: boolean = true;\r\n public loadQueryOnStart: boolean = false;\r\n\r\n private exporters: Map<string, EqExporterResolver>;\r\n private endpoints: Map<string, string>;\r\n\r\n public useStoredQueryOnFetch = false;\r\n\r\n public debugMode: boolean = false;\r\n\r\n private _backendInfo : EqBackendInfo = {\r\n type: 'EQN-ANC',\r\n subType: 'asp-net-core-razor'\r\n };\r\n\r\n /**\r\n * Tuners.\r\n * Each tuner is a function which are called before sending a request to the server\r\n */\r\n private beforeLoadModel?: (context: EqContext, options?: ContextLoadModelOptions) => void;\r\n private beforeSyncQuery?: (context: EqContext, options?: ContextSyncQueryOptions) => void;\r\n private beforeLoadQuery?: (context: EqContext, options?: ContextLoadQueryOptions) => void;\r\n private beforeFetchData?: (context: EqContext, options?: ContextFetchDataOptions) => void;\r\n private beforeExportResult?: (context: EqContext, options?: ContextExportResultOptions) => void;\r\n\r\n\r\n private afterGroupFetch?: (result?:any, level?: number) => void;\r\n\r\n constructor() {\r\n this.eqServices = new EqServiceProvider(this);\r\n\r\n this.widgets = new Array<Widget>();\r\n this.eventEmitter = new EventEmitter(this);\r\n\r\n this.exporters = new Map<string, EqExporterResolver>();\r\n this.endpoints = new Map<EqEndpointKey, string>();\r\n\r\n this.dataLoader = new EasyQueryDataLoader(this);\r\n\r\n this.resultTable = new EasyDataTable({\r\n loader: this.dataLoader,\r\n onUpdate: this.onResultTableUpdate.bind(this)\r\n });\r\n this.resultTable.id = 'ResultTable';\r\n\r\n this.errorHandlerId = this.addEventListener('error', (context: EqContext, status: ActionStatus) => {\r\n status.result = EqActionResult.Error;\r\n const msgTitle = status.action ? status.action + ' error' : 'Error';\r\n let msgText = status.text ? status.text : '';\r\n if (status.sourceError && status.sourceError.message !== msgText) {\r\n msgText += '\\n' + status.sourceError;\r\n }\r\n console.error(msgTitle + ': ' + msgText);\r\n });\r\n }\r\n\r\n public getServices() : EqServiceProvider {\r\n return this.eqServices;\r\n }\r\n\r\n public registerExporter(format: string, resolver: EqExporterResolver) {\r\n this.exporters.set(format, resolver);\r\n }\r\n\r\n public registerServerExporter(format: string, responseType: XMLHttpRequestResponseType) {\r\n this.registerExporter(format, (context) => {\r\n const exporter = new EqServerExporter(context);\r\n exporter.setFormat(format, responseType);\r\n return exporter;\r\n });\r\n }\r\n\r\n public getExporter(format: string): EqExporter | null {\r\n const resolver = this.exporters.get(format);\r\n if (resolver) {\r\n return resolver(this);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getExportFormats(): string[] {\r\n return Array.from(this.exporters.keys());\r\n }\r\n\r\n public addDefaultExporters() {\r\n this.registerServerExporter('csv', '');\r\n\r\n this.registerServerExporter('excel-html', '');\r\n }\r\n\r\n //----------- endpoint processing functions --------------\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EqEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EqEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.getModel().getId();\r\n }\r\n else if (opt == 'queryId') {\r\n optVal = this.getQuery().getId();\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public setEndpoint(key: EqEndpointKey, value: string) : void\r\n public setEndpoint(key: EqEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EqEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EqEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetModel', equtils.combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('GetQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('SaveQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('SyncQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}/sync'));\r\n this.setEnpointIfNotExist('NewQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries'));\r\n this.setEnpointIfNotExist('RemoveQuery', equtils.combinePath(endpointBase, 'models/{modelId}/queries/{queryId}'));\r\n this.setEnpointIfNotExist('GetQueryList', equtils.combinePath(endpointBase, 'models/{modelId}/queries'));\r\n this.setEnpointIfNotExist('FetchData', equtils.combinePath(endpointBase, 'models/{modelId}/fetch'));\r\n this.setEnpointIfNotExist('GetValueList', equtils.combinePath(endpointBase, 'models/{modelId}/valuelists/{listId}'));\r\n this.setEnpointIfNotExist('ExportResult', equtils.combinePath(endpointBase, 'models/{modelId}/export/{format}'));\r\n this.setEnpointIfNotExist('GetQueryFile', equtils.combinePath(endpointBase, 'models/{modelId}/getqueryfile/{format}'));\r\n this.setEnpointIfNotExist('UploadQueryFile', equtils.combinePath(endpointBase, 'models/{modelId}/uploadqueryfile'));\r\n }\r\n\r\n private elasticPaging: boolean = false;\r\n\r\n public initStart(): void {\r\n this.servicesInitialized = true;\r\n }\r\n\r\n /**\r\n * Initializes the context\r\n * @param options \r\n */\r\n public init(options?: EqContextOptions) {\r\n if (!this.servicesInitialized)\r\n this.initStart();\r\n \r\n options = options || {};\r\n\r\n if (typeof(options.debugMode) !== 'undefined') {\r\n this.debugMode = options.debugMode;\r\n }\r\n\r\n if (typeof(options.chunkSize) !== 'undefined') {\r\n this.resultTable.chunkSize = options.chunkSize;\r\n }\r\n\r\n if (typeof (options.elasticPaging) !== 'undefined') {\r\n this.elasticPaging = options.elasticPaging;\r\n }\r\n \r\n if (options.listCache) {\r\n this.setExternalListCache(options.listCache);\r\n }\r\n \r\n if (options.locale) {\r\n i18n.setCurrentLocale(options.locale);\r\n }\r\n\r\n if (options.localeSettings) {\r\n i18n.updateLocaleSettings(options.localeSettings);\r\n }\r\n\r\n if (options.endpoint) {\r\n this.baseEndpoint = options.endpoint;\r\n console.warn('The `endpoint` option is deprecated.\\n' \r\n + 'Please use `context.useEndpoint(endpointURL)` function instead.');\r\n }\r\n\r\n this.setDefaultEndpoints(this.baseEndpoint);\r\n\r\n if (options.modelStorageResolver) {\r\n const eqServices = this.getServices()\r\n eqServices.registerModelStorageResolver(options.modelStorageResolver);\r\n }\r\n\r\n this.loadQueryOnStart = false;\r\n if (options.loadQueryOnStart) {\r\n this.loadQueryOnStart = options.loadQueryOnStart;\r\n }\r\n\r\n this.loadModelOnStart = true;\r\n if (typeof options.loadModelOnStart !== 'undefined') {\r\n this.loadModelOnStart = options.loadModelOnStart;\r\n }\r\n\r\n if (options.handlers) {\r\n if (options.handlers.onInit) {\r\n this.addEventListener('ready', options.handlers.onInit);\r\n }\r\n\r\n if (options.handlers.afterLoadModel) {\r\n this.addEventListener('loadModel', options.handlers.afterLoadModel);\r\n }\r\n\r\n if (options.handlers.afterLoadQuery) {\r\n this.addEventListener('loadQuery', options.handlers.afterLoadQuery);\r\n }\r\n\r\n if (options.handlers.afterSyncQuery) {\r\n this.addEventListener('syncQuery', options.handlers.afterSyncQuery);\r\n }\r\n\r\n if (options.handlers.afterFetchData) {\r\n this.addEventListener('fetchData', options.handlers.afterFetchData);\r\n }\r\n\r\n if (options.handlers.afterExportResult) {\r\n this.addEventListener('exportResult', options.handlers.afterExportResult);\r\n }\r\n\r\n if (options.handlers.onProcessStart) {\r\n this.addEventListener('processStart', options.handlers.onProcessStart);\r\n }\r\n\r\n if (options.handlers.onProcessEnd) {\r\n this.addEventListener('processEnd', options.handlers.onProcessEnd);\r\n }\r\n\r\n if (options.handlers.onError) {\r\n this.removeEventListener('error', this.errorHandlerId);\r\n this.addEventListener('error', options.handlers.onError);\r\n } \r\n\r\n if (options.handlers.onListRequest) {\r\n this.clientListRequestHandler = options.handlers.onListRequest;\r\n }\r\n\r\n if (options.handlers.beforeLoadModel) {\r\n this.beforeLoadModel = options.handlers.beforeLoadModel;\r\n }\r\n\r\n if (options.handlers.beforeLoadQuery) {\r\n this.beforeLoadQuery = options.handlers.beforeLoadQuery;\r\n }\r\n\r\n if (options.handlers.beforeSyncQuery) {\r\n this.beforeSyncQuery = options.handlers.beforeSyncQuery;\r\n }\r\n\r\n if (options.handlers.beforeFetchData) {\r\n this.beforeFetchData = options.handlers.beforeFetchData;\r\n }\r\n\r\n if (options.handlers.beforeExportResult) {\r\n this.beforeExportResult = options.handlers.beforeExportResult;\r\n }\r\n }\r\n \r\n this.initialQuery = options.initialQuery;\r\n\r\n this.defaultQueryId = options.defaultQueryId || '';\r\n\r\n this.defaultModelId = options.defaultModelId || '__default';\r\n\r\n const modelLoader = this.eqServices.getModelLoader();\r\n modelLoader.init(options);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.init(options);\r\n\r\n if (options.useDefaultExporters !== false) {\r\n this.addDefaultExporters();\r\n }\r\n\r\n if (options.serverExporters) {\r\n for (const format of options.serverExporters) {\r\n const responseType = format == 'csv' || format == 'excel-html' ? '' : 'arraybuffer';\r\n this.registerServerExporter(format, responseType);\r\n }\r\n }\r\n\r\n const query = this.getQuery();\r\n\r\n if (options.defaultQueryId) {\r\n query.setId(options.defaultQueryId);\r\n }\r\n\r\n //init widgets\r\n this.widgets.forEach((widget) => {\r\n let widgetOptions = {}; \r\n if (options.widgets && options.widgets[widget.getWidgetType()]) {\r\n widgetOptions = options.widgets[widget.getWidgetType()];\r\n }\r\n widget.init(this, widgetOptions);\r\n });\r\n\r\n if (this.loadModelOnStart) {\r\n this.loadDefaultModel();\r\n }\r\n else {\r\n this.fireEvent('ready');\r\n }\r\n }\r\n\r\n get backendInfo() {\r\n return this._backendInfo;\r\n }\r\n\r\n /**\r\n * Sets endpoint for all EasyQuery actions. Should be called before `init` and \r\n * `useEnterprise` methods\r\n * @param endpoint \r\n * @example \r\n * ```\r\n * view.getContext()\r\n * .useEndpoint('/api/easyquery')\r\n * .useEnterprise(function () {\r\n * view.init();\r\n * });\r\n * ```\r\n */\r\n public useEndpoint(endpoint: string): EqContext {\r\n this.baseEndpoint = endpoint;\r\n return this;\r\n }\r\n\r\n /**\r\n * Allows to specify the type of backend service.\r\n * \r\n * @param backendInfo - the structure that contains information about the app used on the backend\r\n * Possible values for `ptag` property: 'EQN-ANC' - ASP.NET Core or 'EQN-ASP' - for ASP.NET 4 backend\r\n */\r\n public useBackend(backendInfo: EqBackendInfo) : EqContext {\r\n if (backendInfo.type) {\r\n this._backendInfo.type = backendInfo.type;\r\n }\r\n if (backendInfo.subType) {\r\n this._backendInfo.subType = backendInfo.subType\r\n }\r\n else {\r\n switch (this._backendInfo.type) {\r\n case 'EQN-ANC': \r\n this._backendInfo.subType = 'asp-net-core-razor';\r\n break;\r\n case 'EQN-ASP': \r\n this._backendInfo.subType = 'asp-net-4-mvc';\r\n break;\r\n default:\r\n this._backendInfo.subType = 'other';\r\n break;\r\n }\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Add a new widget to the context. \r\n * After that the widget will start to receive messages from other context components.\r\n * @param widget \r\n */\r\n public addWidget(widget: Widget) {\r\n this.widgets.push(widget);\r\n }\r\n\r\n /**\r\n * Returns all widgets with current type.\r\n * @param widgetType The widget type\r\n */\r\n public getAllWidgetsByType(widgetType: string): Widget[] {\r\n return this.widgets\r\n .filter(widget => widget.getWidgetType() === widgetType);\r\n }\r\n\r\n /**\r\n * Returns first registerd widget with current type\r\n * @param widgetType The widget type\r\n */\r\n public getWidgetByType(widgetType: string): Widget | null {\r\n const widgets = this.getAllWidgetsByType(widgetType);\r\n return widgets.length > 0 ? widgets[0] : null;\r\n }\r\n\r\n /**\r\n * This method is called automatically when some change was made either in context's data model or query\r\n * @param groups \r\n */\r\n public refreshWidgets(groups: WidgetGroup = WidgetGroup.All) {\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.refresh();\r\n }\r\n }); \r\n }\r\n\r\n /**\r\n * Register a new handler for 'query changed' event\r\n * @param callback \r\n */\r\n public addQueryChangedCallback(callback) {\r\n this.getQuery().addChangedCallback(callback);\r\n }\r\n\r\n /**\r\n * Removes the function from the list of registerd handlers for 'query changed' event\r\n * @param callback \r\n */\r\n public removeQueryChangedCallback(callback) {\r\n this.getQuery().removeChangedCallback(callback);\r\n }\r\n\r\n /**\r\n * Creates a new query object using the current instance of EqServices\r\n */\r\n public createQuery() : Query {\r\n return this.eqServices.createQuery();\r\n }\r\n\r\n /**\r\n * Gets the current query\r\n */\r\n public getQuery(): Query {\r\n if (!this.query) {\r\n if (!this.servicesInitialized) {\r\n throw new Error(\"Can't create query until the context is initialized\");\r\n }\r\n this.query = this.createQuery();\r\n }\r\n return this.query;\r\n }\r\n\r\n /**\r\n * Gets the current data model\r\n */\r\n public getModel(): DataModel {\r\n if (!this.dataModel) {\r\n this.dataModel = this.eqServices.createDataModel();\r\n }\r\n return this.dataModel;\r\n }\r\n\r\n /** \r\n * Sets the content of the current data model \r\n */\r\n public loadModelFromData(modelPlainData: ModelPlainData){\r\n this.getQuery().loadModelData(modelPlainData);\r\n this.dataModel = this.getQuery().getModel();\r\n }\r\n\r\n /**\r\n * Sets the ID of the default model\r\n * @param modelId \r\n */\r\n public setDefaultModelId(modelId: string) {\r\n this.defaultModelId = modelId;\r\n }\r\n \r\n\r\n /**\r\n * Notifies context components about starting of some long process (e.g. model loading)\r\n * This method raises onProcessStart event in the context and all its widgets \r\n * @param message \r\n * @param groups \r\n */\r\n public startProcess(message: ActionStatus, groups?: WidgetGroup) {\r\n this.eventEmitter.fire('processStart', message);\r\n\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.onProcessStart();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Notifies all context components about the finishing of some long process\r\n * @param status\r\n * @param groups \r\n */\r\n public endProcess(status: ActionStatus, groups?: WidgetGroup) { \r\n this.eventEmitter.fire('processEnd', status);\r\n\r\n if (status.result === EqActionResult.Error) {\r\n this.throwError(status);\r\n }\r\n\r\n this.widgets.forEach((widget) => {\r\n if (widget.belongsToGroup(groups)) {\r\n widget.onProcessEnd();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Throws the error passed in the function parameter.\r\n * If onError event handler is defined - we call that method. \r\n * Otherwise - just place the error message to the browser console.\r\n * @param error \r\n */\r\n public throwError(status: ActionStatus) {\r\n status.result = EqActionResult.Error;\r\n this.eventEmitter.fire('error', status);\r\n }\r\n\r\n /**\r\n * If `defaultModelId` property is define - this method calls `loadModel` function in the broker \r\n * to load the model with such ID.\r\n * \r\n */\r\n public loadDefaultModel() {\r\n this.loadModel({\r\n modelId: this.defaultModelId,\r\n silent: true,\r\n success: () => {\r\n this.refreshWidgets(WidgetGroup.Model);\r\n\r\n let query = this.getQuery();\r\n this.fireEvent('initialModelLoad');\r\n\r\n if (this.initialQuery) {\r\n query.loadFromData(this.initialQuery, {\r\n changeStatus: false\r\n });\r\n }\r\n\r\n if (this.loadQueryOnStart) {\r\n this.loadQuery({\r\n queryId: this.defaultQueryId,\r\n modelId: this.defaultModelId,\r\n success: () => {\r\n this.refreshWidgets(WidgetGroup.Query);\r\n //if we load query on start - then we should call 'ready' event only after its successful loading\r\n this.fireEvent('ready');\r\n }\r\n });\r\n }\r\n else {\r\n this.refreshWidgets(WidgetGroup.Query);\r\n this.fireEvent('ready');\r\n }\r\n }\r\n });\r\n }\r\n\r\n\r\n /**\r\n * Clears the content of the current query\r\n */\r\n public clearQuery() {\r\n const query = this.getQuery();\r\n query.clear();\r\n query.fireChangedEvent({\r\n part: QueryChangePart.All\r\n });\r\n }\r\n\r\n /**\r\n * Clears all query results (the data set and the statement, if any)\r\n */\r\n public clearResult() {\r\n this.resultTable.clear(); // do not set resultTable to null. Just clear\r\n this.resultStatement = null;\r\n this.resultContent = null; \r\n }\r\n\r\n /**\r\n * Sets the external 'list cache' provider - an object which implements `ExternalListCache` inteface\r\n * @param cache \r\n */\r\n public setExternalListCache(cache: ExternalListCache) {\r\n this.externalListCache = cache;\r\n }\r\n\r\n private getListFromCache(params: LoadValueListParams) {\r\n const key = this.getListCacheKey(params);\r\n if(this.externalListCache) {\r\n return this.externalListCache.get(key);\r\n }\r\n else {\r\n return this.internalListCache[key];\r\n }\r\n }\r\n\r\n private getListCacheKey(params: LoadValueListParams) {\r\n let key: string = params.listName == 'SQL' ? 'SQL_' + params.editorId : params.listName;\r\n\r\n if (params.queryParams) {\r\n key += '_' + Object.keys(params.queryParams).filter(k => k != 'listName')\r\n .map(k => params.queryParams[k])\r\n .join('_');\r\n } \r\n\r\n return key;\r\n }\r\n\r\n private addListToCache (params, list) {\r\n const key = this.getListCacheKey(params);\r\n\r\n if(this.externalListCache) {\r\n this.externalListCache.set(key, list);\r\n }\r\n else {\r\n this.internalListCache[key] = list;\r\n }\r\n }\r\n\r\n /**\r\n * Clears the current list cache.\r\n */\r\n public resetListCache () {\r\n if(this.externalListCache) {\r\n this.externalListCache.clear();\r\n }\r\n else {\r\n this.internalListCache = {};\r\n }\r\n }\r\n\r\n /**\r\n * Gets the handler for 'GetList' requests\r\n */\r\n public getListRequestHandler(): any {\r\n return this._listRequestHandler;\r\n }\r\n\r\n private _predefinedListRequestHandlers: any = {\r\n '_DSDE': (params: ListRequestHandlerParams, onResult: (values: ValueListItem []) => void) => {\r\n const data = this.getModel().getAllDateMacros()\r\n .map(macroId => { \r\n return { id: '${{' + macroId + '}}', text: i18n.getText(macroId) } \r\n });\r\n onResult(data);\r\n return true;\r\n },\r\n '_DSTE': (params: ListRequestHandlerParams, onResult: (values: ValueListItem []) => void) => {\r\n const data = this.getModel().getAllTimeMacros()\r\n .map(macroId => { \r\n return { id: '${{' + macroId + '}}', text: i18n.getText(macroId) } \r\n });\r\n onResult(data);\r\n return true;\r\n }\r\n };\r\n\r\n\r\n private _listRequestHandler = (options: ListRequestHandlerParams, \r\n onResult: (values: ValueListItem[]) => void) => {\r\n\r\n if (options == null || !options.listName)\r\n return;\r\n\r\n const query = this.getQuery();\r\n const params = dataUtils.assign({ listName: options.listName }, options.editorParams);\r\n const reqParams: any = {};\r\n const attrPattern = /@{{(.+?)}}/;\r\n\r\n for (const prop in params) {\r\n if (!params[prop]) continue;\r\n let match = params[prop].match(attrPattern);\r\n if (match) {\r\n let paramValue = query.getOneValueForAttr(match[1]);\r\n if (!paramValue) {\r\n paramValue = '';\r\n }\r\n reqParams[prop] = params[prop].replace(attrPattern, paramValue);\r\n }\r\n }\r\n\r\n const requestParams = {\r\n listName: reqParams.listName,\r\n editorId: options.editorId,\r\n queryParams: reqParams\r\n };\r\n\r\n let list = this.getListFromCache(options);\r\n if (list && list.length > 0) {\r\n onResult(list);\r\n return;\r\n }\r\n\r\n let processed = false;\r\n\r\n const predefinedHandler = this._predefinedListRequestHandlers[options.editorId];\r\n if (predefinedHandler) {\r\n processed = predefinedHandler(options, onResult);\r\n }\r\n \r\n if (!processed && this.clientListRequestHandler) {\r\n processed = this.clientListRequestHandler(options, onResult);\r\n }\r\n\r\n if (!processed) {\r\n this.loadValueList({\r\n params: requestParams,\r\n success: (data) => {\r\n if (data) {\r\n this.addListToCache(options, data);\r\n }\r\n\r\n onResult(data);\r\n },\r\n error: (message) => {\r\n onResult(null);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Adds the translations of the EasyQuery messages for some locale\r\n * @param locale - the ISO code of the locale (like `en` or `uk`)\r\n * @param localeInfo - Locale settings and translations of EasyQuery texts and messages.\r\n * We expected an object with the struture of LocaleInfo interface here. \r\n */\r\n public addLocale(locale: string, localeInfo: i18n.LocaleInfo) {\r\n i18n.addLocale(locale, localeInfo);\r\n }\r\n\r\n /**\r\n * Adds event listener for event type.\r\n * @param eventType The event type\r\n * @param handler The handler for event\r\n */\r\n public addEventListener(eventType: 'ready' | 'loadModel' | 'initialModelLoad' | 'loadQuery' \r\n | 'syncQuery' | 'fetchData' | 'exportResult', handler: (context: EqContext) => void): string;\r\n public addEventListener(eventType: 'processStart' | 'processEnd', handler: (context: EqContext, status: ActionStatus) => void): string;\r\n public addEventListener(eventType: 'error', handler: (context: EqContext, status: ActionStatus) => void): string;\r\n public addEventListener(eventType: EqContextEventType | string, handler: (context: EqContext, data?: any) => void): string\r\n {\r\n return this.eventEmitter.subscribe(eventType, (event) => handler(this, event.data));\r\n }\r\n\r\n /**\r\n * Remove event handler for event type .\r\n * @param eventType The event type.\r\n * @param handlerId The handler id.\r\n */\r\n public removeEventListener(eventType: string, handlerId: string) {\r\n this.eventEmitter.unsubscribe(eventType, handlerId);\r\n } \r\n\r\n /**\r\n * Fires event.\r\n * @param eventType The event type.\r\n */\r\n public fireEvent(eventType: 'ready' | 'loadModel' | 'initialModelLoad' | 'loadQuery' | 'syncQuery' | 'fetchData' | 'exportResult');\r\n public fireEvent(eventType: 'processStart' | 'processEnd', data: ActionStatus);\r\n public fireEvent(eventType: 'error', data: Error);\r\n public fireEvent(eventType: EqContextEventType | string, data?: any) {\r\n this.eventEmitter.fire(eventType, data);\r\n }\r\n \r\n private baseEndpoint: string = 'api/easyquery';\r\n\r\n public getBaseEndpoint() {\r\n return this.baseEndpoint;\r\n } \r\n \r\n /**\r\n * Sends a `loadValueList` requesthe server and processes the response.\r\n * @param options A map of options to pass to `loadValueList` function.\r\n */\r\n public loadValueList(options?: ContextLoadValueListOptions) {\r\n options = options || {};\r\n\r\n this.startProcess({\r\n action: EqAction.GetValueList, \r\n text: 'Loading values'\r\n }, WidgetGroup.Result);\r\n\r\n const valueListResolver = this.eqServices.getValueListResolver();\r\n valueListResolver.loadValueList(options)\r\n .then((values) => {\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.GetValueList, \r\n text: 'Values loaded'\r\n }, WidgetGroup.Result);\r\n \r\n if (options.success) {\r\n options.success(values);\r\n }\r\n })\r\n .catch((error) => {\r\n const editorId = options && options.params ? options.params.editorId : 'undefined';\r\n const errorMessage = `Can't load the value list for editor ${editorId}.\\n ${error.message}`\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.GetValueList, \r\n text: errorMessage,\r\n sourceError: error \r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'GetValueList');\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Starts the process of the model loading.\r\n * This method can initiate a request to EasyQueryServer backend or get the model from OData or GraphQL endpoint \r\n * The content of the `options` parameter depends on concrete loader implementation.\r\n * @param options A map of options to pass to `loadModel` function (can be ommited)\r\n * @example \r\n * context.loadModel()\r\n * .then(model => {\r\n * alert(\"Model loaded!\");\r\n * });\r\n */\r\n public loadModel(options?: ContextLoadModelOptions): Promise<DataModel> {\r\n\r\n if (this.beforeLoadModel) {\r\n this.beforeLoadModel(this, options)\r\n }\r\n\r\n const modelId = options.modelId || '__default';\r\n const silent = options.silent || false;\r\n\r\n this.startProcess({\r\n action: EqAction.LoadModel,\r\n text: 'Loading model: ' + modelId\r\n }, WidgetGroup.Model)\r\n\r\n const modelLoader = this.eqServices.getModelLoader();\r\n return modelLoader.startModelLoading(options)\r\n .then((value) => {\r\n\r\n if (value) {\r\n this.loadModelFromData(value);\r\n\r\n if (this.dataModel.isEmpty()) {\r\n console.warn(`Empty model has been loaded. Model ID: ${this.dataModel.getId()}`);\r\n }\r\n }\r\n else {\r\n console.warn('Model has not been changed.');\r\n }\r\n\r\n\r\n this.fireEvent('loadModel');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.LoadModel,\r\n text: 'Model loaded: ' + modelId\r\n }, WidgetGroup.Model);\r\n\r\n if (!silent) {\r\n this.clearQuery();\r\n this.clearResult();\r\n\r\n this.refreshWidgets();\r\n }\r\n\r\n if (options.success) {\r\n options.success(this.getModel());\r\n }\r\n\r\n return this.getModel();\r\n })\r\n .catch(error => {\r\n const errorMessage = `Can't load model ${modelId}.\\n ${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.LoadModel,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Model);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, \"LoadModel\");\r\n }\r\n\r\n return this.getModel();\r\n });\r\n }\r\n\r\n public callWhenModelLoaded(callFunc: any) : void {\r\n const modelLoader = this.eqServices.getModelLoader();\r\n\r\n modelLoader.getModelPromise().then(() => {\r\n callFunc();\r\n });\r\n }\r\n\r\n /**\r\n * Loads the query \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks and `queryId` property of the query to load.\r\n * @example\r\n * context.loadQuery({\r\n * queryId: \"query-id\"\r\n * });\r\n */\r\n public loadQuery(options?: ContextLoadQueryOptions) {\r\n options = options || {};\r\n const modelLoader = this.eqServices.getModelLoader();\r\n\r\n this.clearResult();\r\n\r\n modelLoader.getModelPromise()\r\n .then(() => {\r\n options = options || {};\r\n \r\n const queryId = options.queryId;\r\n const silent = options.silent || false;\r\n \r\n if (this.beforeLoadQuery) {\r\n this.beforeLoadQuery(this, options);\r\n }\r\n\r\n this.startProcess({\r\n action: EqAction.LoadQuery,\r\n text: \"Query loading: \" + queryId\r\n }, WidgetGroup.Query);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.loadQuery(options)\r\n .then((data) => {\r\n\r\n if (data) {\r\n this.query.loadFromData(data, {\r\n validate: false\r\n });\r\n }\r\n\r\n this.fireEvent('loadQuery');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.LoadQuery,\r\n text: 'Query loaded: ' + queryId\r\n }, WidgetGroup.Query);\r\n\r\n this.query.resetModified();\r\n\r\n if (!silent) {\r\n this.query.fireChangedEvent({\r\n part: QueryChangePart.Properties,\r\n wasModified: this.query.isModified()\r\n });\r\n\r\n this.refreshWidgets();\r\n }\r\n\r\n if (options.success) {\r\n options.success(this.query);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const query = this.getQuery();\r\n\r\n error.message = \"Can't load query [\" + query.getId() + \"]\\n\" + (error.message || \"\");\r\n \r\n if (options.error) {\r\n options.error(error.message, EqAction.LoadQuery);\r\n }\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.LoadQuery,\r\n text: error.message,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n });\r\n })\r\n .catch((error) => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n /**\r\n * Loads the list of queries available for the current user. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks\r\n */\r\n public loadQueryList(options?: ContextLoadQueryListOptions) {\r\n const modelLoader = this.eqServices.getModelLoader();\r\n modelLoader.getModelPromise()\r\n .then(() => {\r\n this.startQueryListLoading(options);\r\n })\r\n .catch((error) => {\r\n const errorMessage = `Can't load the list of available queries.\\n ${error.message}`;\r\n this.throwError({\r\n action: EqAction.LoadQueryList,\r\n text: errorMessage,\r\n sourceError: error\r\n });\r\n }) \r\n }\r\n\r\n protected startQueryListLoading(options?: ContextLoadQueryListOptions): void {\r\n options = options || {};\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n \r\n const queryListLoadingPromise = queryStorage.getQueryList(options);\r\n\r\n queryListLoadingPromise\r\n .then((queries) => {\r\n if (options.success) {\r\n options.success(queries);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't load the list of available queries.\\n ${error.message}`;\r\n \r\n if (options.error) {\r\n options.error(errorMessage, 'LoadQueryList');\r\n }\r\n else {\r\n this.throwError({\r\n action: EqAction.LoadQueryList,\r\n text: errorMessage,\r\n sourceError: error\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates a new query and returns its content back to the client-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success`, `error` callbacks and `silent` option\r\n * @example\r\n * context.newQuery({\r\n * silent: true\r\n * });\r\n */\r\n public newQuery(options?: ContextNewQueryOptions) : Query {\r\n options = options || {};\r\n\r\n const clearQuery = typeof options.clearQuery !== 'undefined' ? options.clearQuery : true; \r\n this.query.reset(clearQuery);\r\n \r\n if (options.queryId) {\r\n this.query.setId(options.queryId);\r\n }\r\n \r\n if (options.name) {\r\n this.query.setName(options.name);\r\n }\r\n\r\n if (options.description) {\r\n this.query.setDescription(options.description);\r\n }\r\n\r\n const silent = options.silent || false;\r\n\r\n let useStorage = true;\r\n if (typeof options.useStorage !== 'undefined') {\r\n useStorage = options.useStorage;\r\n }\r\n\r\n const onNewQuery = () => {\r\n const query = this.getQuery();\r\n query.isNewbie = true;\r\n\r\n if (!silent) {\r\n query.fireChangedEvent({\r\n part: QueryChangePart.All,\r\n wasModified: query.isModified()\r\n });\r\n }\r\n }\r\n\r\n if (useStorage) {\r\n this.startProcess({\r\n action: EqAction.NewQuery,\r\n text: 'New query creation...'\r\n }, WidgetGroup.Query);\r\n \r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.newQuery(options)\r\n .then((queryData) => {\r\n\r\n if (queryData) {\r\n this.query.loadFromData(queryData);\r\n }\r\n \r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.NewQuery,\r\n text: 'A new query has been created'\r\n }, WidgetGroup.Query);\r\n \r\n onNewQuery();\r\n \r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't create a new query.\\n${error.message}`;\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.NewQuery,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n \r\n if (options.error) {\r\n options.error(errorMessage, \"NewQuery\");\r\n } \r\n }); \r\n }\r\n else {\r\n onNewQuery();\r\n }\r\n return this.query;\r\n }\r\n\r\n /**\r\n * Saves the current query to some storage on the server-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public saveQuery(options?: ContextSaveQueryOptions) {\r\n options = options || {};\r\n\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.SaveQuery,\r\n text: 'Query saving: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.saveQuery(options)\r\n .then((data) => {\r\n this.endProcess({\r\n action: EqAction.SaveQuery,\r\n result: EqActionResult.Success,\r\n text: \"Query saved: \" + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n if (data) {\r\n query.loadFromData(data);\r\n }\r\n\r\n query.resetModified();\r\n query.isNewbie = false;\r\n \r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't save query ${query.getId()}.\\n ${error.message}`;\r\n\r\n this.endProcess({\r\n action: EqAction.SaveQuery,\r\n result: EqActionResult.Error,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, EqAction.SaveQuery);\r\n } \r\n }); \r\n }\r\n\r\n /**\r\n * Removes the current query from some storage on the server-side. \r\n * @param options \r\n * The content of the `options` parameter depends on `QueryStorage` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public removeQuery(options?: ContextRemoveQueryOptions) {\r\n options = options || {};\r\n const query = this.getQuery();\r\n \r\n this.startProcess({\r\n action: EqAction.RemoveQuery,\r\n text: 'Query deleting: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n const queryStorage = this.eqServices.getQueryStorage();\r\n queryStorage.removeQuery(options)\r\n .then(() => {\r\n query.reset();\r\n\r\n this.endProcess({\r\n action: EqAction.RemoveQuery,\r\n result: EqActionResult.Success,\r\n text: \"Query deleted: \" + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't remove query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n action: EqAction.RemoveQuery,\r\n result: EqActionResult.Error,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'RemoveQuery');\r\n } \r\n }); \r\n }\r\n\r\n /**\r\n * Syncronizes the current query. \r\n * @param options \r\n * The content of the `options` parameter depends on `QuerySyncronizer` implementation.\r\n * Usually it contains `success` and `error` callbacks\r\n */\r\n public syncQuery(options?: ContextSyncQueryOptions) { \r\n options = options || {};\r\n \r\n const query = this.getQuery();\r\n\r\n if (this.beforeSyncQuery) {\r\n this.beforeSyncQuery(this, options);\r\n }\r\n \r\n this.startProcess({\r\n action: EqAction.SyncQuery,\r\n text: 'Query syncing: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n const querySyncrhonizer = this.eqServices.getQuerySynchronizer();\r\n querySyncrhonizer.syncQuery(options)\r\n .then((result) => { \r\n this.resultStatement = result && result.statement \r\n ? result.statement \r\n : '';\r\n\r\n this.fireEvent('syncQuery');\r\n\r\n this.refreshWidgets(WidgetGroup.Statement);\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.SyncQuery,\r\n text: 'Query synced: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n\r\n if (result) {\r\n if (result.querySaved) {\r\n\r\n const q = result.query as QueryData;\r\n if (q) {\r\n \r\n query.setId(q.id)\r\n query.setName(q.name);\r\n query.setDescription(q.desc)\r\n query.extraData = q.extraData;\r\n }\r\n\r\n query.resetModified();\r\n this.refreshWidgets(WidgetGroup.QueryStatus);\r\n }\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Can't synchronize query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.SyncQuery, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'SyncQuery');\r\n } \r\n });\r\n }\r\n\r\n /**\r\n * Fetches the data (usuall by executing current query) and processes the result. \r\n * @param options \r\n * The `options` parameter in addition to the options defined in ExecuteQueryOptions structure may also contain `success` and `error` callbacks.\r\n * @example\r\n * context.fetchData({ success: function(result) {\r\n * //do whatever you want with the result\r\n * }})\r\n * \r\n */\r\n public fetchData(options?: ContextFetchDataOptions) {\r\n options = options || {}; \r\n\r\n const elasticPaging = typeof(options.elasticPaging) !== 'undefined' \r\n ? options.elasticPaging \r\n : this.elasticPaging;\r\n\r\n this.resultTable.elasticChunks = elasticPaging;\r\n\r\n options.chunk = options.chunk ||\r\n {\r\n offset: 0,\r\n limit: this.resultTable.chunkSize,\r\n needTotal: !elasticPaging\r\n };\r\n \r\n if (this.debugMode) {\r\n options.debug = 'Fetching the result set. Initial chunk'; \r\n }\r\n\r\n if (!this.query.tryValidate({\r\n checkExpressions: true\r\n })) {\r\n return;\r\n }\r\n\r\n //just to support the old way of catching \"group fetch\" operation finish\r\n if (options.groupFetchSuccess) {\r\n this.afterGroupFetch = options.groupFetchSuccess;\r\n }\r\n\r\n if (this.resultTable.elasticChunks) {\r\n options.chunk.limit++;\r\n }\r\n\r\n this.fetchDataChunk({\r\n ...options,\r\n success: (result) => {\r\n if (result.statement) {\r\n this.resultStatement = result.statement;\r\n this.refreshWidgets(WidgetGroup.Statement);\r\n }\r\n\r\n const aggrCalculator = this.getServices().getAggregatesCalculator();\r\n aggrCalculator.reset();\r\n\r\n this.resultContent = result;\r\n\r\n if (result.resultSet) {\r\n this.resultTable.clear();\r\n this.resultTable.id = this.query.getId();\r\n const resultSet = result.resultSet;\r\n for (const col of resultSet.cols) {\r\n this.resultTable.columns.add(col);\r\n }\r\n\r\n if (result.meta && typeof (result.meta.totalRecords) !== 'undefined') {\r\n this.resultTable.setTotal(result.meta.totalRecords);\r\n }\r\n \r\n const count = resultSet.rows.length;\r\n if (this.resultTable.elasticChunks && count === options.chunk.limit) {\r\n resultSet.rows.splice(resultSet.rows.length - 1, 1);\r\n }\r\n\r\n for (const row of resultSet.rows) {\r\n this.resultTable.addRow(row);\r\n }\r\n\r\n if (this.resultTable.elasticChunks) {\r\n this.resultTable['total'] = (count < options.chunk.limit)\r\n ? resultSet.rows.length \r\n : 0;\r\n }\r\n\r\n this.resultTable.fireUpdated();\r\n }\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public getQueryFile(options?: ContextGetQueryFileOptions) {\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.GetQueryFile,\r\n text: 'Getting query file: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryFileLoader = this.getServices().getQueryFileLoader();\r\n queryFileLoader.getQueryFile(options)\r\n .then(() => { \r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.GetQueryFile, \r\n text: 'Getting query file: ' + query.getId()\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch(error => {\r\n const errorMessage = `Can't get file for query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.GetQueryFile, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'GetQueryFile');\r\n }\r\n });\r\n }\r\n\r\n public uploadQueryFile(options?: ContextUploadQueryFileOptions) {\r\n const query = this.getQuery();\r\n\r\n this.startProcess({\r\n action: EqAction.UploadQueryFile,\r\n text: 'Uploading query file: ' + query.getId()\r\n }, WidgetGroup.Query);\r\n\r\n const queryFileLoader = this.getServices().getQueryFileLoader();\r\n queryFileLoader.uploadQueryFile(options)\r\n .then((data) => { \r\n query.loadFromData(data);\r\n \r\n this.fireEvent('loadQuery');\r\n\r\n this.refreshWidgets();\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.UploadQueryFile, \r\n text: 'Uploading query file: ' + query.getId()\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n })\r\n .catch(error => { \r\n const errorMessage = `Can't upload a file for query ${query.getId()}.\\n ${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.UploadQueryFile, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Query);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'UploadQueryFile');\r\n }\r\n });\r\n }\r\n\r\n public fetchDataChunk(options?: ContextFetchDataOptions) {\r\n const queryId = this.getQuery().getId();\r\n\r\n let fetchOptions = options || {};\r\n \r\n if (this.useStoredQueryOnFetch) {\r\n fetchOptions.queryId = this.query.getId();\r\n }\r\n if (this.beforeFetchData) {\r\n this.beforeFetchData(this, fetchOptions);\r\n } \r\n \r\n this.startProcess({\r\n action: EqAction.FetchData, \r\n text: 'Fetching data for the query: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const dataFetcher = this.eqServices.getDataFetcher();\r\n dataFetcher.fetchData(fetchOptions)\r\n .then((result) => {\r\n if (result.statement) {\r\n this.resultStatement = result.statement;\r\n }\r\n\r\n this.resultContent = result;\r\n\r\n // we need to call success callback before firing fetchData,\r\n // because otherwise, it won't update the result table \r\n // in the context before afterFetchData callback is called.\r\n if (fetchOptions.success) {\r\n fetchOptions.success(result);\r\n }\r\n\r\n this.fireEvent('fetchData');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.FetchData, \r\n text: 'Data fetching is finished for the query: ' + queryId\r\n }, WidgetGroup.Result);\r\n })\r\n .catch((error: Error) => { \r\n const errorMessage = `Data fetching error for the query ${queryId}. \\n${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Result);\r\n\r\n if (fetchOptions.error) {\r\n fetchOptions.error(errorMessage, EqAction.FetchData);\r\n }\r\n });\r\n }\r\n\r\n protected onResultTableUpdate() {\r\n const aggrSettings = this.query.getAggregationSettings();\r\n const calculator = this.getServices().getAggregatesCalculator();\r\n if (aggrSettings.needAggrCalculation() && calculator.needRecalculation()) {\r\n calculator.calculate({\r\n maxLevel: aggrSettings.getGroups().length + 1,\r\n resultObtained: (result, level) => {\r\n if (this.afterGroupFetch) {\r\n this.afterGroupFetch(result);\r\n }\r\n },\r\n errorOccurred: error => {\r\n const errorMessage = `Data fetching error on group level ${error.level} query. \\n${error.message}`;\r\n this.throwError({\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n sourceError: error\r\n })\r\n }\r\n }); \r\n }\r\n }\r\n\r\n /**\r\n * Fetches the data for a drill-down query (if defined) and processes the result. \r\n * @param options \r\n */\r\n public fetchDrillDownData(options: ContextFetchDataOptions) {\r\n options = options || {};\r\n\r\n options.chunk = options.chunk ||\r\n {\r\n offset: 0,\r\n limit: this.resultTable.chunkSize,\r\n needTotal: true\r\n };\r\n\r\n const query = options.query as Query;\r\n const queryId = query.getId();\r\n \r\n this.startProcess({\r\n action: EqAction.FetchData, \r\n text: 'DrillDown executing: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const queryExecutor = this.eqServices.getDataFetcher();\r\n queryExecutor.fetchData(options)\r\n .then((result) => {\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.FetchData, \r\n text: 'DrillDown execution error: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success(result);\r\n }\r\n \r\n })\r\n .catch((error) => {\r\n const errorMessage = `Drill-down data fetching error for query ${queryId}. \\n${error.message}`;\r\n\r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.FetchData, \r\n text: errorMessage,\r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'DrillDown');\r\n } else {\r\n this.throwError({\r\n action: EqAction.FetchData, \r\n text: errorMessage\r\n }); \r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Fetches the data for defined by this context and exports them to the specified format. \r\n * @param options \r\n * The content of the `options` parameter depends on `EqExporter` implementation.\r\n * Usually it contains `format` property which defines the format of the exported data (e.g. `csv`),\r\n * and `success` and `error` callbacks\r\n * @example\r\n * context.exportResult({\r\n * format: csv\r\n * });\r\n * \r\n */\r\n public exportResult(options?: ContextExportResultOptions) {\r\n options = options || {};\r\n\r\n if (this.beforeExportResult) {\r\n this.beforeExportResult(this, options);\r\n }\r\n\r\n const format = options.format;\r\n\r\n if (format) {\r\n const exporter = this.getExporter(format);\r\n\r\n if (exporter) {\r\n const queryId = this.getQuery().getId();\r\n\r\n if (this.useStoredQueryOnFetch) {\r\n options.queryId = queryId;\r\n }\r\n\r\n this.startProcess({\r\n action: EqAction.ExportResult, \r\n text: 'Exporting result for query: ' + queryId\r\n }, WidgetGroup.Result);\r\n\r\n const localeSettings = i18n.getLocaleSettings();\r\n options.settings = localeSettings;\r\n\r\n const aggrSettings = this.query.getAggregationSettings();\r\n if (aggrSettings.hasAggregates()\r\n && (aggrSettings.hasGrandTotals() || aggrSettings.hasGroups())) \r\n {\r\n options.aggregates = aggrSettings.saveToData();\r\n }\r\n\r\n exporter.export(options)\r\n .then((result) => {\r\n this.fireEvent('exportResult');\r\n\r\n this.endProcess({\r\n result: EqActionResult.Success,\r\n action: EqAction.ExportResult,\r\n text: `The result set for query [${queryId}] has been successfully exported`\r\n }, WidgetGroup.Result);\r\n\r\n if (options.success) {\r\n options.success();\r\n }\r\n\r\n })\r\n .catch((error: Error) => {\r\n const errorMessage = `Error on exporting data for query ${queryId}. \\n${error.message}`;\r\n \r\n this.endProcess({\r\n result: EqActionResult.Error,\r\n action: EqAction.ExportResult,\r\n text: errorMessage,\r\n sourceError: error\r\n }, WidgetGroup.Result);\r\n\r\n if (options.error) {\r\n options.error(errorMessage, 'ExportResult');\r\n } \r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\n\r\ntype EqContextEventType = \r\n 'ready' | \r\n 'loadModel' | \r\n 'loadQuery' |\r\n 'syncQuery' |\r\n 'initialModelLoad' | \r\n 'processStart' | \r\n 'processEnd' | \r\n 'fetchData' |\r\n 'exportResult' |\r\n 'error';\r\n\r\ntype EqEndpointKey = \r\n 'GetModel' | \r\n 'GetQuery' |\r\n 'SaveQuery' |\r\n 'NewQuery' |\r\n 'RemoveQuery' |\r\n 'GetQueryList' |\r\n 'SyncQuery' |\r\n 'FetchData' |\r\n 'GetValueList' |\r\n 'ExportResult' | \r\n 'GetQueryFile' |\r\n 'UploadQueryFile';\r\n\r\ntype ListRequestHandlerParams = {\r\n listName: string,\r\n editorId: string,\r\n editorParams?: {\r\n [key: string]: string\r\n }\r\n}\r\n\r\nexport interface EqBackendInfo {\r\n type?: string,\r\n subType?: string\r\n}","import { utils } from '@easydata/core';\r\nimport { EqContext } from './context';\r\nimport { WidgetGroup } from '../types/widget_group';\r\n \r\n/**\r\n * Represents a widget - a visual element with \"knows\" how to render itself.\r\n * Some widgets just display some information from the context (like the generated SQL or the result set).\r\n * Others - allow user to interact with them to define query conditions or columns.\r\n */\r\nexport abstract class Widget \r\n{\r\n protected context: EqContext;\r\n protected group: WidgetGroup;\r\n protected slot: HTMLElement;\r\n\r\n private _id : string;\r\n\r\n /**\r\n Initializes a new instance of the `Widget` class\r\n * @param slot - an HTML element in which we should place our widget.\r\n */\r\n constructor(slot: HTMLElement) {\r\n this.slot = slot;\r\n this._id = utils.generateId(this.getWidgetType());\r\n }\r\n\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n abstract getWidgetType() : string;\r\n\r\n /**\r\n * Initializes the widget and assign it to some context\r\n * @param context \r\n * @param options \r\n */\r\n public init(context: EqContext, options?: any){\r\n this.context = context;\r\n }\r\n\r\n /**\r\n * Returns current context (the one this widget belongs to)\r\n */\r\n public getContext(): EqContext {\r\n return this.context;\r\n }\r\n\r\n /**\r\n * Refreshes the widget's content\r\n */\r\n public refresh() {\r\n this.refreshCore();\r\n }\r\n\r\n /**\r\n * This function is called from `refresh` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget \r\n */\r\n protected refreshCore() { \r\n }\r\n\r\n /**\r\n * This function is called on the start of some process this widget participates in.\r\n * For example, some widgets can show a spinner or a progress bar\r\n * at the beginning of some long process (e.g. model loading). \r\n */ \r\n public onProcessStart() {\r\n this.onProcessStartCore();\r\n }\r\n\r\n /**\r\n * This function is called from `onProcessStart` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget. \r\n */\r\n protected onProcessStartCore() {\r\n }\r\n\r\n /**\r\n * This function is called on the end of some process this widget participates in.\r\n * For example, some widgets should be updated on model loading \r\n * or after the execution of the current query\r\n */\r\n public onProcessEnd() {\r\n this.onProcessEndCore();\r\n } \r\n\r\n /**\r\n * This function is called from `onProcessEnd` function.\r\n * It does nothing in the base `Widget` class \r\n * but can be overridden in derived classes\r\n * to implement the functionality specific for a particular widget. \r\n */\r\n protected onProcessEndCore() {\r\n }\r\n\r\n /**\r\n * Returns `true` if the widget belongs to one of the groups specified in the parameter\r\n * @param groups\r\n */\r\n public belongsToGroup(groups?: WidgetGroup): boolean {\r\n if (typeof groups != 'undefined' && groups != null) {\r\n if ((groups & this.group) === 0)\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public destroy() : void {\r\n this.destroyCore();\r\n }\r\n\r\n protected destroyCore() { \r\n }\r\n}\r\n","class EqVersionInfo {\r\n\r\n constructor(public major: number, public minor: number, public update: number) {}\r\n\r\n\r\n public toString(): string {\r\n return `${this.major}.${this.minor}.${this.update}`\r\n }\r\n}\r\n\r\nexport const versionInfo = new EqVersionInfo(6, 2, 0);","import { i18n } from '@easydata/core'\r\n\r\nfunction addEasyQueryCoreTexts() {\r\n i18n.updateDefaultTexts({\r\n NewQueryName: '[New query]',\r\n\r\n //DateTime macroses\r\n Today: 'Today',\r\n Yesterday: 'Yesterday',\r\n Tomorrow: 'Tomorrow',\r\n FirstDayOfMonth: 'First day of the month',\r\n LastDayOfMonth: 'Last day of the month',\r\n FirstDayOfWeek: 'First day of the week',\r\n FirstDayOfYear: 'First day of the year',\r\n FirstDayOfNextWeek: 'First day of the next week',\r\n FirstDayOfNextMonth: 'First day of the next month',\r\n FirstDayOfNextYear: 'First day of the next year',\r\n Now: 'Now',\r\n HourStart: 'This hour start',\r\n Midnight: 'Midnight',\r\n Noon: 'Noon',\r\n\r\n Entities: {},\r\n Attributes: {},\r\n Operators: {},\r\n AggreateFunctions: {}\r\n });\r\n}\r\n\r\naddEasyQueryCoreTexts();","export * from './utils/utils'\r\nexport * from './utils/constants'\r\n\r\nexport * from './export/exporter'\r\n\r\nexport * from './common/eq_services'\r\nexport * from './common/tree'\r\n\r\nexport * from './data/eq_data_loader'\r\nexport * from './data/google_data_converter'\r\nexport * from './data/eq_aggr_container'\r\n\r\nexport * from './types/data_kind'\r\nexport * from './types/link_type'\r\nexport * from './types/cond_tag'\r\nexport * from './types/cond_part'\r\nexport * from './types/expr_tag'\r\nexport * from './types/eq_editor_tag'\r\nexport * from './types/widget_group'\r\n\r\nexport * from './dm/aggr_function'\r\nexport * from './dm/data_model'\r\nexport * from './dm/entity'\r\nexport * from './dm/operator'\r\nexport * from './dm/value_editor'\r\nexport * from './dm/link'\r\n\r\nexport * from './dm/dto/af_data'\r\nexport * from './dm/dto/dm_data'\r\nexport * from './dm/dto/entity_data'\r\nexport * from './dm/dto/operator_data'\r\n\r\nexport * from './main/eq_actions'\r\nexport * from './main/model_loader'\r\nexport * from './main/model_storage'\r\nexport * from './main/query_storage'\r\nexport * from './main/context'\r\nexport * from './main/list_cache'\r\nexport * from './main/context_options'\r\nexport * from './main/widget'\r\nexport * from './main/action'\r\nexport * from './main/data_fetcher'\r\nexport * from './main/query_synchronizer'\r\nexport * from './main/value_list_resolver'\r\nexport * from './main/query_file_loader'\r\n\r\nexport * from './query/query_column'\r\nexport * from './query/condition'\r\nexport * from './query/expression'\r\nexport * from './query/query'\r\nexport * from './query/descriptors'\r\nexport * from './query/query_events'\r\n\r\nexport * from './query/dto/query_data'\r\nexport * from './query/dto/query_column_data'\r\nexport * from './query/dto/condition_data'\r\nexport * from './query/dto/expression_data'\r\n\r\nexport * from './eqs/eqs_exporter'\r\nexport * from './eqs/eqs_model_loader'\r\nexport * from './eqs/eqs_data_fetcher'\r\nexport * from './eqs/eqs_query_synchronizer'\r\nexport * from './eqs/eqs_value_list_resolver'\r\nexport * from './eqs/eqs_query_file_loader'\r\n\r\nexport * from './utils/format_parser'\r\n\r\nexport * from './utils/version_info'\r\n\r\n//for backward compatibility\r\nexport { i18n } from '@easydata/core'\r\n\r\nimport './i18n/text_resources'\r\n"],"sourceRoot":""}
|